使Vim将所有空格显示为字符

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


#1楼

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

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

使用此选项卡显示为|_作为空格,这使我很容易分辨出何时混合代码样式。

我发现的唯一缺点是,此代码段无法调整背景颜色以匹配上下文(例如在评论中)。


#2楼

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

/ <空格>

笔记:

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

突出显示空格和制表符:

/ [<空格> <tab>]

删除突出显示的一种快速方法是搜索其他内容:/ asdf

(只需输入任何简短的随机字符列表)


#3楼

:set list将所有空格显示为字符。 一切,但空间看起来会比正常状态,这意味着如果你仍然可以看到一个普通的老式空间,这真是一个普通的旧空间的不同。 :)


#4楼

你可以用

:set list

真正看到一条线的结构。 您将明确看到选项卡和换行符。 当您看到空白时,实际上是空白。


#5楼

正如其他人所说,您可以使用

:set list

结合

:set listchars=...

显示不可见的字符。
现在,没有可用于显示空白的显式选项,但是在列表字符中,您可以设置一个字符以显示所有但空白。 例如,我的看起来像这样

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

所以,现在,在您使用之后

:set list

那么,所有没有明确显示为其他内容的东西,实际上都是纯空白。

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

:help listchars

向其中添加切换可能会有所帮助,以便您可以轻松地在编辑过程中查看更改(来源: VIM:set list!作为.vimrc中的切换 ):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>

#6楼

如果您设置:

: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>

注意:设置了colorcheme后,请在vimrc中定义功能。


#7楼

:set list启用。

:set nolist禁用。


#8楼

如果用空格表示“”字符,我的建议就是搜索/替换。 正如其他人所暗示的那样, set list会将非打印字符更改为在listchars配置的可见字符。

为了将空格显示为其他字符,可以使用类似于以下内容的方法:

:%s/ /█/g

然后只需撤消更改以再次返回即可。

(为获得█,我按了此确切的按键顺序:: s / / CTRL-K F B / g


#9楼

:se list
:se nolist

:se就足够了,不需要:set


#10楼

您还可以突出显示空格(用块代替空格):

:%s/ /█/g

(在编写撤消之前)


#11楼

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

:syntax on
:set syntax=whitespace

这些是Whitespace编程语言的语法突出显示规则-选项卡以绿色显示,空格以红色显示。 :)

可以与:set list结合使用,如许多其他答案所述,尽管选项卡随后将显示为^ I,而没有绿色背景,但空格将显示为红色。


#12楼

以上所有答案都试图使vim内部的空间可见。 如果您真的坚持将可见的空间作为点,那么还有另一种方法...

如果不能在vim中完成,请完全更改字体。 我复制了Ubuntu One Mono字体并使用FontForge对其进行了编辑。 记住要更改字体的全名,家族,首选家族,兼容的完整字体(在FontFoge中,它在字体信息中的TTF名称下),以便将其作为单独的字体。 只需编辑空格字符在中间有一个点,然后将字体保存到〜/ .fonts,现在您就可以将其用于gvim或整个终端了……我复制了“!” 字符,删除线并将点移到中间。 花了超过5分钟的时间...

注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便...(但是它将空格与制表符分开...)


#13楼

我喜欢用特殊字符来显示空格,更清晰。 快速切换甚至是要切换的地图也是关键功能。

您可以在自2004年以来未更新的旧vim脚本中找到以下功能:

vim-scripts/cream-showinvisibles@vim.org

多亏了项目vim脚本vundle,您可以重新使用此插件

vim-scripts / cream-showinvisibles @ github

更好的是,我为此付出的两分钱是添加一个可配置的快捷方式 (而不是预定义的F4

所以将它添加到〜/ .vimrc

Plugin 'albfan/cream-invisibles'

let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error

在vim上安装插件

:PluginInstall

然后你去


#14楼

下面的代码基于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语法组中的几种语言阻止了中间点的显示。 我不知道(尚未?)如何使该解决方案更可靠。


#15楼

将其添加到我的.vimrc中对我来说有效。 只要确保您没有其他冲突即可。

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

#16楼

突出显示搜索

:set hlsearch 

.vimrc

并搜索空格和回车

/ \|\t\|\r

或搜索所有空白字符

/\s

搜索所有非空白字符(不显示空白字符,因此您会看到单词之间的空白字符,但看不到尾随的空白字符)

/\S

在行尾显示所有尾随空格字符

/\s$

#17楼

7.4.710补丁开始,您现在可以使用listchars设置要显示在空间位置的字符!

:set listchars+=space:␣

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

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

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


#18楼

从现有答案中找不到我想要的东西。 下面的代码将以红色突出显示所有尾随空格。 只需将以下内容添加到您的.vimrc

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()

#19楼

要覆盖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)看起来像“ ”(两个字符:一个长管道,然后一个序数空格;在颜色colorscheme murphy为灰色)
  • 正常的不间断空格(U + 00A0)看起来像“ · ”(一个字符;在colorscheme murphy灰色)
  • 其他任何空格字符看起来都像红色“

#20楼

这些hack作为注释保留在.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

#21楼

:match CursorLine /\s\+/

避免了“您必须搜索空格以使其出现”的位,但是无法将afaict配置为对空格进行非突出显示的操作。 CursorLine可以是任何亮点组,并且在默认主题中是普通下划线。


#22楼

根据当前缓冲区的语法规则,类似的方法可能会起作用:

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

这需要具有+ conceal功能的vim 7.3

2014年10月24日更新要对此进行扩展。 当然可以为锥形字符定义一些突出显示。

  • 您可以配置隐藏字符的外观。 对于突出显示,您至少必须配置一次“隐藏”突出显示组(请参见:h hl-Conceal的帮助。可以在您的配色方案中完成此操作,然后无需重新配置它。但这会影响所有隐藏的对象。字符(例如,如果您的语法脚本隐藏了更多项目,它们将显示为空白字符)。看起来可能像这样:

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

  • 如果语法脚本使用skipwhite关键字,似乎Vim不会突出显示空格。 将无法解决(也许会解决,我发布了一个补丁

  • 似乎有一个补丁在浮动,可以自定义list模式下的空间外观。 在撰写本文时,最新的版本似乎就是此版本 。 (这意味着,您需要构建自己的Vim才能使用它)。
  • conceallevelconcealcursor是窗口本地选项。 这意味着它们在不同的窗口中可以有所不同(并且也可能由文件类型插件或其他插件脚本来设置)。
  • 每当重新加载语法定义文件时,都需要执行语法突出显示组。 这可以使用BufWinEnter或可能的Syntax甚至FileType自动命令来完成。 (我尚未测试哪一个实际有效)。

最后两项意味着,您将必须设置一些自动命令来重置语法规则和相应的选项。 对于第一个,可能要使用ColorScheme自动命令设置突出显示(以便隐藏的字符始终看起来相同,而与颜色方案的实际设置无关)。 对于完整的解决方案,请查看romainl答案,这应该为您提供一个开始。 如果您设置了功能,则可以轻松地设置一个切换命令来打开或关闭显示特殊高亮显示的功能。

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

2015年4月22日更新 Vim中包含一个补丁,可使用list选项来实现此目的。 只需设置set list listchars+=space:␣可以从Vim 7.4.711开始使用


#23楼

我用这个

/\s
:set hlsearch

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值