Tutoriales

20 consejos de Vim que cambiarán tu forma de editar

empuje Es un potente editor de texto controlado por teclado integrado en casi todos los sistemas Linux, Unix y macOS. La mayoría de los usuarios ya saben lo suficiente como para abrir un documento, editarlo, guardarlo y luego detenerlo. la siguiente 20 consejos para Vim Los objetivos a continuación son el siguiente nivel: la edición que solía requerir diez pulsaciones de teclas ahora requiere solo dos, y las operaciones que requieren scripts ahora se ejecutan en línea.

La eficiencia de Vim se divide en tres niveles:

  1. navegación (alto/medio/largo, CTRL-^, f+;),
  2. editar (:norm, gi, gvregistro de expresión),
  3. y bloc de notas ("_dreparación de macros, Ctrl-r palo).

este La última versión de Vim 9.2 Se completa agregando el modo de inserción difusa completeoptuno linematch algoritmo diff y ruta de configuración XDG.

Ahora, aprendamos algunos trucos útiles de Vim que cambiarán la forma en que editas.

20 consejos de Vim: hoja de referencia rápida

#Ordenque hacecategoría
1H / M / LMueve el cursor a la parte superior/media/inferior de la pantalla.navegación
2CTRL-^Cambiar entre el búfer actual y el último búfernavegación
3f{char} Entonces ;Saltar a la siguiente aparición del personaje en línea; repetirnavegación
4:%norm A;Adicional ; a cada línea del archivoedición masiva
5giDevuelve el último punto de inserción en el buffer actualedición masiva
6gvVuelva a seleccionar la última selección visualedición masiva
7Ctrl-a / Ctrl-xAumentar/disminuir el número debajo del cursoredición masiva
8g Ctrl-aConvertir la columna del bloque visual en una secuencia crecienteedición masiva
9"_dEliminar sin sobrescribir copiar scratchpadbloc de notas
10Ctrl-r {reg}Pegar desde scratchpad sin salir del modo insertarbloc de notas
11Ctrl-r =Habilitar registro de expresión (calculadora en línea)bloc de notas
12"ap → Editar → "ayPegar, editar y volver a extraer macros rotasbloc de notas
13q:Abre una ventana de historial de comandos con capacidad de búsqueda.Historia y búsqueda
14q/Abrir la ventana del historial de búsqueda con capacidad de búsquedaHistoria y búsqueda
15Ctrl-x Ctrl-fAutocompletado de ruta de archivo en modo de inserciónHistoria y búsqueda
16completeopt+=fuzzyCompletar palabras en modo de inserción más inteligente (9.2+)Wim 9.2
No 17linematch diferenciaAlineación más precisa de líneas similares en modo diff (9.2+)Wim 9.2
18Ruta de configuración XDGMover configuración a ~/.config/vim/vimrc (9.2+)Wim 9.2
19:TutorComplemento tutorial interactivo que reconoce la versión (9.2+)Wim 9.2
20ZZ / ZQ / :%yGuardar y salir/Abortar y salir/Copiar el archivo completoMicro mensaje

Navegación: deja de alcanzar el mouse

Estos tres consejos cubren la mayoría de los movimientos del cursor en una sesión de edición típica. Una vez que se forma el reflejo condicionado, la navegación sin mouse se puede lograr de forma natural en una semana.

Saltar a la posición de la pantalla: H, M, L

H, My L Mover el cursor a hHola (arriba), tamaño medianomedio, y lActualmente, la parte inferior de la pantalla está visible, no el archivo. No es necesario desplazarse.

Prefijo con recuento para caer en líneas específicas de ese borde:

4H    " move to 4th line from the top of the screen
2L " move to 2nd line from the bottom of the screen

Utilice CTRL-^ para cambiar entre búferes

Cuando trabaje con dos archivos, cambie entre ellos sin escribir el nombre del archivo. CTRL-^ (nombre canónico de Vim; también se puede acceder a través de Ctrl-6 en un teclado estadounidense) en el actual buffer y buffer de respaldoindependientemente del archivo que haya abierto antes.

notas: Ctrl-6 Es un alias relacionado con la distribución del teclado. En muchos teclados internacionales y en algunos emuladores de terminal no se activa. CTRL-^ es una encuadernación fiable. Si ninguno de los dos funciona, asigne el recurso alternativo: nnoremap b

:e config.yaml    " open a second file
" jump back to the first file instantly
" jump forward again

Utilice f y ; para saltos de personajes

f{char} Mover el cursor hacia adelante a la siguiente ocurrencia {char} en la línea actual. de acuerdo a ; Repita el salto, o , para revertirlo. Usar mayúsculas F{char} Buscar hacia atrás.

fa    " jump to next 'a' on this line
; " jump to the 'a' after that
, " go back one

Edición a escala: menos pulsaciones de teclas, más contenido

este :norm Este comando por sí solo me ahorró tiempo en la normalización masiva de perfiles a través de SSH, donde no había IDE disponible y la funcionalidad de buscar y reemplazar no era suficiente.

Utilice :norm para edición por lotes

este :normal comando (abreviado como :norm) ejecuta cualquier secuencia de modo normal en cada fila del rango. combinarlo con % Apunte a todo el archivo.

:%norm A;         " append a semicolon to every line
:%norm I// " prepend // (comment) to every line
:5,20norm A, " append a comma to lines 5–20 only

notas: Obtenga siempre una vista previa de su alcance :5,20p antes de correr :norm encima de eso. Este comando modifica la línea inmediatamente; no hay ningún mensaje para deshacer.

Utilice gi para volver a la última edición

gi Volver a la posición exacta de la última inserción en el buffer actual e inmediatamente vuelve a entrar en el modo de inserción. Esta es la forma más rápida de restaurar la entrada después de buscar referencias en otras partes del mismo archivo.

gi    " go to last insert point and start typing

notas: gi Es local al búfer. Si desea saltar a la última posición insertada todo buffer, usando listas de salto (Ctrl-o) de lo contrario.

Utilice gv para volver a seleccionar el área visible

¿Presionó la tecla equivocada y perdió su selección visual? gv Restaure exactamente la última selección: mismo inicio, mismo final, mismo patrón (caracteres, líneas o bloques).

gv    " restore last Visual selection

Incremento y número de secuencia.

Ctrl-a El número debajo del cursor aumenta en 1. Ctrl-x Resta 1. Prefijo con conteo:

10    " add 10 to the number under the cursor
3 " subtract 3

aquí,

  • 10 Camino – Ingrese 10 y presione Ctrl+a.
  • 3 Camino – Ingrese 3 y presione Ctrl+x.

Para generar una secuencia de incremento automático, primero ingrese modo de bloqueo visual y Ctrl-vseleccione una columna de ceros y luego presione g Ctrl-a:

" Before (Visual Block selected with Ctrl-v):
0
0
0

" After g:
1
2
3

Bloc de notas y portapapeles: los superpoderes ocultos de Vim

El scratchpad es la característica que la mayoría de los usuarios de Vim ignoran durante más tiempo y que más lamentan. Conocer incluso tres de estos cambiará permanentemente la forma de editar.

Registro de agujero negro: «_d

Cada criterio elimina (d, c, x) sobrescribe su último tirón. usar "_d Enviar texto eliminado a registro de agujeros negros – Se descarta y su borrador de copia no se ve afectado.

"_dd    " delete current line; yank register unchanged
"_dw " delete word; yank register unchanged

Utilice Ctrl-r para pegar en modo insertar

En modo de inserción, Ctrl-r Seguido de un nombre de bloc de notas, su contenido se pega sin cambiar al modo normal.

"    " paste from the unnamed (default) register
a " paste from register 'a'
+ " paste from the system clipboard

Registro de expresión (calculadora en línea)

En modo de inserción, Ctrl-r = Abierto registro de expresión Rápidamente. Ingrese cualquier expresión aritmética y presione Enter; el resultado se insertará en el cursor. No se requiere calculadora externa.

=7*24           " inserts 168
=len("hello") " inserts 5

Reparar macros mediante edición de registros

Macro Solo texto almacenado en un registro con nombre. Si la macro está grabada en el scratchpad a Hay errores y no es necesario volver a grabar desde el principio:

"ap        " 1. paste the macro text into the buffer
" (edit the text manually)
0"ay$ " 2. yank the corrected line back into register 'a'

El episodio ya está arreglado y listo para reproducirse. @a.

Grabar, buscar y completar

Ventana del historial de comandos: q:

q: Abre una lista editable en ventana completa de cada comando Ex que ingresa. Navegue por él como cualquier búfer, edite los comandos anteriores y presione Entrar para ejecutarlo.

notas: La mayoría de los usuarios encuentran q: Error de entrada accidental :q. Vale la pena estudiarlo deliberadamente: complejo :substitute o :global Es mucho más fácil mejorar el comando aquí que volver a ingresarlo desde cero.

cerrar ventana Ctrl-c o :q desde el interior.

Ventana del historial de búsqueda: q/

q/ Haga lo mismo con los patrones de búsqueda: crucial a la hora de perfeccionar patrones de búsqueda complejos expresión regular Has escrito sobre ello antes.

q/    " open forward-search history
q? " open backward-search history

Finalización de la ruta del archivo: Ctrl-x Ctrl-f

Al ingresar una ruta de archivo en modo de inserción, Ctrl-x Ctrl-f Activar la finalización consciente del sistema de archivos. Vim lee su directorio actual y proporciona coincidencias.

/etc/nginx/    " lists files inside /etc/nginx/

Vim 9.2: novedades que vale la pena usar

Verificación de versión:

correr :version y confirme que se haya leído la primera línea. VIM - Vi IMproved 9.2 Antes de utilizar los consejos de esta sección.

Las cuatro funciones siguientes requieren Vim 9.2+. Actualmente Wayland admite experimentalasí que no confíes en él en producción.

Coincidencia difusa al finalizar el modo de inserción

Nuevo en Vim 9.2 coincidencia difusa Modo de inserción completado (Ctrl-n / Ctrl-p). Ya no requiere prefijos estrictos: se clasificarán y mostrarán las coincidencias de caracteres parciales y desordenadas. Habilítelo agregando fuzzy llegar completeopt:

set completeopt+=fuzzy    " correct option for insert-mode fuzzy completion

Errores comunes: set wildoptions=fuzzy es un diferente opciones. Sólo está disponible en el menú de línea de comando ( Tab La clave es : rápidamente). no tiene ningún impacto Ctrl-n / Ctrl-p Finalizar.

fuente: github.com/vim/vim — Parche 9.1.0463, runtime/doc/options.txt [Section: completeopt]

algoritmo de diferencia de coincidencia de líneas

Introducido en Vim 9.2 linematch Opciones para el modo diferencial. La diferencia estándar resalta todo el bloque modificado; linematch También alinea las líneas más similares. dentro Bloques para resaltar con mayor precisión cada personaje.

set diffopt+=linematch:60    " 60 is the recommended match threshold

fuente: github.com/vim/vim — Número 18185: «El valor recomendado para la coincidencia de línea es 60».

Migración de ruta de configuración XDG

Vim 9.2 respeto Especificación del directorio base XDG. Mueva su configuración fuera de la raíz de inicio:

mkdir -p ~/.config/vim
mv ~/.vimrc ~/.config/vim/vimrc
mv ~/.vim ~/.config/vim

vim encontrará ~/.config/vim/vimrc automáticamente. No se requiere configuración adicional. vuelve a caer ~/.vimrc Si la ruta XDG no existe.

Interacción: complemento de tutor

este :Tutor Comando para iniciar tutoriales compatibles con la versión en el editor que complementan y modernizan los clásicos vimtutor Comandos de shell.

Cubre la funcionalidad de Vim 9.2 y adapta su contenido en función de lo que aún no has hecho. Ambos :Tutor y vimtutor Todavía disponible en 9.2.

:Tutor    " launch the interactive tutorial

Microindicaciones: ZZ, ZQ y:%y

Ordenacción
ZZEscribir en el archivo y salir (equivalente a :wq)
ZQSalir sin escribir (equivale a :q!)
:%yIntroduzca todo el archivo en el bloc de notas de extracción (:%y+ Apuntando al portapapeles del sistema)

Cuándo utilizar estos consejos y cuándo no utilizarlos

al usarlos Te encuentras repitiendo la misma edición manual más de dos veces, explorando un archivo de registro grande a través de SSH o realizando un formato por lotes en tu código fuente.

Saltarlos cuando Este encargo es único, pequeño y único. dirigido ciw Entonces volver a escribir es más rápido que construir un :norm Canalización de una sola palabra. La complejidad tiene un costo.

Preguntas frecuentes (FAQ)

P: ¿Cuál es la diferencia entre: norma y macro?

Respuesta: La macro reproduce la secuencia grabada cada vez que se llama. :norm Aplica una secuencia de patrón normal a cada línea en un rango dentro de una sola directiva. No es necesario registrar los pasos. usar :norm Úselo para operaciones por lotes línea por línea; utilice macros para secuencias de varios pasos que abarquen varias líneas o requieran lógica de ramificación.

P: ¿Por qué CTRL-^ (o Ctrl-6) no funciona en mi terminal?

uno: Ctrl-6 es un alias relacionado con la distribución del teclado CTRL-^. En muchos teclados internacionales o no estadounidenses, Ctrl+6 no generado ^ Personajes esperados por Vim. intentar CTRL-^ directamente. Si su terminal intercepta este mensaje, agregue una asignación personalizada:

nnoremap b

P: ¿Dónde debería colocarse mi vimrc en Vim 9.2?

Respuesta: verificación de Vim 9.2 ~/.config/vim/vimrc Primero (ruta XDG), luego recurra a ~/.vimrc. Cualquiera de los dos funciona; la ruta XDG hace que su directorio de inicio esté más limpio.

P: Configuré wildoptions=fuzzy, pero el modo de inserción aún no aparece borroso una vez finalizado. ¿Por qué?

uno: wildoptions=fuzzy Menú de línea de comando de control (Tab existir : Sólo aviso). Para el modo de inserción Ctrl-n / Ctrl-p Coincidencia difusa, agregar fuzzy llegar completeopt:

set completeopt+=fuzzy

preguntar: gi Llevándome a un lugar inesperado, no donde escribí por última vez.

uno: gi Es local al búfer. volverá a la última posición de inserción buffer actual. Si desea navegar a la última posición de inserción en todos los buffers abiertos, use una lista de salto Ctrl-o en cambio.

P: ¿Vim 9.2 es compatible con mis complementos existentes?

Respuesta: La mayoría de los complementos de Vimscript escritos para Vim 8.x son compatibles. Es posible que sea necesario actualizar los complementos que dependen de elementos internos no documentados. Utilice pruebas mínimas vimrc (Inicie Vim vim -u NONE) antes de migrar la configuración completa.

P: ¿Cómo cerrar la ventana q: historial de comandos?

Respuesta: presione Ctrl-c Ciérrelo y regrese a la ubicación anterior, o ingrese :q Ciérrelo como cualquier otro búfer en la ventana del historial.

P: La coincidencia de líneas no está disponible. Se produjo un error al configurar diffopt.

uno: linematch Requiere Vim 8.2 o superior. Confirma tu versión :version. En Vim 9.2, esta característica es completamente estable. En versiones anteriores, omitir linematch bandera:

set diffopt+=internal,algorithm:patience " safe fallback for Vim < 8.2

en conclusión

Vim es una habilidad que premia la consistencia sobre la intensidad. Debe utilizar estos consejos avanzados cuando se encuentre realizando una tarea manualmente más de tres veces.

No se sienta obligado a aprender todos los comandos de inmediato. En su lugar, elija una técnica como registros de expresión o :norm comando y úselo hasta que se convierta en una segunda naturaleza.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba