Pregunta ¿Cuáles son los rincones oscuros de Vim que tu madre nunca te contó? [cerrado]


Hay una plétora de preguntas donde la gente habla de trucos comunes, notablemente "Vim + ctags consejos y trucos".

Sin embargo, no me refiero a los atajos comúnmente utilizados que alguien nuevo en Vim encontraría genial. Estoy hablando de un usuario experimentado de Unix (ya sea un desarrollador, administrador, ambos, etc.), que cree saber algo que el 99% de nosotros nunca había escuchado o soñado. Algo que no solo hace su trabajo más fácil, sino que también es COOL y hackish. Después de todo, Empuje reside en el sistema operativo más oscuro del mundo, por lo que debería tener complejidades que solo unos pocos privilegiados conocen y desean compartir con nosotros.


756


origen


Respuestas:


Puede que no sea uno que el 99% de los usuarios de Vim desconozca, pero es algo que uso a diario y que cualquier usuario de Linux + Vim debe saber.

Comando básico, pero extremadamente útil.

:w !sudo tee %

A menudo me olvido de sudo antes de editar un archivo, no tengo permisos de escritura. Cuando llegué a guardar ese archivo y obtener un error de permiso, simplemente emite ese comando vim para guardar el archivo sin la necesidad de guardarlo en un archivo temporal y luego copiarlo de nuevo.

Obviamente tienes que estar en un sistema con sudo instalado y tener derechos de sudo.


746



Algo que acabo de descubrir recientemente que pensé que era genial:

:earlier 15m

Revierte el documento a cómo era hace 15 minutos. Puede tomar varios argumentos para la cantidad de tiempo que desea revertir, y depende de los niveles incorrectos. Se puede revertir con el comando opuesto :later


581



:! [command] ejecuta un comando externo mientras estás en Vim.

Pero agrega un punto después de los dos puntos, :.! [command]y va a volcar la salida del comando en su ventana actual. Eso es : . ! 

Por ejemplo:

:.! ls

Lo uso mucho para cosas como agregar la fecha actual en un documento que estoy escribiendo:

:.! date

385



No es exactamente oscuro, pero hay varios comandos de "eliminar en" que son extremadamente útiles, como ...

  • diw para eliminar la palabra actual
  • di( para eliminar dentro de los parens actuales
  • di" para eliminar el texto entre las comillas

Otros se pueden encontrar en :help text-objects


299



Delaware Borre todo hasta el final de la palabra presionando. en el deseo de tu corazón.

ci (xyz [Esc] - Esta es una extraña. Aquí, la 'i' no significa insertar modo. En cambio, significa dentro del paréntesis. Entonces esta secuencia corta el texto dentro del paréntesis en el que está parado y lo reemplaza con "xyz". También funciona dentro de los corchetes cuadrados y figurados: simplemente haz ci [o ci {correspondientemente. Naturalmente, puedes hacer di (si solo quieres borrar todo el texto sin escribir nada. También puedes hacer a en lugar de i si desea eliminar también los paréntesis y no solo el texto dentro de ellos.

ci " - corta el texto en citas actuales

ciw - corta la palabra actual. Esto funciona igual que el anterior excepto que ( es reemplazado por w.

do - cortar el resto de la línea y cambiar al modo insertar.

ZZ - guardar y cerrar el archivo actual (¡MUCHO más rápido que Ctrl-F4 para cerrar la pestaña actual!)

ddp - mover la línea actual una fila hacia abajo

xp - mueve el personaje actual una posición hacia la derecha

U - mayúsculas, entonces viwU upercases la palabra

~ - Cambia la carcasa, por lo viw~ invertirá la carcasa de la palabra completa

Ctrl + u / Ctrl + d desplaza hacia arriba o hacia abajo la mitad de la pantalla de la página. Esto parece ser más útil que el paginado de pantalla completa habitual, ya que facilita ver cómo se relacionan las dos pantallas. Para aquellos que aún desean desplazarse por la pantalla completa a la vez, hay Ctrl + f para Adelante y Ctrl + b para Atrás. Ctrl + Y y Ctrl + E desplazarse hacia abajo o hacia arriba una línea a la vez.

Comando loco pero muy útil es zz - desplaza la pantalla para hacer que esta línea aparezca en el centro. Esto es excelente para poner la pieza de código en la que está trabajando en el centro de su atención. Los comandos de hermanos - zt y zb - hacen que esta línea sea la superior o la inferior en el sreen, lo que no es tan útil.

% encuentra y salta al paréntesis correspondiente.

Delaware - eliminar del cursor al final de la palabra (también puede hacer dE para eliminar hasta el siguiente espacio)

bde - eliminar la palabra actual, de izquierda a derecha delimitador

df [espacio] - eliminar hasta e incluyendo el siguiente espacio

dt. - eliminar hasta el próximo punto

dd - borrar toda esta línea

ye (o yE) - tira de texto desde aquí hasta el final de la palabra

ce - corta hasta el final de la palabra

adiós - copia la palabra actual (me hace preguntarme qué es "hola")

yy - copia la línea actual

cc - corta la línea actual, también puedes hacer S en lugar. También hay una tapa más baja s que corta el carácter actual y cambia al modo de inserción.

viwy o viwc. Yank o cambiar la palabra actual. Golpear w varias veces para seguir seleccionando cada palabra siguiente, use b moverse hacia atrás

vi { - selecciona todo el texto entre corchetes. va {- selecciona todo el texto incluyendo {} s

VIP - resaltar todo dentro de () sy reemplazar con el texto pegado

b y e mueven el cursor palabra por palabra, de forma similar a cómo las flechas Ctrl + normalmente lo hacen. Sin embargo, la definición de la palabra es un poco diferente, ya que varias eliminaciones consecutivas se tratan como una sola palabra. Si comienza a la mitad de una palabra, presionar b siempre lo llevará al comienzo de la palabra actual, y cada b consecutiva saltará al principio de la siguiente palabra. Del mismo modo, y fácil de recordar, e lleva el cursor al final de la palabra actual, y cada palabra subsecuente.

Similar a b/e, capital B y E mueve el cursor palabra por palabra usando solo espacios en blanco como delimitadores.

capital D (respira profundo) Elimina el resto de la línea a la derecha del cursor, al igual que Mayús + Fin / Supr en editores normales (observe 2 pulsaciones de tecla - Mayús + D - en lugar de 3)


225



Uno que rara vez encuentro en la mayoría de los tutoriales de Vim, pero INCREÍBLEMENTE es útil (al menos para mí), es el

g; and g,

para avanzar (hacia adelante, hacia atrás) a través de la lista de cambios.

Déjame mostrar cómo lo uso. A veces necesito copiar y pegar un fragmento de código o cadena, digamos un código de color hexadecimal en un archivo CSS, por lo que busco, salto (sin importar dónde está el fósforo), lo copio y luego salto atrás (g;) hacia donde Estaba editando el código para finalmente pegarlo. No es necesario crear marcas. Más simple.

Solo mis 2cents.


193



:%!xxd

Haz que vim sea un editor hexadecimal.

:%!xxd -r

Revertir.

Advertencia: si no edita con binario (-b), podría dañar el archivo. - Josh Lee en los comentarios.


182



gv

Vuelve a seleccionar la última selección visual.


116



Algunas veces, una configuración en su .vimrc será anulada por un complemento o autocomando. Para solucionar esto, un truco útil es usar el comando: verbose junto con: set. Por ejemplo, para descubrir dónde se configuró / desarmó el dispositivo cindent:

:verbose set cindent?

Esto dará como resultado algo como:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

Esto también funciona con mapas y puntos destacados. (Gracias joeytwiddle por señalar esto.) Por ejemplo:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim

113



No estoy seguro si esto cuenta como oscuro-esquina-ish en absoluto, pero acabo de aprenderlo ...

:g/match/y A

tirará (copiará) todas las líneas que contienen "coincidencia" en el "a/@a registro. (La capitalización como A hace vim adjuntar yankings en lugar de reemplazar el contenido anterior del registro.) Lo usé mucho recientemente al hacer las hojas de estilo de Internet Explorer.


97



:%TOhtml

Crea una representación html del archivo actual.


92