回答:
統一された答え:
私はlistcharsを使ってみます:
:set listchars=tab:\|\
:set list
注:\
上記の最後の後にスペースがあります。
この方法は、このようなことを示すためにVimの組み込みサポートを使用するため、優れています。
出力例:
| if (1) {
| | func();
| }
ただし、これは先頭のスペースでは機能しません。@Josh Petrieが指摘したように、スペースで動作するパッチがありますが、 Vimを再コンパイルする必要がありますが、これはこの答えの範囲外です。
Vaibhav Sagarは、プラグインindentLineがこの機能を実行することを指摘しています。
通常の方法でインストールし(プラグインのインストールを参照)、それ以上の入力なしで魔法のように機能するようです。ASCIIバーを気にしないのであれば、フォントで何もする必要はありません。インデント設定を設定して実行した後の例の出力例:IndentLinesReset
45 ¦ var move = function(direction) {
46 ¦ ¦ if(!initialized) { initialize(); }
47
48 ¦ ¦ if(shiftBoard(direction)) {
49 ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50 ¦ ¦ }
51 ¦ };
プラグインにはVim 7.3以降が必要で、cleaverはそのバージョンの隠蔽機能を使用します。テキストを実際に非表示にする代わりに、テキストをビュー内のバーに置き換えますが、実際のバッファーは置き換えません。その結果、バーが表示されますが、ファイルに保存されません(実際はスペースであるため)
これらのメソッドは両方とも、「適切に」インデントされたコードを想定しています。彼らは、「ブロック」が開かれたときにインデント行をインデントのレベルに配置するのではなく(昇華するように見えます)、代わりにインデント設定に基づいて一定の間隔で行を配置します。さらに、実際にスペースがある行にのみバーを表示します(最初の行の下のvim出力の行にif
バーがないため、視覚的なギャップが生じます)
私が使用する別のオプションは、まさにあなたが求めていたものではありませんが、同じ列にあるものを見やすくするという同じ目的を達成しますvimrc
:
set cursorcolumn
set cursorline
これには、見たい列にカーソルを移動する必要があるというトレードオフがありますが、視覚的な混乱は少なくなります。通常、インデントレベルを気にするときは、とにかくカーソルで自分の場所を維持します。また、私の方法は、中括弧を閉じずにpythonのような言語で見た目が悪くないです。
完全を期すために、Indent Guidesプラグインもあります。これは、空白の色を交互に変えてインデントレベルを表示します。バージョン7.2以降が必要です。変数tabstop
とshiftwidth
変数を使用するため、おそらくインデント設定ですぐに動作します。
プラグインをインストールしたら、単に:IndentGuidesEnable
またはを使用できます:IndentGuidesDisable
。ターミナルvimを使用している場合は、マニュアルに従って、
現時点では、Terminal Vimには基本的なサポートしかありません。これは、カラーがカラースキームに基づいて自動的に計算されないことを意味します。代わりに、背景が暗いか明るいかに応じて、いくつかのプリセットカラーが使用されます。
スクリーンショットのガイドの色を変更するために、以下を使用しました
let g:indent_guides_auto_colors=0
そのため、バッファが交換されても色は再計算されず、次に色を設定します
hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236
提示されている他のソリューションと同様に、スペースがある場合は、行にインデントガイドのみが表示されます。
let g:indent_guides_enable_on_vim_startup=1
起動時にこれを有効にするには、.vimrcに追加します。
これにはindentLineプラグインが最適であることがわかりました。適切な記号のフォントが必要ですが、WindowsではConsolasが、Mac OS XではMenloがうまく機能します。上記の統一された回答で指摘されているように、vimのconceal
機能を(ab)使用して、(使用するフォントから)垂直バーを正しい場所に配置します。私はこのソリューションにかなり満足していますが、欠点は、私の縦棒がボックス描画グリフの一部であり、他のエディターのように左揃えではなく中央揃えになっていることです。慣れてきましたが、フォントに手動でパッチを適用するか、Fantasque Sans Monoのようなフォントを使用することで修正できます(リンクされたgithubリポジトリのスクリーンショットがindentLineを使用する方法に注意してください)。
indentLineプラグインは、サイズの小さいファイルではかなり遅くなる傾向があり、Enterキーを1秒ほど遅れてクリックすると観察できます。
vim-indentguidesはより高速で視覚的に類似したプラグインであり、タブのインデントとスペースのインデントを視覚的に区別することがわかりました。