vimで折り畳みを使って行ジャンプ専科から解脱してみた
はじめに
ファイルの行数が増えてくると、目的の行まで移動することがやや手間になってきます。勢いをつけてスクロールをするのもありですが、スクロール玄人になりたいとは思いません。
テキストエディタにvimを使っている場合は行指定(:NUM
)にて直移動ができます。但し、正確に移動する場合は肝心の行が何行か判っている前提になります。
vimはファイルタイプと動作形式を指定することで好みの形に複数の行を折り畳むことが出来るのですが、私自身は一度も折り畳みを使っていませんでした。見込み行数を推測しての行指定ジャンプ(:50 → :100 → :75
)を繰り返すという方法に走っていたのが原因です。(ニアピンすると気持ちいいという理由もあります)
ですが、画面上の描写がめまぐるしく変わると割と目に辛いものがあること、Cfn絡みで推定1000行を超えそうな類似項目の多いyamlを触る機会が増えたこともあり、折り畳みについて覚えつつ関連するプラグイン等にも触れてみることにしました。
折り畳み操作について
編集中の操作にて有効にしたい場合は以下のコマンドを実行します。この場合はインデントに沿います。有無言わせずに全部折り畳まれるので、初めて行った時には多分途方にくれます。
:set foldmethod=indent
慌てずに畳まれている行上(+--XX 行:
)にてzO
を実行しましょう。
ファイルタイプ別の折り畳み挙動設定
編集中に毎回有効にするコマンドを打つのも面倒なため、折り畳みたいファイルに対して夫々設定ファイルに記載することをお勧めします。
autocmd FileType yaml setlocal foldmethod=indent autocmd FileType json setlocal foldmethod=syntax
ただ、最初から全部折り畳まれているため開いた時に把握し難いのも確かです。その場合、foldlevel
にて初期の折り畳み位置を変えることで回避も可能です。
autocmd FileType yaml setlocal foldmethod=indent foldlevel=100 autocmd FileType json setlocal foldmethod=syntax foldlevel=100
foldmethodには以下の6種類があります。とりあえずはmanual、indent、syntaxについて理解できればある程度はカバーできるのではないかと思います。
type | 解説 |
---|---|
manual | 手動で折畳を定義する |
indent | インデントの数を折畳のレベル(深さ)とする |
expr | 折畳を定義する式を指定する |
syntax | 構文強調により折畳を定義する |
diff | 変更されていないテキストを折畳対象とする |
marker | テキスト中の印で折畳を定義する |
pythonコードの折り畳みについて
foldmethodに頼る手もありますが、以下のプラグインを利用することでPythonのsyntaxに沿って手軽な折り畳みが可能になります。 tweekmonster/braceless.vim: Text objects, folding, and more for Python and other indented languages.
neovimの場合のインストール設定は以下の通りです。
[[plugins]] repo = 'tweekmonster/braceless.vim' on_ft = 'python'
折り畳み(fold
)とハイライト(highlight-cc2
)を有効にしておきます。
autocmd FileType python BracelessEnable +fold +highlight-cc2
まとめ
目的の行に向かうのが手間な時に、それ以外のコードを折り畳むことで想定的に手元へ寄せることも可能です。「まだfoldmethodは使ったことがなかった」という方は試してみると快適になるかもしれません。