2013-03-24 124 views
3

当我在vim中找到/并搜索$时,它突出显示了所有的eols。但是当我尝试将它们与syntax match相匹配时,它似乎不起作用。在vim中匹配行结束符(EOL)和语法匹配

function! ConcealNonText() 
    set conceallevel=1 
    set concealcursor=v 
    syntax match NonText /$/ conceal cchar=¶ 
endfunction 

augroup ConcealNonText 
    autocmd! 
    autocmd VimEnter * call ConcealNonText() 
augroup END 

任何提示如何我可以匹配它,以便显示eols作为隐藏的字符? 我知道我可以使用set list listchars,但在我看来有一些visual side effects

+0

那么模式应该是'[\ n]' - 但是这并没有给我更好的结果。 – Saucier 2013-03-25 02:02:16

回答

1

看起来像你的要求是显示来代替eol。虽然你提供的代码可能是一个可能的解决方案,但它肯定不是一个理想的解决方案。 Vim提供了一种实现你想要的更简单的方法。你真正需要做的是查找:h listchars

以下是你应该把什么在你的vimrc实现你的愿望的例子:

set list 
set listchars+=eol:¶ 

一旦你穿上这个,VIM将显示为EOL字符的字符

+0

谢谢,但我已经知道了,请参阅OP和链接提供的描述与listchars问题。 – Saucier 2013-03-28 12:33:24

0

要做你想做的事,你可以做matchadd()来匹配所有的行尾。 Matchadd将返回一个id,它可以帮助您在需要时删除给定的匹配项。

:call matchadd("NonText", "$") 

有关如何使用它的更多信息,请参阅:he matchadd()

HTH

+0

据我所知'''conceal''只能应用于'''syntax match'''。所以我猜这不会按预期工作? – Saucier 2013-04-16 16:07:08

+0

不,但是你最好在matchadd中使用'set listchars + = eol:¶',然后你会用'¶'字符对所有行结束,但是对于颜色使用匹配而不是语法。这实际上是我为自己的配置考虑的一个选项,因为我还后悔让我的eol字符在cursorline下放弃它的着色属性。 – zmo 2013-04-16 22:13:40