Vim:匹配大括号之间的空格,但不匹配新行

时间:2016-03-30 09:13:09

标签: regex vim

在vim中,我试图在(之后和) .coffee个文件中突出显示空格。

这样,在( foo = true, bar = false )中,该方法会在foo之前和false之后突出显示空格

这就是我所拥有的:

highlight BraceWhiteSpace ctermbg=red ctermfg=white guibg=#592929
fun! UpdateMatch()                                               
    if &ft !~ '^.*\.coffee$'                                     
        match BraceWhiteSpace /([ \t]\+\|[ \t]\+)/               
    else                                                         
        match NONE                                               
    endif                                                        
endfun                                                           
autocmd BufEnter,BufWinEnter * call UpdateMatch()                

关键部分在这里

match BraceWhiteSpace /([ \t]\+\|[ \t]\+)/

这是有效的,除了它还匹配一个新行上带有前导空格的大括号,我不想要这样做:

    )

我正在努力编写一个具有lookbehind的正则表达式来检查它不在行的开头。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以在 )后使用此解决方案并将其置于后面

[ \t]\+)\(^[ \t]\+)\)\@<!

\(^[ \t]\+)\)\@<!仅检查是否没有行首,其后是1 +空白,然后是),其中1 +空白与)匹配。

完整的表达:

([ \t]\+\|[ \t]\+)\(^[ \t]\+)\)\@<!

答案 1 :(得分:0)

试试这行:

match BraceWhiteSpace /([ \t]\+\|.\+\zs[ \t]\+)/