インデントガイド/行を追加する方法


42

Sublime Text 2では、次のように、インデントがある場所に垂直ガイドが表示されます。

Sublime Textスクリーンショット

しかし、vimでは明らかにそうではありません:

vimスクリーンショット

そのような行をvimで表示する方法はありますか?ところで、私のインデントは2スペースです。

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab

回答:


39

統一された答え:

タブを使用している場合

私は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バーがないため、視覚的なギャップが生じます)


実際、タブの代わりにインデントするためにスペースを使用しています。質問を更新しました。
aharris88

ああ。それでは、さらに調査が必要になります。
ジョン・オム。

1
メーリングリストで掘り下げることができる、非末尾スペースに対してリストチャーを機能させるパッチがあります。ただし、公式配布には受け入れられていません:(

1
回答を更新して、Vaibhav SagarとJosh Petrieからの情報を含めました。Vaibhavが言及したプラグインを試し、結果を編集済みの回答に表示しました。私は自分でこのプラグインを使い始めると思います。それは素晴らしいことではありませんが、一般的にはかなりうまくいくようです。
ジョン・オム。

ガイドを崇高なように空白行に表示することは可能ですか?
ジェームズ

19

私が使用する別のオプションは、まさにあなたが求めていたものではありませんが、同じ列にあるものを見やすくするという同じ目的を達成しますvimrc

set cursorcolumn
set cursorline

カーソル列の図

これには、見たい列にカーソルを移動する必要があるというトレードオフがありますが、視覚的な混乱は少なくなります。通常、インデントレベルを気にするときは、とにかくカーソルで自分の場所を維持します。また、私の方法は、中括弧を閉じずにpythonのような言語で見た目が悪くないです。


Python viユーザーはこの機能のために死ぬでしょう
-shuva

18

完全を期すために、Indent Guidesプラグインもあります。これは、空白の色を交互に変えてインデントレベルを表示します。バージョン7.2以降が必要です。変数tabstopshiftwidth変数を使用するため、おそらくインデント設定ですぐに動作します。

イグル

プラグインをインストールしたら、単に: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に追加します。
-inye

9

これにはindentLineプラグインが最適であることがわかりました。適切な記号のフォントが必要ですが、WindowsではConsolasが、Mac OS XではMenloがうまく機能します。上記の統一された回答で指摘されているように、vimのconceal機能を(ab)使用して、(使用するフォントから)垂直バーを正しい場所に配置します。私はこのソリューションにかなり満足していますが、欠点は、私の縦棒がボックス描画グリフの一部であり、他のエディターのように左揃えではなく中央揃えになっていることです。慣れてきましたが、フォントに手動でパッチを適用するか、Fantasque Sans Monoのようなフォントを使用することで修正できます(リンクされたgithubリポジトリのスクリーンショットがindentLineを使用する方法に注意してください)。


4
プラグインリンクのみの回答の説明をご覧になり、回答を詳細に更新することを検討してください。

私の間違い、私は答えを更新しました。
バイバブサーガル

パッチを当てた縦線はどのグリフですか?ここに貼り付けられますか?ありがとう。
ティムトロ

2

indentLineプラグインは、サイズの小さいファイルではかなり遅くなる傾向があり、Enterキーを1秒ほど遅れてクリックすると観察できます。

vim-indentguidesはより高速で視覚的に類似したプラグインであり、タブのインデントとスペースのインデントを視覚的に区別することがわかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.