おそらく最も効果的な解決策は、マッチ ハイライトを使用してインデント ガイドを「描画」することです。それがどのように役立つかを理解するには、次の例を見てください。
:match Search /\%(\_^\s*\)\@<=\%(\%1v\|\%5v\|\%9v\)\s/
強調表示—検索の強調表示グループを使用します。もちろん、他のグループを使用することもできます。最初、5 番目、および 9 番目 (継続することができます) の仮想列は、行の先頭から空白だけが前にあるスペース文字で占められています。したがって、これにより、高々 3 レベルの深さの 4 スペースのインデントが強調表示されます。
このアイデアを一般化するために残っている唯一のことは、より深いインデント レベルを処理し、実際のインデント幅を使用するために、現在のバッファーtextwidth
と設定に従って、上記と同様のパターンを生成する手順です。shiftwidth
このタスクは、以下の関数に示すように簡単に自動化できます。
function! ToggleIndentGuides()
if exists('b:indent_guides')
call matchdelete(b:indent_guides)
unlet b:indent_guides
else
let pos = range(1, &l:textwidth, &l:shiftwidth)
call map(pos, '"\\%" . v:val . "v"')
let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s'
let b:indent_guides = matchadd('CursorLine', pat)
endif
endfunction
現在のバッファでインデントガイドが必要なときはいつでも、 でオンに切り替えることができます:call ToggleIndentGuides()
。もちろん、ハイライト グループを変更したり (またはインデント ガイドで使用する専用のグループを作成したり)、そのための便利なマッピングをセットアップし、autocmd
一部のファイル タイプに対して から呼び出すことができます。
例として、上記のアプローチのわずかに拡張されたバージョンを実装するhttps://gist.github.com/734422.vimrc
の私のファイルから構成を強調表示するインデント ガイドを参照してください。