Answers:
统一答案:
我会尝试使用listchars:
:set listchars=tab:\|\
:set list
注意:\
以上最后一个空格之后。
这种方法很好,因为它使用了Vim的内置支持来显示这种东西。
输出示例:
| if (1) {
| | func();
| }
但是,这不适用于前置空间。正如@Josh Petrie指出的那样,有一个补丁可以用于space,但随后您必须重新编译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使用该版本的Conceal功能。它不是实际隐藏文本,而是用视图中的条代替文本,而不是实际缓冲区。结果是您看到条形图,但它们没有保存到文件中(因为它们实际上是空格)
这两种方法均采用“适当”的缩进代码。当打开“块”时,它们不会将缩进线放置在缩进级别(升华似乎起作用),而是根据您的缩进设置以规则的间隔放置行。另外,它只在实际有空间的线上显示条形图(这就是为什么在vim输出中的第一行下面的线if
没有条形图,造成视觉间隙)
为了完整起见,还有缩进指南插件,该插件通过交替空白的颜色来显示缩进级别。它需要版本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很好用。正如上面的统一答案中指出的那样,它的工作原理是(ab)使用vim的conceal
功能将竖线(来自所使用的字体)放置在正确的位置。我对这种解决方案感到非常满意,但缺点是我的竖线是盒形图形字形的一部分,并且它们像其他编辑器一样居中对齐而不是向左对齐。我已经习惯了,但是可以通过手动修补字体或使用Fantasque Sans Mono之类的字体来修复它(请注意链接的github repo中的屏幕截图如何使用indentLine)。
对于非小文件,indentLine插件的运行速度通常会很慢,单击Enter时可以观察到,因为它滞后了大约一秒钟。
我发现vim-indentguides是一个速度更快,外观上相似的插件,也可以在视觉上区分制表符缩进和空格缩进。