usar - Vim inteligente insertar punto y coma
uso de la coma y punto y coma (5)
Debes probar el complemento Cosco.vim .
¿Existe un complemento de Vim que pueda manejar la inserción inteligente de punto y coma, como la de Eclipse?
Ejemplo (el caracter de la tubería es el cursor de inserción):
foobar(|)
Escribo un punto y coma:
foobar();|
Similar:
foobar("blah|")
Escribo un punto y coma:
foobar("blah");|
Si quiero un punto y coma en la posición original del cursor, presiono la tecla de retroceso después de la reubicación inteligente:
foobar("hello|")
foobar("hello");|
foobar("hello;|")
Quiero hacer lo mismo, trabajo toda la noche, toneladas de código, pero por fin, tengo una solución simple.
inoremap ;<cr> <end>;<cr>
y si estoy en un corsé, quiero agregar un punto y coma al final, como este
foo({
|
})
;;<cr>
o ..<cr>
para hacer esto
inoremap ;<cr> <end>;<cr>
inoremap .<cr> <end>.
inoremap ;;<cr> <down><end>;<cr>
inoremap ..<cr> <down><end>.
Utilizo la siguiente función y una asignación para insertar un punto y coma hasta el final de la línea y para eliminar los espacios restantes:
imap <leader>. <C-R>=Semicolonfun()<CR>
fun! Semicolonfun() "{{{
call setline(line(''.''), substitute(getline(''.''), ''/s*$'', '';'', ''''))
return "/<End>"
endfunction "}}}
Así que si tienes algo como:
log.warning("you miss the |identifier")
Presionando o,. Si reasignas al líder, obtienes lo siguiente:
log.warning("you miss the identifier");|
Yo uso este mapeo:
inoremap <leader>; <C-o>A;
No es porque uso los puntos y coma a menudo y en más de un contexto.
-
<Co>
se utiliza para ingresar un solo comando de modo normal. -
A;
significa "agregar un;
al final de la línea".
" ftplugin/c/c_snippet.vim
inoremap <expr> <buffer> ; getline(''.'')[col(''.'')-1:-1]=~'')$'' ? ''<right>;'' : '';''
Esta versión no debe plantear problemas for
si su motor de fragmentos de código lo expande a
for (...|) {
<+code+>
}<++>
Si el soporte abierto está en una nueva línea, desordenará las cosas.
Puede cambiar fácilmente la expresión regular a ''"/=)/+$''
para responder a su pregunta inicial.
inoremap <expr> <buffer> ; getline(''.'')[col(''.'')-1:-1]=~''"/=)/+$'' ? ''<end>;'' : '';''
Sin embargo, no creo que sea una buena idea. En ese caso, la asignación para <bs>
será:
inoremap <expr> <buffer> <bs> getline(''.'')[:col(''.'')-2] =~ ''.*")/+;$'' ? ''<bs><c-o>F";'' : ''<bs>''