unix - how - vi save and quit
¿Cuáles son los rincones oscuros de Vim que tu madre nunca te contó? (30)
¿Quieres mirar tu: historial de comandos?
q:
Luego navega, edita y finalmente ejecuta el comando.
¿Alguna vez ha realizado cambios similares en dos archivos y alterna entre ellos? (Diga, ¿fuente y archivos de encabezado?)
:set hidden
:map <TAB> :e#<CR>
Luego tabee hacia atrás y adelante entre esos archivos.
Hay una gran cantidad de preguntas donde las personas hablan de trucos comunes, en particular " Vim + ctags tips and tricks ".
Sin embargo, no me refiero a los atajos de uso común que alguien nuevo en Vim encontraría genial. Me refiero a un usuario experimentado de Unix (ya sean desarrolladores, administradores, ambos, etc.), que cree que saben que el 99% de nosotros nunca hemos oído ni soñado. Algo que no solo facilita su trabajo, sino que también es COOL y hackish . Después de todo, Vim reside en el sistema operativo más rico en rincones oscuros del mundo, por lo que debería tener complejidades que solo unos pocos privilegiados conocen y desean compartir con nosotros.
A menudo utilizo muchas ventanas cuando trabajo en un proyecto y, a veces, necesito cambiar su tamaño. Esto es lo que yo uso:
map + <C-W>+
map - <C-W>-
Estas asignaciones permiten aumentar y disminuir el tamaño de la ventana actual. Es bastante simple pero es rápido.
A menudo, me gusta cambiar los directorios actuales mientras edito, así que tengo que especificar menos las rutas.
cd %:h
A veces, una configuración en su .vimrc se anulará mediante un complemento o autocommand. Para depurar esto, un truco útil es usar el comando: verbose junto con: set. Por ejemplo, para averiguar dónde se configuró / desarmó cindent:
:verbose set cindent?
Esto producirá 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
Algo que acabo de descubrir recientemente que pensé que era muy bueno:
:earlier 15m
Vuelve el documento a como estaba hace 15 minutos. Puede tomar varios argumentos para la cantidad de tiempo que desea revertir y depende de los niveles bajos. Se puede invertir con el comando opuesto :later
Escribir == corregirá la sangría de la línea actual según la línea de arriba.
En realidad, puedes hacer un signo = seguido de cualquier comando de movimiento. = {movimiento}
Por ejemplo, puede usar el% de movimiento que se mueve entre llaves. Posiciona el cursor en el {en el siguiente código:
if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}
Y presiona =% para obtener instantáneamente esto:
if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}
Alternativamente, puedes hacer = a { dentro del bloque de código, en lugar de posicionarte directamente en el {carácter.
Este es un buen truco para volver a abrir el archivo actual con una codificación diferente:
:e ++enc=cp1250 %:p
Útil cuando tienes que trabajar con codificaciones legadas. Las codificaciones admitidas se enumeran en una tabla bajo encoding-values
(consulte la help
encoding-values
). Lo mismo funciona para ++ff
, por lo que puede volver a abrir el archivo con los extremos de línea de Windows / Unix si se equivoca por primera vez (consulte la help
ff
).
Las macros pueden llamar a otras macros, y también pueden llamarse a sí mismas.
p.ej:
qq0dwj@qq@q
... eliminará la primera palabra de cada línea hasta el final del archivo.
Este es un ejemplo bastante simple, pero demuestra una característica muy poderosa de vim
Me gusta usar ''sudo bash'', y mi administrador de sistemas odia esto. Cerró ''sudo'' por lo que solo se podía usar con un puñado de comandos (ls, chmod, chown, vi, etc.), pero pude usar vim para obtener una shell raíz de todos modos:
bash$ sudo vi +''silent !bash'' +q
Password: ******
root#
No es exactamente oscuro, pero hay varios comandos de "eliminar en" que son extremadamente útiles, como ...
-
diw
para borrar la palabra actual -
di(
para eliminar dentro de los parens actuales -
di"
para borrar el texto entre las comillas
Otros se pueden encontrar en :help text-objects
No es exactamente un secreto oscuro, pero me gusta poner la siguiente asignación en mi archivo .vimrc, así que puedo presionar "-" (menos) en cualquier momento para abrir el explorador de archivos para mostrar los archivos adyacentes al que acabo de editar . En el explorador de archivos, puedo golpear otro "-" para subir un directorio, proporcionando una navegación sin problemas de estructuras de directorios complejas (como las que usan los marcos MVC en la actualidad):
map - :Explore<cr>
Estos también pueden ser útiles para alguien. Me gusta desplazar la pantalla y avanzar el cursor al mismo tiempo:
map <c-j> j<c-e>
map <c-k> k<c-y>
Navegación de pestañas - Me encantan las pestañas y necesito moverme fácilmente entre ellas:
map <c-l> :tabnext<enter>
map <c-h> :tabprevious<enter>
Solo en Mac OS X: navegación con pestañas tipo Safari:
map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>
No estoy seguro de si esto cuenta como Dark-Corner-Ish en absoluto, pero acabo de aprenderlo ...
:g/match/y A
tirará (copiará) todas las líneas que contengan "coincidencias" en "a
/ @a
register. (El uso de mayúsculas como A
hace que vim agregue tirones en lugar de reemplazar el contenido del registro anterior). Lo usé mucho recientemente al hacer las hojas de estilo de Internet Explorer.
Puede que no sea una que el 99% de los usuarios de Vim no conozca, 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 en el que no tengo permisos de escritura. Cuando vengo a guardar ese archivo y obtengo un error de permiso, solo emito ese comando vim para guardar el archivo sin la necesidad de guardarlo en un archivo temporal y luego lo vuelvo a copiar.
Obviamente, tiene que estar en un sistema con sudo instalado y tener derechos de sudo.
Suponiendo que tiene compilación de Perl y / o Ruby :rubydo
y :perldo
ejecutarán una línea de Ruby o Perl en cada línea en un rango (predeterminado a todo el búfer), con $_
enlazado al texto de la línea actual (menos la nueva linea). La manipulación de $_
cambiará el texto de esa línea.
Puede usar esto para hacer ciertas cosas que son fáciles de hacer en un lenguaje de scripting pero que no son tan obvias con el uso de Vim builtins. Por ejemplo, para invertir el orden de las palabras en una línea:
:perldo $_ = join '' '', reverse split
Para insertar una cadena aleatoria de 8 caracteres (AZ) al final de cada línea:
:rubydo $_ += '' '' + (1..8).collect{(''A''..''Z'').to_a[rand 26]}.join
Está limitado a actuar en una línea a la vez y no puede agregar nuevas líneas.
Uno que rara vez encuentro en la mayoría de los tutoriales de Vim, pero es INCREÍBLEMENTE útil (al menos para mí), es el
g; and g,
para moverse (hacia adelante, hacia atrás) a través de la lista de cambios.
Déjame mostrarte 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, así que busco, salto (sin importar dónde está la coincidencia), lo copio y luego retrocedo (g;) a donde Estaba editando el código para finalmente pegarlo. No hay necesidad de crear marcas. Mas simple
Sólo mis 2cents.
Veamos un poco de editor IDE bastante pequeño hacer la transposición de columnas.
:%s//(.*/)^I/(.*/)//2^I/1/
Explicación
/(
y /)
es cómo recordar cosas en regex-land. Y /1
, /2
etc es cómo recuperar las cosas recordadas.
>>> /(.*/)^I/(.*/)
Recuerda todo seguido de ^I
(tab) seguido de todo.
>>> /2^I/1
Reemplaza lo anterior con "2do material que recuerdas" seguido de "1er material que recuerdas", esencialmente haciendo una transposición.
Vim abrirá una URL, por ejemplo
vim http://.com/
Agradable cuando necesitas extraer la fuente de una página para referencia.
:! [command]
:! [command]
ejecuta un comando externo mientras estás en Vim.
Pero agregue un punto después del colon, :.! [command]
:.! [command]
, y volcará la salida del comando en su ventana actual. Eso es : . !
: . !
Por ejemplo:
:.! ls
Lo uso mucho para cosas como agregar la fecha actual a un documento que estoy escribiendo:
:.! date
:%TOhtml
Crea una representación html del archivo actual.
^ O y ^ I
Ir a la posición más antigua / más nueva. Cuando esté moviendo a través del archivo (buscando, moviendo comandos, etc.), confirme estos "saltos", de modo que pueda repetir estos saltos hacia atrás (^ O - O para el viejo) y hacia adelante (^ I - justo al lado de I en el teclado ). Me resulta muy útil al escribir código y realizar muchas búsquedas.
soldado americano
Ir a la posición donde se detuvo el modo Insertar el último. Me encuentro a menudo editando y luego buscando algo. Para volver al lugar de edición presione gi.
gf
coloque el cursor sobre el nombre del archivo (por ejemplo, incluya el archivo del encabezado), presione gf y el archivo se abrirá
gF
similar a gf pero reconoce el formato "[nombre de archivo]: [número de línea]". Al presionar gF se abrirá [nombre de archivo] y se ajustará el cursor a [número de línea].
^ P y ^ N
Completar automáticamente el texto mientras se edita (^ P - coincidencia anterior y ^ N siguiente coincidencia)
^ X ^ L
Mientras que la edición se completa en la misma línea (útil para la programación). Usted escribe el código y luego recuerda que tiene el mismo código en algún lugar del archivo. Simplemente presione ^ X ^ L y la línea completa se completará
^ X ^ F
Nombre completo de los archivos. Escribes "/ etc / pass" Hmm. Se te olvidó el nombre del archivo. Simplemente presione ^ X ^ F y el nombre de archivo se completará
^ Z o: sh
Mover temporalmente a la cáscara. Si necesitas un golpe rápido:
- presione ^ Z (para poner vi en segundo plano) para regresar al shell original y presione fg para regresar a vim
- presione: sh para ir a sub shell y presione ^ D / exit para regresar a vi
de Eliminar todo hasta el final de la palabra presionando. en el deseo de tu corazón.
ci (xyz [Esc] : este es un extraño. Aquí, la ''i'' no significa modo de inserción. En su lugar, significa dentro del paréntesis. Así que esta secuencia corta el texto entre paréntesis en el que estás parado y lo reemplaza por "xyz". También funciona entre corchetes y figuras, simplemente haga ci [o ci {correspondiente. Naturalmente, puede hacerlo di (si solo desea borrar todo el texto sin escribir nada. También puede hacer a
lugar de i
si desea eliminar también los paréntesis y no solo el texto dentro de ellos.
ci " - corta el texto en comillas actuales
ciw - corta la palabra actual. Esto funciona igual que el anterior, excepto que (
se reemplaza con w
.
C : corte el resto de la línea y cambie al modo de inserción.
ZZ : guardar y cerrar el archivo actual (¡MANERA más rápido que Ctrl-F4 para cerrar la pestaña actual!)
ddp - mueve la línea actual una fila hacia abajo
xp - mueve el personaje actual una posición a la derecha
U - mayúscula, así que viwU
escribe en mayúsculas la palabra
~ - cambia la caja, así que viw~
invertirá la caja de toda la palabra
Ctrl + u / Ctrl + d desplazan la página media pantalla hacia arriba o hacia abajo. Esto parece ser más útil que la paginación de pantalla completa habitual, ya que hace que sea más fácil ver cómo se relacionan las dos pantallas. Para aquellos que todavía desean desplazar la pantalla completa a la vez, hay Ctrl + f para Adelante y Ctrl + b para Atrás. Ctrl + Y y Ctrl + E se desplazan hacia abajo o hacia arriba una línea a la vez.
El comando loco pero muy útil es zz : desplaza la pantalla para hacer que esta línea aparezca en el medio. Esto es excelente para poner el código en el que estás trabajando en el centro de tu atención. Los comandos de hermanos, zt y zb, hacen de esta línea la parte superior o inferior de la pantalla, que no es tan útil.
% encuentra y salta al paréntesis correspondiente.
eliminar desde el cursor hasta el final de la palabra (también puede hacer dE
para eliminar hasta el siguiente espacio)
bde - borra la palabra actual, de izquierda a derecha delimitador
df [espacio] - borra hasta e incluyendo el siguiente espacio
dt - eliminar hasta el siguiente punto
dd - borra toda esta linea
ye (o yE) - tira el texto desde aquí hasta el final de la palabra
ce - corta hasta el final de la palabra
bye - copia la palabra actual (me hace preguntarme qué hace "hola")
yy - copia la linea actual
cc - corta la línea actual, también puedes hacer S
lugar. También hay una tapa inferior que corta el carácter actual y cambia al modo de inserción.
viwy o viwc . Tirar o cambiar la palabra actual. Presione w
varias veces para seguir seleccionando cada palabra subsiguiente, use b
para retroceder
vi { - selecciona todo el texto entre corchetes. va {- selecciona todo el texto incluyendo {} s
vi (p - resalta todo dentro de () s y reemplaza con el texto pegado
b y e mueven el cursor palabra por palabra, de manera similar a como lo hacen Ctrl + Flechas normalmente . Sin embargo, la definición de palabra es un poco diferente, ya que varios delimitadores consecutivos se tratan como una sola palabra. Si comienza a la mitad de una palabra, presionar b siempre lo llevará al principio de la palabra actual, y cada b consecutiva saltará al comienzo de la siguiente palabra. De manera similar, y fácil de recordar, e
coloca el cursor hasta el final de la palabra actual y cada palabra subsiguiente.
similar a b
/ e
, mayúscula B
y E
mueven el cursor palabra por palabra usando solo espacios en blanco como delimitadores.
mayúscula D (respire profundamente) Elimina el resto de la línea a la derecha del cursor, igual que Shift + End / Del en los editores normales (observe 2 pulsaciones de tecla - Shift + D - en lugar de 3)
Mapa F5 para rápidamente ROT13 su búfer:
map <F5> ggg?G``
Puedes usarlo como una tecla de jefe :).
No es una característica oscura, pero es muy útil y ahorra tiempo.
Si desea guardar una sesión de sus buffers abiertos, pestañas, marcadores y otras configuraciones, puede emitir lo siguiente:
mksession session.vim
Puedes abrir tu sesión usando:
vim -S session.vim
Acabo de encontrar este hoy a través de NSFAQ :
Comenta los bloques de código.
Ingrese al modo Visual Blockwise presionando CTRL-V.
Marque el bloque que desea comentar.
Golpee I (mayúscula) e ingrese su cadena de comentarios al principio de la línea. (// para C ++)
Presione ESC y todas las líneas seleccionadas tendrán // al principio de la línea.
Uso vim para casi cualquier edición de texto que haga, por lo que a menudo uso copiar y pegar. El problema es que vim por defecto a menudo distorsiona el texto importado a través de pegar. La forma de detener esto es usar
:set paste
Antes de pegar en sus datos. Esto evitará que se estropee.
Tenga en cuenta que tendrá que emitir :set nopaste
para recuperar la sangría automática. Las formas alternativas de pegar texto preformateado son los registros del portapapeles ( *
y +
), y :r!cat
(deberá terminar el fragmento pegado con ^ D).
A veces también es útil activar un esquema de color de alto contraste. Esto se puede hacer con
:color blue
Me he dado cuenta de que no funciona en todas las versiones de vim que utilizo, pero sí en la mayoría.
" insert range ip''s
"
" ( O O )
" =======oOO=(_)==OOo======
:for i in range(1,255) | .put=''10.0.0.''.i | endfor
:%!xxd
Hacer vim en un editor hexadecimal.
:%!xxd -r
Revertir.
Advertencia: si no edita con binario (-b), podría dañar el archivo. - Josh Lee en los comentarios.
:r! <command>
pega la salida de un comando externo en el búfer.
Haz algunos cálculos y obtén el resultado directamente en el texto:
:r! echo $((3 + 5 + 8))
Obtenga la lista de archivos para compilar al escribir un Makefile:
:r! ls *.c
No busque ese hecho que leyó en wikipedia, pídalo directamente en el documento que está escribiendo:
:r! lynx -dump http://en.wikipedia.org/wiki/Whatever
gv
Vuelve a seleccionar la última selección visual.
imap jj <esc>