我找不到一种方法来让Vim将所有空格显示为一个字符。我找到的只是制表符、尾随空格等。


当前回答

我对这个问题的所有其他答案都感到沮丧,因为没有一个答案能以有用的方式突出空间特征。将空格显示为字符对于空格格式的语言特别有用,因为混合制表符和空格是有害的。

我的解决方案是显示制表符并在多个空格下加下划线。它借鉴了mrucci的答案和本教程。因为它使用语法高亮显示,所以它是持久的:

set list listchars=tab:\|\ 
highlight Whitespace cterm=underline gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
autocmd ColorScheme * highlight Whitespace gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
match Whitespace /  \+/

使用此选项,制表符显示为|,空格显示为_,这使得在混合代码样式时很容易分辨。

我发现的唯一缺点是,这段代码没有调整背景颜色以匹配上下文(如注释中)。

其他回答

正如其他人所说,您可以使用

:set list

这将与

:set listchars=...

显示不可见字符。现在,没有一个显式选项可以用来显示空白,但在listchars中,您可以设置一个字符来显示除空白以外的所有内容。例如,我的看起来像这样

:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

所以,现在,在你使用

:set list

所有没有明确显示为其他内容的内容实际上都是一个普通的空白。

像往常一样,要了解listchars的工作原理,请使用帮助。它提供了关于可以显示哪些字符(例如尾随空格)以及如何显示的详细信息:

:help listchars

给它添加一个切换可能会很有帮助,这样您可以在编辑过程中轻松看到更改(来源:VIM:set list!作为.virc中的切换):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>

我喜欢使用特殊字符来显示空白,这样更清晰。即使是切换地图也是快速检查的关键功能。

您可以在一个自2004年以来未更新的旧vim脚本中找到这些功能:

vim脚本/cream-showinvisibles@vim.org

多亏了项目vim脚本和vundle,你可以重新使用这个插件

vim脚本/cream-showinvisibles@github

更好的是,我的两分钱是添加一个可配置的快捷方式(而不是预定义的F4)

所以把这个添加到~/.vimrc中

Plugin 'albfan/cream-invisibles'

let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error

在vim上安装插件

:PluginInstall

就这样

:set列表将以字符形式显示所有空白。除了一个空间之外,其他所有的东西看起来都会不同于它的正常状态,这意味着如果你仍然看到一个普通的旧空间,那真的是一个普通旧空间。:)

如果用空格表示“”字符,我的建议就是搜索/替换。正如其他人所暗示的,set list将非打印字符更改为以列表字符配置的可见字符。

要将空格显式显示为其他字符,应使用类似于以下内容的方法:

:%s//█/克

然后只需撤消更改即可再次返回。

(以获得█ 我按了这个精确的键顺序::%s//CTRL-KFB/g)

要突出显示空间,只需搜索:

/<空间>

笔记:<space>表示只需键入空格字符。使用:set hlsearch启用搜索结果的突出显示

突出显示空格和制表符:/[<space><tab>]

删除高光的快速方法是搜索其他任何内容:/美国国防部

(只需键入任意随机字符的短列表)