我希望能够编写\bit
并将其扩展为vim中的某些内容。但是,如何在缩写的左侧编码反斜杠?
我尝试了所有这些:
:iab \bit replacement_text
:iab <Bslash>bit replacement_text
:iab <bs>bit replacement_text
但所有这些都获得E474: Invalid argument
。
map_backslash
帮助主题建议<Bslash>
,但这似乎不起作用。
答案 0 :(得分:9)
您可以在“bit”上定义缩写,然后测试它是否以“\”开头,如果是,则返回新文本,否则返回“bit”。
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>
这就是我在MapNoContext()中使用的那种技巧。
编辑:请参阅:h abbreviations,了解您所要求的内容无法直接实现的原因。
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>)
用一个简单的:
InoreabBSlash <buffer> locbit foobar
或
InoreabBSlash bit foobar
答案 1 :(得分:2)
我建议双方使用反斜杠,vim很高兴:
inoreabbr \bit\ replacement_text
请注意,我正在使用abbr的“nore”版本,如果您不打算进行递归扩展,最好清楚。我长期使用以下缩写并且效果很好:
inoreabbr \time\ <C-R>=strftime("%d-%b-%Y @ %H:%M")<CR>
inoreabbr \date\ <C-R>=strftime("%d-%b-%Y")<CR>
答案 2 :(得分:1)
你可以
inoremap \bit replacementtext
此外,如果你不喜欢滞后一个替代的领导者,比如backtick`(在我的标签上方)
:iab `f foobar
如果您不经常在代码中使用它们
答案 3 :(得分:0)
如果缩写后面只有一个字符,则只能使用反斜杠作为缩写的前缀,因此:iab \b replacementtext
将起作用。
答案 4 :(得分:0)
:set iskeyword+=\
在vimrc_tex(或只是vimrc)中效果很好。