
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:
- navegación (alto/medio/largo,
CTRL-^,f+;), - editar (
:norm,gi,gvregistro de expresión), - y bloc de notas (
"_dreparación de macros,Ctrl-rpalo).
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
| # | Orden | que hace | categoría |
|---|---|---|---|
| 1 | H / M / L | Mueve el cursor a la parte superior/media/inferior de la pantalla. | navegación |
| 2 | CTRL-^ | Cambiar entre el búfer actual y el último búfer | navegación |
| 3 | f{char} Entonces ; | Saltar a la siguiente aparición del personaje en línea; repetir | navegación |
| 4 | :%norm A; | Adicional ; a cada línea del archivo | edición masiva |
| 5 | gi | Devuelve el último punto de inserción en el buffer actual | edición masiva |
| 6 | gv | Vuelva a seleccionar la última selección visual | edición masiva |
| 7 | Ctrl-a / Ctrl-x | Aumentar/disminuir el número debajo del cursor | edición masiva |
| 8 | g Ctrl-a | Convertir la columna del bloque visual en una secuencia creciente | edición masiva |
| 9 | "_d | Eliminar sin sobrescribir copiar scratchpad | bloc de notas |
| 10 | Ctrl-r {reg} | Pegar desde scratchpad sin salir del modo insertar | bloc de notas |
| 11 | Ctrl-r = | Habilitar registro de expresión (calculadora en línea) | bloc de notas |
| 12 | "ap → Editar → "ay | Pegar, editar y volver a extraer macros rotas | bloc de notas |
| 13 | q: | Abre una ventana de historial de comandos con capacidad de búsqueda. | Historia y búsqueda |
| 14 | q/ | Abrir la ventana del historial de búsqueda con capacidad de búsqueda | Historia y búsqueda |
| 15 | Ctrl-x Ctrl-f | Autocompletado de ruta de archivo en modo de inserción | Historia y búsqueda |
| 16 | completeopt+=fuzzy | Completar palabras en modo de inserción más inteligente (9.2+) | Wim 9.2 |
| No 17 | linematch diferencia | Alineación más precisa de líneas similares en modo diff (9.2+) | Wim 9.2 |
| 18 | Ruta de configuración XDG | Mover configuración a ~/.config/vim/vimrc (9.2+) | Wim 9.2 |
| 19 | :Tutor | Complemento tutorial interactivo que reconoce la versión (9.2+) | Wim 9.2 |
| 20 | ZZ / ZQ / :%y | Guardar y salir/Abortar y salir/Copiar el archivo completo | Micro 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-6Es 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:nnoremapb
: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,20pantes de correr:normencima 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:
giEs 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í,
10Camino – Ingrese 10 y presioneCtrl+a.3Camino – Ingrese 3 y presioneCtrl+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:substituteo:globalEs 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=fuzzyes un diferente opciones. Sólo está disponible en el menú de línea de comando (TabLa clave es:rápidamente). no tiene ningún impactoCtrl-n/Ctrl-pFinalizar.
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
| Orden | acción |
|---|---|
ZZ | Escribir en el archivo y salir (equivalente a :wq) |
ZQ | Salir sin escribir (equivale a :q!) |
:%y | Introduzca 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)
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.
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
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.
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
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.
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.
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.
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.









