まぁるいしっぽ:アウトラインクリップピクスリスログウィキプロフまぁるいしっぽ元オタクだけど、いまや三姉妹のパパが、iPhone・ubuntu・カメラ・科学・SFなどなど雑多な興味ごとを書いていく連絡はこちらアウトライン2012年10月22日vimをアウトラインプロセッサとして使うvimを本格的に使い始めたが、Emacsがうらやましいところがひとつある。org-modeがあることだ。org-modeは、Emacsをアウトラインプロセッサとして使うための機能を付与する非常に強力なスクリプトである。vimにもorg-modeプラグインが開発されているが導入が難しい。Emacsで使うからこそ強力で便利であるのであり、そのままの操作感をvimに持ち込んでも無理があるというもの。https://github.com/powentan/vim-orgmodehttps://github.com/jceb/vim-orgmodeそこで簡易なプラグインの導入で、アウトラインプロセッサとして実用になる手段を考えた。なにそれ、おいしいの?1.求める機能org-modeで特に便利だと思っている機能のうち、以下の2つについてvimに持ち込む。(1)表作成機能テキストで表を作るとき、スペースの数を合わせるのが最も時間がかかる。表の内容だけをスペース区切りで羅列し、ワンタッチで表形式に整える機能。整形ルールは、1つのスペースに区切った項を、|(縦棒)を補って表形式にする。いった各文章単位を、インデントを使い記述していき、ブロック単位で前後関係を入れ替えたり、レベルを上げ下げする。その際、視覚的にスライドして移動する機能。表を簡易に作成する機能はvim標準では存在しないので、以下のプラグインを導入し、任意のセパレータ文字で表形式に整える機能を付与する。文書の階層構造におけるレベルの移動は、インデントの量により決まる。vimでは、ビジュアルモードで選択した行を、"<"と">"でインデント量を増減させられる。そこで、ビジュアルモードでインデントを基準とした選択をできるようにする。そのために以下のプラグインを導入する。text-obj-userstextobj-indent(3)文章構造の編集ー上下移動vimには、複数行をひと塊として扱い、1行に畳み込んでみせるfold機能がある。畳み込みにはレベルがあり、第一レベルの畳み込みに、複数の第二レベルの畳み込みを組み入れられる。その機能を使い、章や段落を1行に見せかけて編集することで、文書構造を行の移動として入れ替えられる。標準のままでは、畳み込んだときの表示がわかりにくいので、以下のプラグインを導入する。上記のAlign.vimをインストールしたら、以下の設定を入れる。マルチバイトを使うので、3を設定しておく。3(2)以下のキーマップを設定どのキーに割り当てるかは任意。ここれは、,tに割り当てている。!\|!g<CR>gv:s!.*!\|&\|!g<CR>gv<Plug>AM_t\|(3)操作方法[基本]スペース区切りで書いた表から、スペースを補完して整形する。これは(1)のalign.vimの操作。これは、(2)の独自キーマップの操作。ビジュアルモードで整形したい表を選択し、,tその他の操作については、以下ページを参照。高性能なテキスト整形ツールAlignの使い方スペース区切りの表からtableタグなどへの変換4.文書構造の入れ替えここでは、まず選択を容易にするために、textobj-indentを使えるようにする。そのあと、インデント幅を調整する左右の移動を容易にする。文書の前後関係を調整するための、上下の移動については、スライドする方式と折りたたみ機能を使った方式を考える。(1)領域の選択vimの基本機能で、空行で挟まれた行は、段落として認識されるので、vipかvapで一気に選択できる。vipはカーソル位置がそのまま、vapで選んだ場合は選択領域の最終行にカーソルが移動する。インデント量が同じ領域を一気に選択するには、textobj-indentを使う。textobj-indentには設定は特にない。操作方法は、以下のとおり。カレントの行のインデントレベルと、それ以下のレベルの行を選択する。空行があればそこで止まる。カレントの行のインデントレベルと同じレベルの行を選択する。空行があればそこで止まる。カレントの行のインデントレベルと、それ以下のレベルの行を選択する。空行があっても止まらず、上位のレベルの行で止まる。カレントの行のインデントレベルと同じレベルの行を選択する。空行があっても止まらず、上位もしくは下位のレベルの行で止まる。>のキーを使うと、その領域のインデント量をshiftwidthの分だけ増減してくれる。変更が一回終わると、領域選択が解除されてしまい、連続的に移動することができない。そこで、以下のキーマップを.vimrcに追記することで、領域選択がキャンセルさなくなり、連続して移動させられる。>gvなお、tab幅については、下記参考ページのはてな技術勉強会のページに詳しい。ぼくは、以下のように設定してある。選択した領域をddで消して、任意の場所にpで貼り付けてもよいのだが、その方法は、はっきりと、ここをここに移したい、と決まっている場合。構成を考えながら、あっちにおいてみたり、こっちにおいてみたりしてみたい。org-modeでは、選択範囲を一行ずつスライドしていくことができたので、vimでも、それを実現した。以下のvimスクリプトを.vimrcに組み込む。(下記、参考ページにあるtacahiroyさん作成)下記のキーマップでは、ビジュアル選択状態でCTRL+pで一行上に、CTRL+nで一行下に、選択ブロックが移動する。<SID>move_block('u')<Cr>==gv(4)畳込み(fold)の活用vimには、あるルールで行を畳み込み、表題だけみせる機能がある。それを使い、文書構造全体を見回せるように表示する。畳み込みルールは、中括弧3つを入力し、それで領域を認識させる方法(marker)と、インデント幅で認識させる方法(indent)がある。ぼくは自由に指定できるmarkerを使っている。次に、左端に畳み込みレベルのマークを表示する。ここでは第5レベルまで表示とした。foldcolumn=5使い方は以下。畳み込みのopenとcloseをトグルで切り替える。大文字だと再起的に開く。全ての畳み込みを開く。全ての畳み込みを閉じる。畳み込み印を付与する。対応する折り畳み印を削除する。(5)FoldCCの設定foldCCの設定。畳み込みしたときの表示テキストを、FoldCCのものにする。畳み込むと複数行が1行に見る。そこにカーソルを持ってきて、ddで削除し、任意の位置でpで貼り付けてやると、畳み込んだ領域が全て移動することができる。ちなみに、畳み込みをしているときに、(3)のスライド方式を使うと、畳込みの階層が崩れて逆に見にくい。TABの説明ここでは紹介しなかったが、foldで畳み込んだ表題をリスト表示し、選んだ表題にすばやくカーソル移動できるuniteのプラグインがある。(19)タグクラウド10.04264adeskbaraliasALIGNAPIappengineappleキーボードATOKbashCASEchainconqueconsumerdigdnssecDynamicElementEmacsEvernoteevervimexifGAEGalaxygithubGoogleimageiOSiOS5iPadiPhoneiPhone4iphoneスタンドjavascriptLeftMacOSnoteoauthofOSOSXPadfonepythonretinaRightrmagickRubySHELLsigchasesinatrasmbmountSTYLEtableTDTDLToTRTrusttwitterUbuntuupdateurischemeVAPORVimWindowsXxwindowかな遊びひらがなみらい科学館やはぶさアオシマキーボードクリップクロックスゴムバンドショートカットスキーマテキストエディタディレクトリ共有プラモプラモデルワッフル三段ベッド。