¿Cuáles son los comandos / pulsaciones de teclas de vim más utilizados?

112

Soy un programador Ruby que intenta cambiar de Textmate a MacVim, y tengo problemas para recorrer las gigantescas listas de cosas que puede hacer en VIM y todas las pulsaciones de teclas para ellas. Estoy cansado de escuchar "Puedes usar 'I' para insertar texto, o 'a' para agregar texto después del carácter, o 'A' para agregar texto al final de la línea, o ..." No puedo imaginar todos usan las 20 pulsaciones de teclas diferentes para navegar por el texto, unas 10 teclas para comenzar a agregar texto y 18 formas de seleccionar visualmente un bloque interno. ¿¡O tú !?

Mi hoja de trucos ideal serían las 30-40 pulsaciones de teclas o comandos más utilizados que todos usan para escribir código a diario, junto con los complementos absolutamente esenciales que los rubyists usan a diario y los 10 comandos más utilizados para ellos. En teoría, una vez que tenga eso y empiece a ser tan competente en VIM como en Textmate, entonces puedo empezar a aprender los miles de otros comandos de VIM que me harán más eficiente.

¿O estoy aprendiendo VIM de forma totalmente incorrecta?

Clinton
fuente
9
Referencia obligatoria a cafepress.com/geekcheat.11507711 .
geekosaur
1
Reetiquetado para eliminar 'ruby' y agregar 'atajos de teclado'. Parece más apropiado.
"¿Estoy aprendiendo Vim de la manera incorrecta?" - No, solo necesitas comenzar con algunos conceptos básicos y recuerda que todavía vas a aprender más comandos dentro de un año. ¡Quizás algún día realmente uses todos los comandos! Pero nadie los usa todos desde el primer día.
Cascabel

Respuestas:

306

Aquí hay una hoja de consejos que escribí una vez, con los comandos que realmente uso con regularidad:

Referencias

General

  • Casi todos los comandos pueden ir precedidos de un número para un recuento de repetición. p.ej. 5dd eliminar 5 líneas
  • <Esc> te saca de cualquier modo y vuelve al modo de comando
  • Los comandos precedidos por : se ejecutan en la línea de comando en la parte inferior de la pantalla
  • : ayuda ayuda con cualquier comando

Navegación

  • Movimiento del cursor: ← hjk l →
  • Por palabras:
    • w siguiente palabra (por puntuación); W siguiente palabra (por espacios)
    • b palabra de atrás (por puntuación); B palabra posterior (por espacios)
    • e palabra final (por puntuación); E palabra final (por espacios)
  • Nombre del autor:
    • 0 inicio de línea; ^ primer espacio no en blanco
    • $ fin de línea
  • Por párrafo:
    • { línea en blanco anterior; } siguiente línea en blanco
  • Por archivo:
    • gg inicio de archivo; G al final del archivo
    • 123G ir al número de línea específico
  • Por marcador:
    • mx establecer marca x ; 'x ve a marcar x
    • '. ir a la posición de la última edición
    • '' volver al último punto antes de saltar
  • Desplazamiento:
    • ^ F avanzar a pantalla completa; ^ B pantalla completa hacia atrás
    • ^ D hacia abajo la mitad de la pantalla; ^ U hasta media pantalla
    • ^ E desplazarse una línea hacia arriba; ^ Y desplazarse una línea hacia abajo
    • línea del cursor central zz

Edición

  • U deshacer; ^ R rehacer
  • . repetir el último comando de edición

Insertar

Todos los comandos de inserción terminan con <Esc>para volver al modo de comando.

  • i insertar texto en el cursor; I Insertar texto en el arranque de la línea
  • un texto de agregación después del cursor; Un texto append después del final de la línea
  • o abra una nueva línea a continuación; O abre una nueva línea arriba

Cambiando

  • r reemplazar un solo carácter; R reemplaza varios personajes
  • s cambiar un solo carácter
  • cw cambiar palabra; C cambio al final de la línea; cc cambiar toda la línea
  • c<motion> cambia el texto en la dirección del movimiento
  • ci ( cambiar entre paréntesis (ver selección de objetos de texto para más ejemplos)

Eliminando

  • x eliminar char
  • dw borrar palabra; D borrar hasta el final de la línea; dd eliminar toda la línea
  • d<motion> borra en la dirección del movimiento

Cortar y pegar

  • yy copiar la línea en el búfer de pegado; dd cortar línea en tampón de pasta
  • p pegar búfer debajo de la línea del cursor; P pega búfer sobre la línea del cursor
  • xp intercambia dos caracteres ( x para eliminar un carácter, luego p para volver a colocarlo después de la posición del cursor)

Bloques

  • v flujo de bloque visual; V línea de bloqueo visual; ^ V columna de bloque visual
    • la mayoría de los comandos de movimiento extienden el bloque a la nueva posición del cursor
    • o mueve el cursor al otro extremo del bloque
  • d o x bloque de corte en un tampón de pasta
  • y copiar el bloque en el búfer de pegado
  • > bloque de sangría; < bloque sin sangría
  • gv volver a seleccionar el último bloque visual

Global

  • :% s / foo / bar / g sustituye todas las apariciones de "foo" por "bar"
    • % es un rango que indica cada línea del archivo
    • / g es una bandera que cambia todas las ocurrencias en una línea en lugar de solo la primera

buscando

  • / buscar hacia adelante; ? buscar hacia atrás
  • * buscar hacia adelante la palabra debajo del cursor; # buscar hacia atrás la palabra debajo del cursor
  • n próximo partido en la misma dirección; norte próximo partido en dirección opuesta
  • fx adelante al siguiente carácter x ; Fx hacia atrás al carácter anterior x
  • ; mover de nuevo al mismo personaje en la misma dirección; , muévete de nuevo al mismo personaje en dirección opuesta

Archivos

  • : w escribir archivo en disco
  • : wname escribe el archivo en el disco comoname
  • ZZ escribe el archivo en el disco y sale
  • : n editar un archivo nuevo; :¡norte! editar un nuevo archivo sin guardar los cambios actuales
  • : q dejar de editar un archivo; : q! dejar de editar sin guardar los cambios
  • : e editar el mismo archivo de nuevo (si se cambia fuera de vim)
  • : e. explorador de directorios

Ventanas

  • ^ Wn nueva ventana
  • ^ Wj hacia abajo a la siguiente ventana; ^ Wk hasta la ventana anterior
  • ^ W_ maximizar la ventana actual; ^ W = hacer que todas las ventanas tengan el mismo tamaño
  • ^ W + aumentar el tamaño de la ventana; ^ W- reducir el tamaño de la ventana

Navegación de fuente

  • % salto a paréntesis / corchete / llave coincidentes, o bloque de idioma si el módulo de idioma está cargado
  • gd vaya a la definición del símbolo local bajo el cursor; ^ O volver a la posición anterior
  • ^] saltar a la definición de símbolo global (requiere tagsarchivo); ^ T volver a la posición anterior (se mantiene una pila arbitraria de posiciones)
  • ^ N (en modo de inserción) finalización automática de palabras

Mostrar cambios locales

Vim tiene algunas características que facilitan el resaltado de líneas que se han cambiado desde una versión base en el control de código fuente. He creado un pequeño script vim que facilita esto: http://github.com/ghewgill/vim-scmdiff

Greg Hewgill
fuente
1
+1 Relativamente mínimo, aunque debo admitir que no me encuentro usando ningún comando de ventana o navegando con nada más que las teclas de flecha / pageup / pagedown / home / end y gg / G. Ah, y para la navegación por el número de línea también puede usar: 123 (modo de comando).
2
Bonita hoja de trucos. Agregaría ^ w ^ w para recorrer las ventanas,: x en lugar de ZZ para mayor coherencia, tx adelante antes del carácter y Tx hacia atrás.
romainl
Debo señalar que esto es solo lo básico de lo que uso. Creé esta lista como una herramienta para enseñar vim a otras personas. Utilizo muchos otros comandos con menos frecuencia y también tengo varios alias y macros configurados para ayudarme a usar vim de manera más efectiva.
Greg Hewgill
2
Si desea evitar la Escclave (¿y RSI?), Puede usar ^[. ^ctambién funciona (pero no amplía las abreviaturas). Fuente: vim.wikia.com/wiki/Avoid_the_escape_key
Lian
22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Esto es lo más grandioso que he aprendido en VIM.

Justin Thomas
fuente
Nunca había visto esto antes, una referencia genial para después de saber lo que hacen los comandos.
amccormack
3
Sin embargo, la parte "gráfica" es inútil si no tienes un teclado qwerty.
Romainl
5
Me sorprende que publicar un enlace (que ya ha sido publicado hasta la muerte por cierto) atrae tanta atención mientras se hace un esfuerzo adicional que otros carteles ponen no ...
Lieven Keersmaekers
El claro ganador en las publicaciones de vim: stackoverflow.com/questions/1218390/…
Justin Thomas
4

¿Has repasado el tutorial integrado de Vim? De lo contrario, vaya a la línea de comandos y escriba vimtutor. Es una excelente manera de aprender los comandos iniciales.

Vim tiene una increíble cantidad de flexibilidad y potencia y, si eres como la mayoría de los usuarios de vim, aprenderás muchos comandos nuevos y te olvidarás de los antiguos, y luego los volverás a aprender. La ayuda incorporada es buena y digna de una navegación periódica para aprender cosas nuevas.

Hay varias buenas preguntas frecuentes y hojas de trucos para vim en Internet. Recomiendo buscar vim + faqy vim + cheatsheet. Cheat-Sheets.org # vim es una buena fuente, al igual que la wiki de Vim Tips .

el hombre de hojalata
fuente
Me acabo de enterar y afortunadamente viene instalado en una Mac. Probándolo ahora (a la 1 a. M.…)
Clinton
He estado usando vim durante mucho tiempo y es una de las primeras cosas que instalo en una máquina. MacVim , en Mac OS, es muy bueno. Tiendo a compilar vim desde la fuente en la mayoría de las cajas de Linux que uso, simplemente porque la mayoría de las distribuciones no están actualizadas o no tienen el soporte de idioma configurado correctamente. Tengo una versión actual de mi ~/.vimrc, ~/.gvimrcy el ~/.vimdirectorio en una tar-ball para cuando tenga que montar algo. Copiar eso y extraer los archivos me permite ejecutar vim con todos mis comandos y esquemas de colores habituales en minutos en Windows, Macs y Linux.
The Tin Man
3

Lo que muchos hacen es empezar con lo básico lo básico, tal como i, yw, yy, y p. Puede continuar usando las teclas de flecha para moverse, seleccionar texto con el mouse, usar los menús, etc. Luego, cuando algo lo está frenando, busca la forma más rápida de hacerlo y gradualmente agrega más y más comandos. Puede aprender un nuevo comando por día durante un tiempo, luego pasará a uno por semana. Te sentirás bastante productivo en un mes. Después de un año tendrás un repertorio bastante sólido, y después de 2-3 años ni siquiera pensarás conscientemente lo que escriben tus dedos, y se verá extraño si tienes que deletrearlo para alguien. Aprendí vi en 1993 y todavía aprendo 2 o 3 nuevos comandos al año.

Karl Bielefeldt
fuente
3

La hoja de trucos de @Greg Hewgill es muy buena. Comencé mi cambio de TextMate hace unos meses. Ahora soy tan productivo como lo era con TM y constantemente me sorprende el poder de Vim.

Así es como cambié . Quizás te pueda ser útil.

Grosso modo, no creo que sea una buena idea hacer un cambio radical. Vim es muy diferente y lo mejor es ir progresivamente.

Y para responder a su subpregunta, sí, uso todos los iaIAoOdías para ingresar al modo de inserción. Ciertamente parece extraño al principio, pero realmente no lo piensas después de un tiempo.

Algunos comandos increíblemente útiles para cualquier tarea relacionada con la programación:

  • ry Rpara reemplazar personajes
  • <C-a>y <C-x>aumentar y disminuir el número
  • citpara cambiar el contenido de una etiqueta HTML, y sus variantes ( cat, dit, dat, ci(, etc.)
  • <C-x><C-o>(asignado a ,,) para omnicompleción
  • selección de bloque visual con <C-v>
  • y así…

Una vez que esté acostumbrado a la forma de Vim, se vuelve realmente difícil no presionar oo xtodo el tiempo al editar texto en algún otro editor o campo de texto.

romainl
fuente
2

No puedo imaginar que todos usen las 20 pulsaciones de teclas diferentes para navegar por el texto, 10 o más teclas para comenzar a agregar texto y 18 formas de seleccionar visualmente un bloque interno. ¿¡O tú !?

Hago.

En teoría, una vez que tenga eso y empiece a ser tan competente en VIM como en Textmate, entonces puedo empezar a aprender los miles de otros comandos de VIM que me harán más eficiente.

Esa es la forma correcta de hacerlo. Comience con comandos básicos y luego elija los que mejoren su productividad. Me gusta seguir este blog para obtener consejos sobre cómo mejorar mi productividad con vim.

Jeff
fuente
2

tuxfiles.org tiene una muy buena hoja de trucos. Creo que hay un par de puntos para aprender los comandos:

  • Lea la hoja de trucos con regularidad. No se preocupe por usarlos todos o recordar todas las claves, solo sepa que el comando existe. Busque el comando y utilícelo cuando se encuentre haciendo algo repetitivo.
  • Si se encuentra haciendo algo con regularidad (como eliminar una línea completa después de un carácter en particular d$), realice una búsqueda rápida en Google para ver si puede encontrar un comando para ello.
  • Escriba los comandos que crea que le resultarán útiles y mantenga esa lista donde pueda verla mientras escribe su código. Yo argumentaría en contra de imprimir algo y, en su lugar, lo animo a usar notas post-it para solo algunos comandos a la vez.
  • Si es posible, observe a otros programadores usar vim y pregúnteles qué comandos están usando cuando vea que hacen algo interesante.

Además de estos consejos, hay algunos conceptos básicos que debe comprender.

  • vim usará el mismo carácter para representar la misma función. Por ejemplo, para eliminar una línea después del uso de un carácter d$. Para resaltar una línea después de un uso de carácter particular v$. Así que observe que $indica que estará haciendo algo hasta el final de la línea desde donde se encuentra actualmente el cursor.
  • ues deshacer y ctrl+rrehacer.
  • poner un número delante de un comando lo ejecutará repetidamente. 3ddeliminará la línea en la que se encuentra el cursor y las dos líneas que siguen, de manera similar 3yycopiará la línea en la que se encuentra el cursor y las dos líneas que siguen.
  • entender cómo navegar a través de las memorias intermedias usan :lspara enumerar los tampones y :bn, :bppara pasar por ellos.
  • lea el tutorial que se encuentra en:help Esta es probablemente la mejor manera de "aprender a manejar" y el resto de los comandos que aprenderá a través del uso.
amccormack
fuente
2

Ponga esto en su .bashrc para abrir vim con el último archivo editado en la última línea editada

alias vil="vim  +\"'\"0"
modesto
fuente
1

Vaya a Edición eficiente con vim y aprenda lo que necesita para comenzar. No todo en esa página es esencial para empezar, así que elige lo que quieras.

A partir de ahí, usa vim para todo. "hjkl", "y" y "p" le ayudarán mucho, incluso si no es la forma más eficiente. Cuando te encuentres con una tarea para la que no conoces la clave mágica para hacerlo de manera eficiente (o en absoluto), y te encuentras haciéndola más de unas pocas veces, búscala. Poco a poco se convertirá en una segunda naturaleza.

Encontré vim desalentador hace muchas lunas (cuando no tenía la "m" al final), pero solo tomó alrededor de una semana de uso constante para volverse eficiente. Todavía lo encuentro el editor más rápido para hacer las cosas.

mikestew
fuente
El enlace a "Edición eficiente con vim" ya no está disponible. Creo que se puede encontrar una alternativa en robertames.com/files/vim-editing.html
Damian Powell