vim - Vim显示所有空白字符作为字符

  显示原文与译文双语对照的内容

我找不到使Vim显示所有空白字符的方法。 我发现的只是制表符,尾随空格等。

时间:

就像其他人所说的,你可以使用

 
:set list

 

这将与其他

 
:set listchars=...

 

显示不可见字符。
于一切但现在whitespace,相关,目前并不能明确的选项,它可以用来对 show. 显示空白,但在 listchars,你可以设置一个字符 例如我的看起来像这样


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

那么,在你使用

 
:set list

 

所有没有明确显示为别的东西的东西,实际上就是一个普通的旧空白。

通常,要理解 listchars的工作原理,使用帮助。 它提供了关于哪些字符可以显示( 比如尾随空格,例如) 以及如何执行的信息:

 
:help listchars

 

要启用的:set list

要禁用的:set nolist

如果你设置:


:highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none

然后对空格进行搜索,每个空格字符将显示为下划线字符。

你可以在一个方便的函数中使用这个命令来切换空间的"强调"。


set hls
let g:HLSpace = 1
let g:HLColorScheme = g:colors_name
function ToggleSpaceUnderscoring()
 if g:HLSpace
 highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none
 let @/=""
 else
 highlight clear
 silent colorscheme"".g:HLColorScheme
 let @/=""
 endif
 let g:HLSpace =!g:HLSpace
endfunction

将函数映射到一个快捷键,使用:


nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>

之后再通过 vimrc colorscheme已经 set, 铌: 定义在函数关系

我觉得其他答案这里有更全面的,但我想我还是分享一个技巧我通常让你区分制表符和空格在视觉上:


:syntax on
:set syntax=whitespace

这些都是以红色显示以绿色及空间有没有空白编程语言 - 语法高亮显示规则选项卡。 : )

在与 :set list red,可以合并为介绍然后被很多其他答案,尽管标签就显示为无一个绿色 higlight ^I,但是这些虚拟空间将 show.

:set list 将显示所有空格作为字符。 一切都比常态之前但一个空格会看上去与以前不一样,这意味着,如果你仍然看到一个普通的旧空间,它是一个真正的普通旧式空间。 : )

根据当前缓冲区的语法规则,类似这样的内容可以:


:syn match WhiteSpace//containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv

+conceal feature,这个需要一个 vim 7.3

在 that, 更新 10/24/2014 以展开有点.对 当然可以为conealed字符定义一些突出显示。

  • 你可以配置,隐藏字符看起来怎样。 为了突出显示,你至少需要配置'隐藏'突出显示组( 请参见 :h hl-Conceal的帮助,这可以在你的跳转中完成,然后不需要重新配置) 。 但是这影响了所有隐藏字符( 例如。 如果你的语法脚本隐藏了一些项目,它们将显示为你的空白字符。 看起来像这样:

    :hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE

  • 如果语法脚本使用 skipwhite 关键字,Vim似乎不会突出显示空格。 将无法绕过( 也许这将是固定的,我发布了一个补丁 )

  • 似乎有一个浮动的补丁,允许自定义 list 模式下的空间。 在写作时最新的一个似乎是 ( 这意味着你需要构建自己的Vim来使用它) 。
  • conceallevelconcealcursor 是窗口本地选项。 这意味着它们在不同的Windows ( 也可能由文件类型插件或者其他插件脚本设置) 中可以不同。
  • 在重新加载语法定义文件时,需要执行语法突出显示组。 这可以通过使用 BufWinEnter 或者 Syntax 或者 FileType 自动命令来完成。 ( 我还没有测试哪个实际工作) 。

最后两个项目意味着,你必须设置一些自动命令来重置语法规则和correesponding选项。 首先,你可能想要使用 ColorScheme 自动命令( 所以隐藏的字符总是看起来相同,独立于配色方案的设置) 设置突出显示。 要获得完整的解决方案,请查看romainl答案,这将给你一个开始。 如果你设置了一个函数,你可以轻松地设置切换命令到 switch 上,显示或者关闭特殊突出显示。

更新 10/26/2014 我制作了一个插件从这个问题中删除。

更新 04/22/2015 。Vim中包含一个修补程序,可以使用 list 选项使它的成为可能。 只需设置 set list listchars+=space:␣ 就可以使用 Vim 7.4.711

如果空格是''字符,我的建议就是搜索/替换。 就像其他人所暗示的,set list 改变了不打印字符到 listchars 中配置的可见字符。

要将空格显式显示为其他字符,类似于下面的内容应该执行以下操作:

:%s//█/g

然后撤消更改,再次返回。

( 为了得到 █,我按了这个键序列: :%s//CTRL-KFB/g )

我用这个

 
/s
:set hlsearch

 

以突出显示空白。它搜索所有空白,然后启用突出显示使它的突出显示。 但是,它不等于打印一个特殊字符。

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

/<空间>

注释:

  • <空间> 意味着只键入空格字符。
  • 启用搜索结果的突出显示:设置 hlsearch

要突出显示空格&选项卡:

/[ <space> <tab> ]

删除高光的快速方法是搜索其他内容: /asdf

( 只需键入任意简短字符列表)

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

我的解决方案是显示制表符并突出显示多个空格。 它借用了从回答的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/+/

使用这里选项,选项卡显示为 | 和空格,这使得在混合代码样式时很容易辨别。

我发现的唯一缺点是这个Fragment不调整背景颜色以匹配上下文( 在评论中) 。

...