我希望能够编写\bit并将其扩展到vim中的某些内容.但是,如何在缩写的左侧编码反斜杠?
我尝试了所有这些:
:iab \bit replacement_text
:iab <Bslash>bit replacement_text
:iab <bs>bit replacement_text
Run Code Online (Sandbox Code Playgroud)
但得到E474: Invalid argument了所有这些.
该map_backslash求助主题建议<Bslash>,但这似乎并没有工作.
Luc*_*tte 10
你可以在"位"来定义的缩写,然后测试,如果它是由"\"开头,如果是的话,返回新文本,或"位",否则.
function! s:Expr(default, repl)
if getline('.')[col('.')-2]=='\'
return "\<bs>".a:repl
else
return a:default
endif
endfunction
:inoreab bit <c-r>=<sid>Expr('bit', 'foobar')<cr>
Run Code Online (Sandbox Code Playgroud)
这就是我在MapNoContext()中使用的那种技巧.
编辑:看:h缩写为什么你问的原因不能直接实现.
EDIT2:它可以通过这种方式轻松封装:
function! s:DefIab(nore, ...)
let opt = ''
let i = 0
while i != len(a:000)
let arg = a:000[i]
if arg !~? '<buffer>\|<silent>'
break
endif
let opt .= ' '.arg
let i += 1
endwhile
if i+2 != len(a:000)
throw "Invalid number of arguments"
endif
let lhs = a:000[i]
let rhs = a:000[i+1]
exe 'i'.a:nore.'ab'.opt.' '.lhs.' <c-r>=<sid>Expr('.string(lhs).', '.string(rhs).')<cr>'
endfunction
command! -nargs=+ InoreabBSlash call s:DefIab('nore', <f-args>)
Run Code Online (Sandbox Code Playgroud)
并使用简单:
InoreabBSlash <buffer> locbit foobar
Run Code Online (Sandbox Code Playgroud)
要么
InoreabBSlash bit foobar
Run Code Online (Sandbox Code Playgroud)