将标签显示为字符


119

当我使用python处理文件时,有时会误将制表符误认为空格,反之亦然。有没有办法让Vim显示选项卡的字符而不是选项卡?


只是附带说明,您可以配置为在retab每次保存文件时将所有选项卡转换为空格。
0xc0de

如果您已安装vim-faq,则可以在那里找到离线答案::h vim-faq并搜索/invisible。难记的标签是:h faq-19.8
Hotschke

Answers:


119

是的,使用listchars:

set list
set listchars=tab:>-

如果将这两行放在.vimrc中,则选项卡将显示为>开始位置以及-整个选项卡的其余部分。

(旁注:listchars也可以显示尾随空格trail:x(用x要用于尾随空格的字符替换),这也很有用。)


6
注意:我喜欢使用set listchars=tab:!·,trail:·IMHO,·它比a清晰得多-。您需要一个相当新的Vim版本才能正常工作(不确定哪个是我认为的7.3.x)...
Martin Tournoij

8
我喜欢使用unicode字符,因为它比略小>。目前,我通过标记eol看到尾随空白(尽管我可以尝试上面的方法)。我的设置是:set listchars=eol:¬,tab:▸\
马丁·约克

58

基本答案是:set list,这会使选项卡显示为^I

但是,我建议不要超出此范围。只是:set list存在问题,因为它无法保持屏幕上的视觉对齐。例如:

%.o: %.cpp
^Ig++ -c $<

不好看,尤其是当你想到gg++,以第一下出现pcpp(假设tabstop=8)。

因此,我建议您在您的计算机中输入.vimrc类似的内容:set listchars=tab:␉· (要清楚,这是Unicode字符U + 2409用于水平制表符的符号,后跟U + 00B7 MIDDLE DOT。)

如中所述:help listchars,两个字符的设置tab:xy会导致保留视觉对齐:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

上面的示例在屏幕上显示为:

%.o: %.cpp
␉·······g++ -c $<

就个人而言,我全力以赴listchars

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

这些字符非常独特,以致它们很少出现在文档文本中。

要将这些特殊字符输入到您的中vimrc,请Ctrl-vu23CE在插入模式下输入,如中所述:help utf-8-typing


2
另请参阅set lcs=tab:├─
sch

这才给我一个?在eol
WendyG

14

突出显示标签

临时Tab突出显示

偶尔使用,只需使用以下搜索/命令即可突出显示文档中的所有标签:

/\t

要删除突出显示的内容,只需键入:noh代表“ :nohlsearch没有高亮度照明”的缩写。

永久Tab突出显示

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

标签在Vim中突出显示

更突出

有关这些有用的突出显示命令的更多信息(包括与尾随空白结合并使其永久存在),请参见Vim Wiki


4
您还可以:match Error /\t/独立于搜索寄存器和hlsearch(键入:match以清除它)来突出显示选项卡(或与此有关的任何其他模式)。
马丁·图尔诺伊

1
@Carpetsmoker在Vim Wiki上可以找到更多有关这些有用的突出显示命令(包括与结尾的空格结合使用!),有关突出显示不需要的空间
Serge Stroobandt

9

我个人喜欢使用插件indentLine,它在缩进级别显示一条垂直线。

这在缩进很重要的python中特别有用。

(图片来自上面的链接)

除其他功能外,它提供了切换命令,可以将其映射到组合键,以便在不需要时可以将其关闭。


2
我相信这个插件是为了缩进空格而设计的吗?
杰克·拜曼

5

您可能希望在常规终端和gvim中以不同的方式显示选项卡。

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(增加完整性,以防其他人发现它有用)。


4

最简单的方法是:set list将制表符显示为^I并将行尾显示为$

我喜欢使用一个调用

:set invlist 

在常规显示和列表显示之间切换。

例如:

:nmap <leader>l :set invlist<cr>

这使我可以快速检查是否存在制表符和空格问题,然后返回常规显示。

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.