我找不到一种使Vim将所有空格显示为字符的方法。我发现的只是关于制表符,尾随空格等。
list
并listchars
认为空格直接在制表符之后。在这种情况下,它几乎是看不见的。我同意您可以捕获大多数情况,但如果可以适当地突出显示所有空间,那将是一个不错的选择。
我找不到一种使Vim将所有空格显示为字符的方法。我发现的只是关于制表符,尾随空格等。
list
并listchars
认为空格直接在制表符之后。在这种情况下,它几乎是看不见的。我同意您可以捕获大多数情况,但如果可以适当地突出显示所有空间,那将是一个不错的选择。
Answers:
正如其他人所说,您可以使用
: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>
.vimrc
文件中,以便可以随时轻松启用这种显示不可见字符的漂亮方法:set list
(无需再次浏览该页面)。
从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
:help listchars
以检查“ space”是否是“ listchars”的有效选项。如果不是,请将您的vim升级到指定的补丁@brettanomyces。或者,如果您不希望看到空格,也可以在set命令中保留“空格”。
space:·
),因为它看起来像MS Word,Notepad ++等
<C-K>.M
在vim的·
。有关:h digraph
详细信息,请参见。
:set list
启用。
:set nolist
禁用。
: set list!
更好:)
Shift
和!
都难度比打字no
。如果您将其放在.vimrc中,则我同意exclam格式更易于阅读。
:set list!
将其打开或关闭,则无需输入即可nolist
。这!
与当前设置的相反。我一直都用这个,尤其是在使用时:set paste!
。我讨厌按箭头键查找:set paste
或:set nopaste
大声笑
我认为这里的其他答案比较全面,但我想我会分享一个技巧,我通常用这种技巧在视觉上区分制表符和空格:
:syntax on
:set syntax=whitespace
这些是Whitespace编程语言的语法突出显示规则-选项卡以绿色显示,空格以红色显示。:)
可以与:set list
许多其他答案中提到的结合使用,尽管选项卡随后将显示为^ I,而没有绿色高亮显示,但空格将显示为红色。
:set list
将所有空格显示为字符。一切,但空间看起来会比正常状态,这意味着如果你仍然可以看到一个普通的老式空间,这真是一个普通的旧空间的不同。:)
:set nolist
!
在最后切换:set list!
:se hls | /\_s
为此,我使用一个衬垫。获取所有内容,而set list
忽略空格。再次关闭:se nohls
。有关此帖子的详细信息:albertech.blogspot.com/2015/02/…–
如果您设置:
: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中定义功能。
根据当前缓冲区的语法规则,类似的方法可能会起作用:
: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才能使用它)。conceallevel
和concealcursor
有窗口局部选项。这意味着它们在不同的窗口中可以有所不同(并且也可能由文件类型插件或其他插件脚本来设置)。BufWinEnter
或可能的a Syntax
甚至FileType
自动命令来完成。(我尚未测试哪一个实际有效)。最后两项意味着,您将必须设置一些自动命令来重置语法规则和相应的选项。对于第一个,可能需要使用ColorScheme
自动命令来设置突出显示(以便隐藏的字符始终看起来相同,而与颜色方案的实际设置无关)。对于完整的解决方案,请查看romainl答案,这应该为您提供一个开始。如果您设置了功能,则可以轻松地设置一个切换命令来打开或关闭显示特殊高亮显示的功能。
更新10/26/2014我从这个问题中制作了一个插件。
2015年4月22日更新 Vim中包含一个补丁,可以使用该list
选项来实现此目的。简单设置set list listchars+=space:␣
这将从Vim 7.4.711开始
.vimrc
?
Æ
这是一个奇怪的角色选择,为什么不·
呢?
如果用空格表示“”字符,我的建议就是搜索/替换。正如其他人所暗示的,set list
将非打印字符更改为在中配置的可见字符listchars
。
为了将空格显示为其他字符,可以使用类似于以下内容的方法:
:%s/ /█/g
然后只需撤消更改以再次返回即可。
(获取█我按这个确切的按键顺序::%s/ /CTRL-KFB/g)
:set list
与我相反,将可见字符(“空格”)更改为_non priting_(??)。我想知道是否可以使用这种内部比赛,例如:match MyBlackBlockChar "appropriate_regex
,应该做到这一点,不是吗?
要突出显示空格,只需搜索它:
/ <空格>
笔记:
突出显示空格和制表符:
/ [<space> <tab>]
删除突出显示的一种快速方法是搜索其他内容:/ asdf
(只需输入任何简短的随机字符列表)
下面的代码基于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
语法组中的几种语言中的某些内容阻止中间点显示。我不知道(尚未?)如何使该解决方案更可靠。
skipwhite
语法规则中的参数,它阻止语法组匹配(尽管应允许将其包含在所有组中)。
我对这个问题的所有其他答案感到沮丧,因为它们都没有以有用的方式突出显示空格字符。将空格显示为字符对于空白格式的语言特别有用,因为在这些语言中,制表符和空格的混合是有害的。
我的解决方案是显示选项卡并在多个空格下划线。它借鉴了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 / \+/
使用此选项卡时,选项卡显示为|
,空格显示为_
,这使我很容易分辨出何时混合代码样式。
我发现的唯一缺点是,此代码段无法调整背景颜色以匹配上下文(例如在评论中)。
以上所有答案都试图使vim内部的空间可见。如果您真的坚持将可见的空间作为点,那么还有另一种方法...
如果不能在vim中完成,请完全更改字体。我复制了Ubuntu One Mono字体并使用FontForge对其进行了编辑。记住要更改字体的全名,家族,首选家族,兼容的完整字体(在FontFoge中,它在字体信息中的TTF名称下),以便将其作为单独的字体使用。只需编辑空格字符在中间有一个点,然后将字体保存到〜/ .fonts,现在您就可以将其用于gvim或整个终端了……我复制了“!” 字符,删除线并将点移到中间。花了超过5分钟的时间...
注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便...(但它将空格与制表符分开...)
从现有答案中找不到我想要的东西。下面的代码将以红色突出显示所有尾随空格。只需将以下内容添加到您的.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()
:match CursorLine /\s\+/
避免了“您必须搜索空格以使其出现”的位,但是无法将afaict配置为对空格进行非突出显示的操作。CursorLine可以是任何亮点组,并且在默认主题中是普通下划线。
我喜欢用特殊字符来显示空格,更清晰。快速切换甚至是要切换的地图也是关键功能。
您可以在自2004年以来未更新的旧vim脚本中找到以下功能:
vim-scripts/cream-showinvisibles@vim.org
vim-scripts / cream-showinvisibles @ github
更好的是,我为此付出的两分钱是添加一个可配置的快捷方式(而不是预定义的F4)
所以将它添加到〜/ .vimrc
Plugin 'albfan/cream-invisibles'
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
在vim上安装插件
:PluginInstall
然后你去
要覆盖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]')
结果:
”)│
”(两个字符:长管道,然后是序数空格;在中为灰色colorscheme murphy
)·
”(一个字符;在中为灰色colorscheme murphy
)
”set listchars=tab:»\ ,space:·
您的参考。
gvim
和vim
。
将这些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
您还可以突出显示空格(用块代替空格):
:%s/ /█/g
(在编写撤消之前)
:set list
。那没有回答我们的问题。(对于其他人:mrucci的以下回答很有帮助,尽管不是真正的解决方案。)