답변:
한 가지 방법은 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()
합니다 . 그 이후에 대괄호 정의가 캡슐화되어 :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
?