如何让vim显示空格?

36

我正在尝试从gedit转换到vim,希望让vim看起来与gedit类似(如下图所示),特别是想用点来显示空格。

gedit

目前我的vim界面如下:

enter image description here

虽然有些不同,但看起来相当相似(这是我的.vimrc文件)。但我没有看到那些表示空格的点。

如何让vim显示空格?

我找到了一些答案(例如这个),它们似乎建议将空格替换为特殊的可见字符,然后再替换回来。 我不想每次都这么做。 我希望能够打开vim并看到那些空格。


Vim维基百科上关于突出显示不需要的空格的文章可能会帮助你入门... - Mark Rushakoff
我认为它不能被突出显示为字符,但是你可以很容易地突出显示背景。 - Explosion Pills
可能是重复的问题:如何让 Vim 将所有空格显示为字符? - Hauleth
1
看到那些空格是为了什么目的? - romainl
主要是因为我习惯看到它们。 - Martin Thoma
输入“:set list”或“:unset list”以显示/隐藏非空白空格,在vim下保持Python的清晰。但你真正想要的是切换到PyCharm。老实说,这是编写Python的唯一方式。谁说的?我说的。这是我的观点。抱歉,但这是一个强烈的观点,来自一个长期使用Linux的粉丝,他在vim中编写了很多Python代码,并几乎做所有其他事情。 - Markus-Hermann
8个回答

63
展示非空格空白字符的方式。
set list

此外,使用 . 来显示空格。

set lcs+=space:·

使用以下代码关闭它

set nolist

4
在Ubuntu上为Vi工作。谢谢!@martin以上的内容应该更新为答案。 - Rair
2
这个解决方案连同“set list”对我来说完美地运作了。 - JohnC
1
有没有一种方法可以切换它? - ivan0biwan
@ivan0biwan请尝试输入set nolist - savx2
@ivan0biwam try set list! - dunajski
显示剩余2条评论

37

有时候我需要明确地看到哪些空格是制表符,哪些是普通的空格字符,并且需要知道行末是否存在空格。

当我使用vim时,我使用以下命令:

:set list

我可以使用:set nolist关闭此功能。

使用:set list命令,空格会显示为空格,制表符会显示为^I,行尾符号会呈现出明亮的粉色$。(因此,您在粉色$左侧看到的任何空格都是真正的空格字符,它右侧的空白只是编辑器右侧和行尾之间的"nothing"。)虽然有点丑陋,但它很有效。

我不建议一直使用这个功能,只在必须查看实际空格和制表符存在的情况下使用。


13

虽然你不能在这里做到完全符合你的要求,但如果你和我一样的思考方式,你想看到那些空格是因为它有助于验证正确的缩进(我有2个空格还是3个空格?)。对于Vim >= 7.3,你可以使用indentLine插件,在每个缩进处添加一个标记。它很棒。

如果您使用Pathogen,则可以安装如下:

cd ~/.vim/bundle
git clone https://github.com/Yggdroot/indentLine

在此输入图片描述


6

也许值得使用undercurl来完成这项工作。

hi WhiteSpaces gui=undercurl guifg=LightGray
match WhiteSpaces / \+/

或者您可以将此代码放入您的.vimrc文件中。

autocmd ColorScheme * highlight WhiteSpaces gui=undercurl guifg=LightGray | match WhiteSpaces / \+/ 

enter image description here


我已经在我的.vimrc文件中添加了这两行代码,但是我没有看到空格被下划线标记。你知道为什么吗? - Martin Thoma
在更改:colorscheme时,自定义高亮设置将被清除。请尝试以下操作:autocmd ColorScheme * highlight WhiteSpaces gui=undercurl guifg=LightGray | match WhiteSpaces / \+/ - ernix
它仍然无法工作。我可能需要安装插件吗?我该如何安装? - Martin Thoma
不需要任何外部插件。请注意,undercurl 可能仅在 GUI 中可用。 - ernix

4
使用indentLine插件可以显示前导空格(缩进空格),这个插件在上面提到过。 如果你使用Vundle作为插件管理器,可以将Plugin 'Yggdroot/indentLine'添加到你的.vimrc中,然后运行vim +PluginInstall +qall来安装插件。 将以下两行代码添加到你的.vimrc中以将前导空格显示为·
let g:indentLine_leadingSpaceChar='·'
let g:indentLine_leadingSpaceEnabled='1'

3
Vim一直提供“listchars”选项以显示Tab vs. Space,并在关键位置即行尾显示空格字符。在早期版本中(问题编写时),它没有提供修改所有空格的选项:一个空白正方形就是一个空格符号。其他答案提供了一些解决方法。在当前的Vim版本中,有许多与空格相关的选项;请参阅:help 'listchars'获取详细信息。您可以通过将该命令放入~/.vimrc中来实现屏幕截图中看到的效果。
:set list listchars+=space:. listchars-=eol:$

你的回答似乎与ernix的回答相矛盾。你的回答有误吗?如果是这样,你可能想要删除它。 - Martin Thoma
ernix的答案只是链接解决方法的另一种变体。你若是在努力让它工作,那就说明它已经有了局限性。 - Ingo Karkat
哦,好的。我以为我难以让它工作的原因可能是我刚开始学习vim。 - Martin Thoma

2

使用J-L和Cedric Simon的答案。编辑~/.vimrc并添加:

set lcs+=space:·
nmap <F2> :set invlist<CR>
imap <F2> <ESC>:set invlist<CR>a

当你使用vim时,只需按下F2键。


0

您不需要安装任何插件来完成此操作:

set listchars=tab:\|\ 
"set listchars=tab:\┊\ 
"set listchars=tab:\┆\ 
"set listchars=tab:\¦\ 
set list

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接