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


当前回答

如果设置:

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

其他回答

你可以使用

:set list

真正看到一条线的结构。您将显式地看到制表符和换行符。当你看到空白时,它真的是空白。

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

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

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

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

我认为这里的其他答案更全面,但我想我会分享一个技巧,我通常使用它来区分制表符和空格:

:syntax on
:set syntax=whitespace

这些是空白编程语言的语法高亮显示规则-制表符以绿色显示,空格以红色显示。:)

可以与许多其他答案中提到的:set list组合使用,尽管选项卡将显示为^I,没有绿色的高亮,但空格将显示为红色。

把这个添加到我的.vimrc中对我很有用。只要确保你没有其他冲突。。

autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black

将这些黑客作为注释保存在.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