È possibile definire la propria abbreviazione su "bit", quindi verificare se è preceduta da "\", in tal caso, restituire il nuovo testo o "bit" in caso contrario.
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>
Questo è il tipo di trucchi che ho usato in MapNoContext().
MODIFICA: vedere :h abbreviations per i motivi per cui ciò che è stato chiesto non può essere raggiunto direttamente.
EDIT2: Si può facilmente essere incapsulato in questo modo:
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>)
e utilizzato con un semplice:
InoreabBSlash <buffer> locbit foobar
o
InoreabBSlash bit foobar
fonte
2009-11-05 14:13:59
Aaarrgghh! È un cracker. Il tuo, ho imparato, è una cosa di {rhs}. In {lhs}, "\ b" (senza virgolette) funziona, ma l'E474 è presente quando viene aggiunto un secondo carattere "\ bi". "\\" e "\\ b" sono accettabili, ma "\\ bi" non lo è. '"\ bit"' (senza le virgolette esterne) funziona, ma le virgolette sono parte di ab. Come ho detto, "Aaarrgghh!" +1 –
se si configura questo in una risposta @Ewan Posso votare questo, e sarà più facile vedere le virgolette. Questa è roba interessante ... – Peter