我找不到一种方法来让Vim将所有空格显示为一个字符。我找到的只是制表符、尾随空格等。
当前回答
如果用空格表示“”字符,我的建议就是搜索/替换。正如其他人所暗示的,set list将非打印字符更改为以列表字符配置的可见字符。
要将空格显式显示为其他字符,应使用类似于以下内容的方法:
:%s//█/克
然后只需撤消更改即可再次返回。
(以获得█ 我按了这个精确的键顺序::%s//CTRL-KFB/g)
其他回答
:set列表将以字符形式显示所有空白。除了一个空间之外,其他所有的东西看起来都会不同于它的正常状态,这意味着如果你仍然看到一个普通的旧空间,那真的是一个普通旧空间。:)
根据当前缓冲区的语法规则,类似以下内容可能有效:
:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv
这需要一个带有+隐藏功能的vim 7.3
2014年10月24日更新在这一点上稍微扩展一下。当然,可以为锥形字符定义一些突出显示。
您可以配置隐藏字符的外观。对于突出显示,您必须至少配置一次“隐藏”突出显示组(请参阅:h hl Conceal上的帮助)。这可以在您的配色方案中完成,然后您不需要再次重新配置它。但这会影响所有隐藏的字符(例如,如果您的语法脚本隐藏了更多项目,它们将显示为空白字符)。可能是这样的::hi Conceal ctermbg=7 ctermbg=无guidg=浅灰色guidg=无如果语法脚本使用skipwhite关键字,Vim似乎不会突出显示空格。没有办法(也许这会被修复,我发布了一个补丁)似乎有一个补丁在浮动,它将允许自定义空间在列表模式下的外观。在撰写本文时,最近的一篇似乎是这篇。(这意味着,您需要构建自己的Vim来使用它)。conceallevel和conceacursor是窗口本地选项。这意味着它们可以在不同的窗口中不同(也可能由文件类型插件或其他插件脚本设置)。每当重新加载语法定义文件时,都需要执行语法高亮显示组。这可以使用BufWinEnteror完成,也可以使用Syntax或甚至FileType自动命令。(我还没有测试哪一个有效)。
最后两项意味着,您必须设置一些自动命令来重置语法规则和相应的条件选项。对于第一个,可能需要使用ColorScheme自动命令设置高亮显示(这样隐藏的字符看起来总是一样的,而与实际设置的颜色方案无关)。要获得一个完整的解决方案,请查看罗马的答案,这将为您提供一个开始。如果你设置了一个功能,你可以很容易地设置一个切换命令来打开或关闭特殊高亮显示。
更新10/26/2014我做了一个插件来解决这个问题。
更新2015年4月22日Vim中包含了一个补丁,可以使用列表选项实现这一点。只需设置集合列表listchars+=space:␣ 从Vim 7.4.711开始工作
我对这个问题的所有其他答案都感到沮丧,因为没有一个答案能以有用的方式突出空间特征。将空格显示为字符对于空格格式的语言特别有用,因为混合制表符和空格是有害的。
我的解决方案是显示制表符并在多个空格下加下划线。它借鉴了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 / \+/
使用此选项,制表符显示为|,空格显示为_,这使得在混合代码样式时很容易分辨。
我发现的唯一缺点是,这段代码没有调整背景颜色以匹配上下文(如注释中)。
我没有从现有的答案中找到我想要的。下面的代码将突出显示所有的尾部空格亮红色
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
上面的所有答案都试图使vim中的空间可见。如果你真的坚持将可见空间作为点,还有另一种方法。。。
如果无法在vim中完成,请完全更改字体。我复制了Ubuntu One Mono字体,并使用FontForge进行了编辑。记住要更改字体的全名、字体族、首选字体族、兼容字体(在FontFoge中,它位于字体信息中的TTF名称下),以便将其作为单独的字体。只需编辑空格字符,使其中间有一个点,然后将字体保存到~/.fonts现在你可以把它用于你的gvim或整个终端。。。我复制了“!”字符,删除了行并将点移到中间。花了5分钟多一点。。。
注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便。。。(但它将分隔空格和制表符…)
推荐文章
- 如何把空格字符放入XML字符串名?
- 没有空格的合并会产生冲突
- 在Vim/Vi中,如何将光标移动到前一个单词的末尾?
- 如何显示默认隐藏字符(零宽度空间,即。& # 8203)
- 如何在vim中自动删除尾随空格
- 为什么Vim使用~扩展名保存文件?
- 如何在Vim或Linux中将空格转换为制表符?
- 我如何使用vimdiff来解决git合并冲突?
- 在Vim中删除当前缓冲区的文件名/路径
- Git在终端提交时打开VIM,但无法返回终端
- 请参阅编辑器中的换行符和回车
- 如何在NERDTree中显示隐藏文件(以句点开始)?
- 如何复制一个选择到OS X剪贴板
- 如何删除(不削减)在Vim?
- Vim:在可视模式下快速选择文本块的方法