如何添加缩进参考线/线


42

在Sublime Text 2中,您可以获得压痕所在的垂直参考线,如下所示:

Sublime Text屏幕截图

但是在vim中,我显然不会:

vim屏幕截图

有没有办法在vim中显示这样的行?顺便说一下,我的缩进是2个空格。

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

Answers:


39

统一答案:

如果您使用标签

我会尝试使用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没有条形图,造成视觉间隙)


实际上,我使用空格而不是制表符来缩进。我已经更新了我的问题。
aharris88

哦。那么,那将需要更多的研究。
John O'M。

1
有一个补丁程序可以使listchars用于非跟踪空间,您可以在邮件列表中进行挖掘。但是,它尚未被接受到官方发行版中:(

1
更新了答案,以包含来自Vaibhav Sagar和Josh Petrie的信息。我试用了提到的插件Vaibhav,并在编辑后的答案中显示了结果。我想我将自己开始使用此插件。这并不理想,但总体来说似乎效果很好。
John O'M。

是否可以像在升华中一样使参考线出现在空白行上?
詹姆斯

19

我使用的另一个选项(并非完全符合您的要求),但是实现了使您更轻松地查看同一列中内容的相同目的,是在您的代码中设置以下内容vimrc

set cursorcolumn
set cursorline

光标列图

这是必须权衡的,您必须将光标移动到要查看的列上,但是视觉混乱会减少。通常,当我关心缩进级别时,无论如何我都会保持光标位置。我的方法在不使用大括号的情况下在python之类的语言中也不是笨拙的。


Python vi用户将为此功能而死
shuva '18

18

为了完整起见,还有缩进指南插件,该插件通过交替空白的颜色来显示缩进级别。它需要版本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很好用。正如上面的统一答案中指出的那样,它的工作原理是(ab)使用vim的conceal功能将竖线(来自所使用的字体)放置在正确的位置。我对这种解决方案感到非常满意,但缺点是我的竖线是盒形图形字形的一部分,并且它们像其他编辑器一样居中对齐而不是向左对齐。我已经习惯了,但是可以通过手动修补字体或使用Fantasque Sans Mono之类的字体来修复它(请注意链接的github repo中的屏幕截图如何使用indentLine)。


4
请查看我们对仅插件链接的答案的讨论,并考虑使用更多信息来更新您的答案。

我的错误,我已经更新了答案。
Vaibhav Sagar 2015年

垂直跳线是哪一个字形?可以贴在这里吗?谢谢。
Timtro

2

对于非小文件,indentLine插件的运行速度通常会很慢,单击Enter时可以观察到,因为它滞后了大约一秒钟。

我发现vim-indentguides是一个速度更快,外观上相似的插件,也可以在视觉上区分制表符缩进和空格缩进。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.