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

评论

就像一个旁注,您可以配置为每次保存文件时都使用retab将所有制表符转换为空格。

如果您已安装vim-faq,则可以在此处获得脱机答案::h vim-faq并搜索/ invisible。难记的标签是:h faq-19.8。

#1 楼

是的,请使用listchars:

set list
set listchars=tab:>-


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

评论


注意:我喜欢使用set listchars = tab:!·,trail:·,恕我直言·比-更清晰-...您需要一个相当新的Vim版本才能正常工作(我不确定确切是哪个版本) 7.3.x)...

–马丁·图尔诺伊(Martin Tournoij)
2015年2月5日在15:07



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

–马丁·约克
2015年2月6日在21:43



这对我来说效果最好,因为它很干净,所以可以设置listchars = eol:·,tab:⍿·,trail:×·。

– 71GA
19/12/30在4:20

这是我当前正在使用的:set listchars = tab:┌┬┐,trail:·。 (非ASCII字符为:250c:框形图上下左右,252c:框形图上下左右,2510:框形图上下,b7:中间点。)

–基思·汤普森(Keith Thompson)
20年6月25日,0:24

我注意到在vim 8.2中,显然并不是所有的Unicode字符都是合法的,我在弄乱使用Trail:﹍之类的奇怪字符,然后它就爆了。不确定这些东西的限制是什么...

–user9645
20/12/23在15:01

#2 楼

基本答案是:set list,它会使选项卡显示为^I:set list只是一个问题,因为它无法保持屏幕上的视觉对齐。例如:

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

不好看,特别是当您希望gg++出现在p的第一个cpp(假设tabstop=8)下时。 >
因此,我建议在您的.vimrc中插入类似:set listchars=tab:␉·的内容(要清楚,这是Unicode字符U + 2409水平标记符号,后跟U + 00B7中点。)

: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:⎵



对于eol,我使用U + 23CE返回符号

对于trail,我使用U + 2420 SYMBOL FOR SPACE

对于nbsp,我使用U + 23B5底部方形支架


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

要在vimrc中键入这些特殊字符,请在插入模式下按Ctrl-vu 23CE,如:help utf-8-typing中所述。

评论


另请参阅set lcs = tab:├─

–sch
2015年2月5日在15:33

这才给我一个?在eol

– WendyG
19-10-7在12:45

#3 楼

突出显示标签页
临时标签突出显示页
对于偶尔使用,可以使用以下搜索/命令简单地突出显示文档中的所有标签页:
/\t

要删除突出显示标签,只需键入:noh这是:nohlsearch(没有高亮度照明)的缩写。并将其永久化-请参见Vim Wiki。

评论


您还可以使用:match Error / \ t /独立于搜索寄存器和hlsearch(键入:match清除它)来突出显示选项卡(或与此相关的任何其他模式)。

–马丁·图尔诺伊(Martin Tournoij)
16年8月25日在22:56



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

– Serge Stroobandt
16年8月26日在19:05



#4 楼

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

尤其在缩进很重要的python中,它有很大的帮助。



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

评论


我相信这个插件是为了缩进空格而设计的吗?

–杰克·拜曼
17年12月11日在18:02



确实:>此插件用于在每个缩进级别显示带有空格缩进的代码的垂直细线。对于带有制表符缩进的代码,我认为不需要支持它,因为您可以使用:set list lcs = tab:\ | \(这里是一个空格)。

–thiagowfx
20年7月6日在3:22

缩进指南也支持选项卡:github.com/nathanaelkane/vim-indent-guides

– aderchox
20年7月28日在5:13

#5 楼

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

我喜欢使用调用

:set invlist 

<的映射br />在常规显示和列表显示之间切换。

例如:

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


这使我可以快速检查是否有选项卡vs空间问题,然后返回常规显示。

#6 楼

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

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


(为完整性起见,以防他人发现它有用)。

#7 楼

我将@ john-om方法与此字符结合在一起
Unicode字符“零宽度空间”(U + 200B)
和indentLine插件。
因此,如果我使用空格,则插件会显示格式优美的缩进,如果我使用标签,则管道是唯一可见的标记,这就是我想要的。我还可以切换制表符的标记。

" indicate tabs
:nmap <leader>l :set invlist<cr>
set list listchars=tab:❘⠀,trail:·,extends:»,precedes:«,nbsp:×


#8 楼

使用listchars可以很容易地做到这一点,方法是将选项卡指定为:,tab:\ \ ┊,
通过在tab声明的前面提供两个转义空格,vim将重复这些空格。这与默认情况相反,在默认情况下,vim更喜欢第二个字符作为重复字符。
与使用类似IndentLine这样的插件而不会产生额外开销的效果类似。这是使用以下完整的listchars配置的外观示例:
set listchars=eol:↓,tab:\ \ ┊,trail:●,extends:…,precedes:…,space:·



评论


欢迎来到Vi和Vim!请注意,前2个答案(以及其他一些答案)已经提到了此解决方案。

– D. Ben Knoble♦
20年7月14日在12:52

@ D.BenKnoble谢谢您的友好欢迎和反馈!但是,我不同意。这是@mike响应的替代方法。虽然其他响应都引用了listchars,但是它们都没有解释如何重复重复左字符以实现与IndentLine这样的插件相同的结果。

–旋转
20 Jul 17'6:47

@ D.BenKnoble我已改写我的答案,以期澄清我的答案与所提到的其他答案有何不同。

–旋转
20年7月17日在6:54