首页 文章

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

提问于
浏览
2

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

所以在 ( foo = true, bar = false ) 中,该方法会在 foo 之前和 false 之后突出显示 space .

这就是我所拥有的:

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

    您可以使用此解决方案,并在 ) 之后放置一个lookbehind:

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

    \(^[ \t]\+)\)\@<! 仅检查是否没有行开头后跟1个空白,然后是 ) ,之后匹配1个空白与 ) .

    完整的表达:

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

    试试这一行:

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

相关问题