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


当前回答

下面的代码基于Christian Brabandt的答案,似乎可以按照OP的要求执行:

function! Whitespace()
    if !exists('b:ws')
        highlight Conceal ctermbg=NONE ctermfg=240 cterm=NONE guibg=NONE guifg=#585858 gui=NONE
        highlight link Whitespace Conceal
        let b:ws = 1
    endif

    syntax clear Whitespace
    syntax match Whitespace / / containedin=ALL conceal cchar=·
    setlocal conceallevel=2 concealcursor=c
endfunction

augroup Whitespace
    autocmd!
    autocmd BufEnter,WinEnter * call Whitespace()
augroup END

将这些行添加到~/.vimrc并开始新的Vim会话,以查看仍然不完美的魔术发生。

随意编辑默认颜色和隐藏字符。


注意:几种语言中*FuncBody语法组中的某些内容会阻止显示中间点。我还不知道如何使该解决方案更可靠。

其他回答

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

我的解决方案是显示制表符并在多个空格下加下划线。它借鉴了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 /  \+/

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

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

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

/<空间>

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

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

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

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

从补丁7.4.710开始,您现在可以使用listchars设置一个字符来代替空格!

:set listchars+=space:␣

因此,要将所有空白字符显示为字符,可以执行以下操作:

:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list

完成后,要隐藏不可见的字符,请执行以下操作:

:set nolist

关于邮件列表的讨论:https://groups.google.com/forum/?fromgroups#!主题/vim_dev/pjmW6wOZW_Q

也可以高亮显示空间(用块替换空间):

:%s/ /█/g

(在写入之前,请将其撤消)

将这些黑客作为注释保存在.vimrc中,因此在shell中,只需:

echo '
  " how-to see the non-visible while spaces
  " :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
  " set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
  " :set list
  " but hei how-to unset the visible tabs ?!
  " :set nolist
  ' >> ~/.vimrc