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


当前回答

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

:%s/ /█/g

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

其他回答

下面的代码基于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语法组中的某些内容会阻止显示中间点。我还不知道如何使该解决方案更可靠。

:将列表设置为启用。

:将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中定义函数。

我用这个

/\s
:set hlsearch

以突出显示空白。它搜索所有空白,然后启用高亮显示,使其突出显示。但是,它不打印特殊字符。

要覆盖Unicode空白字符:

set list
set listchars=tab:│\ ,nbsp:·
highlight StrangeWhitespace guibg=Red ctermbg=Red
" The list is from https://stackoverflow.com/a/37903645 (with `\t`, `\n`, ` `, `\xa0` removed):
call matchadd('StrangeWhitespace', '[\x0b\x0c\r\x1c\x1d\x1e\x1f\x85\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]')

结果:

只有序数空间(U+0020)看起来像序数空间(“”)。选项卡(U+0009)看起来像“│“(两个字符:一个长管道,然后是一个序数空间;它们在配色方案murphy中是灰色的)。不间断空格(U+00A0)看起来像“·”(一个字符;在颜色方案murphy中为灰色)。任何其他空白字符看起来都像红色空格(“”)。