我希望能够编写\bit
并将其扩展为vim中的某些内容。但是,如何在缩写的左侧对反斜线进行编码?在vim缩写中使用反斜杠
我尝试了所有的这些:
:iab \bit replacement_text
:iab <Bslash>bit replacement_text
:iab <bs>bit replacement_text
,但得到E474: Invalid argument
所有这些。
map_backslash
帮助主题建议<Bslash>
,但这似乎不起作用。
我希望能够编写\bit
并将其扩展为vim中的某些内容。但是,如何在缩写的左侧对反斜线进行编码?在vim缩写中使用反斜杠
我尝试了所有的这些:
:iab \bit replacement_text
:iab <Bslash>bit replacement_text
:iab <bs>bit replacement_text
,但得到E474: Invalid argument
所有这些。
map_backslash
帮助主题建议<Bslash>
,但这似乎不起作用。
您可以在“位”上定义您的缩写,然后测试它是否以“\”开头,如果是,则返回新文本,否则返回“位”。
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
你可以
inoremap \bit replacementtext
此外,如果你不喜欢的滞后像反引号`替代的领导者(标签上面对我来说)
:iab `f foobar
,如果你不使用它们在你的代码往往
您只能使用一个反斜杠作为前缀为缩写,如果它只有一个字符后面,那么:iab \b replacementtext
将工作。
我建议使用两面反斜杠,VIM是高兴道:
inoreabbr \bit\ replacement_text
请注意,我用的缩写的“诺尔”的版本,更好的是明确的,如果你不打算递归扩张。我一直使用下面的缩写很长一段时间,他们的工作很好:
inoreabbr \time\ <C-R>=strftime("%d-%b-%Y @ %H:%M")<CR>
inoreabbr \date\ <C-R>=strftime("%d-%b-%Y")<CR>
有创意的替代品。尾部反斜杠将其转换为允许的_non-id_缩写。 – 2012-09-25 20:45:37
Aaarrgghh!这是一个饼干。我了解到,你的是一个{rhs}的东西。在{lhs}中,“\ b”(w/o引号)起作用,但当第二个字符被添加“\ bi”时,E474在那里。 “\\”和“\\ b”是可以接受的,但“\\ bi”不是。 ''\ bit“'(没有外部单引号)可以工作,但双引号是ab的一部分。就像我说的,“Aaarrgghh!” +1 –
2009-11-05 01:45:29
如果你坚持这个答案@Ewan我可以投票,这将是更容易看到报价。这是有趣的东西... – Peter 2009-11-05 06:45:59