Usando vim al presionar los paréntesis de apertura y cierre / paréntesis / etc.

8

Cuando aprendí a programar, presionaría los corchetes de apertura y cierre / etc, luego la tecla de flecha izquierda y luego ingresaría el texto. Entonces, para [hello]escribir [], escribiría , y luego la flecha izquierda para que esté sobre el primer corchete ( [).

Me gusta porque sé que siempre tengo el número correcto de paréntesis / etc. y de lo contrario siento que mi mano tiene que moverse hacia adelante y hacia atrás a la tecla de paréntesis / etc.

Pero, al apegarme a la mentalidad de Vim, no quiero alcanzar continuamente las teclas de flecha. ¿Hay algo que pueda hacer que no implique el uso de las teclas de flecha o tener que cambiar continuamente del modo de inserción para presionar hy volver a entrar?

JZL003
fuente

Respuestas:

5

Es posible que esté buscando el complemento de pares automáticos :

Cuando escribe un carácter como {, (o [este complemento agregará automáticamente el carácter simétrico y reemplazará su cursor en modo de inserción entre los dos corchetes. También puede ser "inteligente" al eliminar esos caracteres.

Además, si puedo darte un consejo, olvida las teclas de flecha . Independientemente de lo que quiera hacer, siempre hay un movimiento más rápido accesible sin mover las manos de la fila de inicio. Puede tomar algún tiempo acostumbrarse, pero una vez que sea un hábito, ni siquiera los extrañará.

statox
fuente
Gracias por el comentario y, si no te importa que pregunte; escribe "[" luego "hola" y luego "]". Sin los complementos surround (lo que parece una gran idea, gracias) parece un poco engorroso ir y venir, incluso sin el problema de perder potencialmente el número correcto de paréntesis
JZL003
Bueno, en realidad yo siempre uso de forma automática el o los pares surround.vim (véase la respuesta de Pedro), pero si tuviera que hacer eso sin plug-ins, lo haría [, ] , <Esc>(que se coloque el cursor sobre el ] ) y, por último i, que se coloque el cursor entre los corchetes en modo de inserción.
statox
@statox cuando está en modo de inserción, ¿cómo mueve el cursor dos posiciones hacia la izquierda? Con ctrl-o 2h? ¿Es esto más rápido que mover la mano a los cursores? ;)
Vitor
@Vitor No, presionaré la tecla Esc para ir al modo normal, para un movimiento de menos de 3 caracteres, probablemente presionaré varias veces ho, de lo jcontrario, usaré otros movimientos. Me parece más rápido, pero entiendo que algunas personas lo sienten de una manera diferente :)
statox
@statox después de 10 años usando vim, todavía estoy luchando por usar hjkl y especialmente en este escenario que acabo de describir. ¡Gracias por tus comentarios! :)
Vitor
8

Hay muchos complementos de "pares" que hacen esto automáticamente. Sin embargo, todos me frotan de la manera incorrecta. Tiendo a usar el plugin surround.vim de Tim Pope . Hago lo siguiente: <c-s>]en modo de inserción para insertar []con el cursor en el medio de los corchetes.

Peter Rincker
fuente
Más gente necesita saber sobre esto, vim surround es más útil que simplemente envolver cosas. Además, siento el malestar par plugin, muy agresivo y terminar perdiendo pulsaciones de teclas a formato
rgalbo
4

Si solo necesita mover un espacio, ctrl-oen el modo de inserción hace que su próxima entrada sea un comando normal, por lo tanto ctrl-o, hretrocederá uno. La línea de modo se mostrará --- (insert) ---hasta que ingrese el comando normal.

StarWeaver
fuente
2

lh-brackets proporciona mapeos de inserción, modo normal y visual para insertar par de corchetes.

Notas:

  • Agregar nuevos pares de soportes es bastante fácil.
  • Las asignaciones de modo de inserción son sensibles al contexto, es decir, no se expanden dentro de los contextos de cadena o comentario, ...
  • A diferencia del plugin surround, las asignaciones circundantes son intuitivas, pero no en estilo vim. es decir, golpear (en modo visual rodeará (por defecto), no tenemos que golpear si(o secuencias similares.
Luc Hermitte
fuente
2

Las respuestas anteriores son muy buenas. Pero creo que quizás quieras algo más fácil. Personalmente lo uso h j k lpara moverme. Por lo tanto, he agregado a mi .vimrc lo siguiente:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

Solo un pequeño consejo. Usted ha dicho que su procedimiento es i, [], <Esc>hi.

Hay asignaciones pendientes de operador, lo que significa que puede ci[o di[o ii[.

Patricio
fuente
1

Personalmente, no soy un gran fanático de la inserción automática de personajes; puede definir fácilmente un conjunto de asignaciones para insertar texto y más el cursor donde desee:

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

Tenga en cuenta que un complemento como ultisnips también hace cosas como esta, pero más avanzadas. Por ejemplo en Javascript puedo escribir:

if<Tab>hello

y obtengo:

if (hello) {

}

Puede agregar un fragmento simple para completar los corchetes; Este es un archivo .snippet especial que vive en ~/.vim/UltiSnips/all.snippets:

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} es la posición del cursor.

ver :help UltiSnips-adding-snippetspara más información.

Tenga en cuenta que ultisnips requiere Python; otro plugin conocido es vim-snipmate . El Wiki de Vim tiene una lista completa de complementos de fragmentos .

Martin Tournoij
fuente