Answers:
一种方法可能是使用syn*
功能。就像是:
fun! Qtx(qt)
let x = synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")
if x != "String" && x != "Comment" && x != "Constant"
return a:qt . a:qt
endif
return a:qt
endfun
inoremap <silent> <expr> ' Qtx("'")
inoremap <silent> <expr> " Qtx('"')
想法是利用光标所在位置的缓冲区语法。这也许可以更好地解决。但希望是一个开始。
如前所述,您必须检查语法上下文。旧的lh-brackets API为此提供了功能:Map*Context()
functions。从那时起,方括号定义被封装,:Bracket
其中将考虑上下文(字符串或注释)。
默认情况下,为所有常见的括号对定义上下文感知映射,如下所示:
:Brackets! ( )
:Brackets! [ ] -visual=0
:Brackets! [ ] -insert=0 -trigger=<leader>[
:Brackets! " " -visual=0 -insert=1
:Brackets! " " -visual=1 -insert=0 -trigger=""
:Brackets! ' ' -visual=0 -insert=1 -but=function('lh#ft#is_text')
:Brackets! ' ' -visual=1 -insert=0 -trigger=''
:Brackets! < > -visual=1 -insert=0 -trigger=<localleader><
:Brackets! { }
:Brackets! { } -visual=1 -insert=0 -nl -trigger=<leader>{
Qtx
?