Puede definir su abreviatura en "bit", y luego probar si va precedida por "\", de ser así, devuelva el texto nuevo, o "bit" en 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>
Esa es la clase de trucos que utilicé en MapNoContext().
EDITAR: vea :h abbreviations por las razones por las cuales no se puede lograr lo que usted solicitó directamente.
Edit2: Se puede encapsular fácilmente de esta manera:
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>)
y se utiliza con un simple:
InoreabBSlash <buffer> locbit foobar
o
InoreabBSlash bit foobar
Aaarrgghh! Es un cracker Su, me enteré, es una cosa {rhs}. En el {lhs}, funciona "\ b" (sin comillas), pero el E474 está allí cuando se agrega un segundo carácter "\ bi". "\\" y "\\ b" son aceptables, pero "\\ bi" no lo es. '"\ bit"' (sin comillas simples externas) funciona, pero las comillas dobles son parte del ab. Como dije, "¡Aaarrgghh!" +1 –
si pega esto en una respuesta @Ewan, puedo votar esto y será más fácil ver las comillas. Esto es algo interesante ... – Peter