¿Cómo trabajar con el modo de línea de comandos de la manera vi?

10

¿Hay alguna manera de interactuar con el modo de línea de comandos mientras se mantiene siempre en la posición de inicio?

En particular, las siguientes dos acciones son engorrosas y requieren mover los dedos hacia las teclas de flecha y, a veces, peor, el mouse.

  1. Moverse: ¿Hay alguna forma de moverse hacia adelante y hacia atrás en el modo de línea de comandos mientras se mantiene en la posición habitual?
  2. ¿Cómo puedes copiar y pegar en la línea de comandos? Me refiero a copiar ambos de una parte de la línea de comandos a otra parte, o del texto o incluso del portapapeles.
Shahbaz
fuente
1
Ambos pueden resolverse utilizando la ventana de línea de comandos con :q; esto abre una nueva ventana "similar a un búfer", en la que puedes usar hjklpara movimiento, ypara tirar, etc.
Martin Tournoij
1
@Carpetsmoker (quieres decir q:, ¿verdad?) ¡Es bueno saberlo! Había llegado accidentalmente allí en el pasado, pero realmente no pensé en usarlo. Sin embargo, no parece funcionar con /(buscar).
Shahbaz
Vaya, sí, quise decir q: ... nunca lo usé mucho, así que no puedo darte una respuesta completa / adecuada ...
Martin Tournoij

Respuestas:

17

Existe la línea de comandos (que usted conoce) y la ventana de la línea de comandos (la línea de comandos en un búfer especial, que puede editar como cualquier otra). Entrar en este ya sea a través <C-f>de la línea de comandos (también para /las búsquedas, etc.) cuando se siente la necesidad de un mayor "poder editar", o directamente desde el modo normal a través de la dedicada q:, q/etc. comandos.

Lea más sobre esto en :help command-line-window.

Ingo Karkat
fuente
44
<C-f>es muy útil saberlo, ya que funciona después de que ya está a la mitad del comando.
Shahbaz
1
Estoy de acuerdo; el :viene casi automáticamente para mí, así que es bueno poder cambiar sin volver al modo normal.
Ingo Karkat
11

Además de proporcionar la ventana de línea de comandos , Vim también ofrece algunas funciones limitadas que le permiten interactuar con la línea de comandos mientras está en modo de línea de comandos ( sin usar las teclas de flecha).

Movimiento

  • <ctrl-b> mueve el cursor al comienzo de la línea de comando
  • <ctrl-e> mueve el cursor al final de la línea de comando

Edición

  • <ctrl-h> eliminar el caracter antes del cursor (como retroceso)
  • <ctrl-w> borrar la palabra antes del cursor
  • <ctrl-u> eliminar todo el camino desde el cursor hasta el inicio de la línea de comandos

Por supuesto, puede agregar asignaciones de línea de comandos :cnoremappara emular ciertas teclas de navegación de otros programas . O instale el complemento RSI de Tim Pope para usar los enlaces Readline estándar de facto.

Pegado

Puede pegar el contenido de cualquier registro en la línea de comandos en la posición del cursor presionando <ctrl-r>seguido del carácter que especifica el registro. por ejemplo <ctrl-r>, +insertará el contenido del portapapeles en la línea de comandos; <ctrl-r>, "insertará el contenido del registro "sin nombre" (es decir, el contenido de su última eliminación o extracción).

Ver :help cmdline.txtpara más detalles de todo lo anterior.

Rico
fuente
1
¡Increíble! <ctrl-r>Sería particularmente útil.
Shahbaz
Sí, incluso lo he usado ^Rpara macros. Me ha permitido realizar manipulaciones de texto súper complicadas al extraer parte del archivo durante la macro y, más tarde, también durante la macro, utilizando la parte eliminada en un comando largo en modo Ex con ^R. :)
Comodín el