Nota: La mejor forma para aprender Vim es practicándolo, no intentes memorizar todos los comandos de golpe, sino incorpóralos progresivamente y ve mecanizándolos poco a poco.
Porqué Vim
- Ligero
- Super personalizable
- Ergonómico, con los atajos de teclado puedes trabajar muy rápido y cómodo
- Muy poderoso: infinidad de opciones que no tendrás en otros editores
- Escalable: puedes editar un simple archivo de 50 líneas o todo un proyecto con miles de archivos.
Niveles de poder en Vim
No sé, pero creo que es curioso e interesante mencionarlos:
- No saber Vim
- Vim básico
- Usar el modo visual
- Usar varios movimientos
- No usar el modo visual
La ayuda de Vim
Otra increíble característica de Vim es su maravillosa documentación y manual
de ayuda. De forma offline y sin salir del editor, puedes buscar lo que
necesites saber gracias al comando :help
o :h
.
En la documentación habrá unas etiquetas que funcionarán como enlaces en una
página web. Estas están entre |
, pero se esconden cuando el resaltado de
sintaxis está activado. Para seguir el enlace usa <C-]>
(o buscar ayuda
sobre donde está el cursor) y para regresar <C-o>
.
Si no estás seguro de lo que estás buscando, puedes autocompletar el contenido
del comando :help
con <C-d>
, que te mostrará todas las etiquetas
relacionadas.
Para navegar más rápido entre las distintas secciones de la documentación, usa
gO
para mostrar la tabla de contenidos, y usa enter para moverte a cada
una de ellas.
Consejos de búsqueda
'foo'
: opción de configuración del editor (también puedes mirar enoptions.txt
o enoption-list
para una breve descripción de todas ellas).foo
: comando a buscar para modo normal (o una tag directamente, si no encuentra nada)i_foo
: comando del modo insertv_foo
: comando del modo visualc_foo
: comando del modo command line:foo
: comando del modo ex, es decir, un comando del editor>foo
: comando a buscar para debugging-foo
: opción a buscar de CLI (argumentos de consola de cuando inicias Vim)+foo
: opción a buscar optativaE<número> W<número>
: buscar un error, advertencia
Comandos de búsqueda para el manual de usuario:
- Tabla de contenidos en
usr_toc.txt
:help 10.1
: ir directamente a la sección y capítulo dado
Alternativamente puedes usar :helpg <patrón>
, que busca en todos los archivos
de la ayuda, no solamente en las etiquetas. Para ver el siguiente match usa
:cnext
o :cn
; y el anterior con :cprevious
o :cp
. También puedes abrir
todos los resultados en una ventana aparte con :cwindow
o :copen
.
:helpg Foo
: case sensitive:helpg foo\c
: case insensitive:helpg foo@es
: buscar la ayuda en español
Estructura de la ayuda
La ayuda de Vim consiste en dos partes:
Manual de usuario, que se debería leer como un libro; ya que introduce progresivamente los diferentes conceptos del editor, de sencillo a complejo. Está orientado a las tareas a realizar.
La referencia, donde se explica todo Vim detalladamente; comandos, configuración, como funciona, etc.
En lugar de leer tanto texto al comenzar (¡aburridooo!), puedes usar la guia
interactiva que proporciona Vim: el Vim Tutor. Es un tutorial de unos 30
minutos que te enseñará lo más básico. Ejecútalo con :Tutor
.
La página principal de la ayuda está en help.txt
, a la que puedes acceder
simplemente con el comando :help
, :h
o :help help.txt
. Esta es el índice
para el resto de elementos de la ayuda, ya que contiene todos los enlaces a los
demás archivos, incluyendo (al final de todo) la documentación de cada plugin a
mayores que instales. Encontrarás un link a la página y su tema principal.
En la página index.txt
se muestran todos los comandos (por defecto) del
editor, con una breve descripción y un link para más información. Es buena
idea consultar esta página cuando creas tu configuración y cambias los atajos,
ya que podrías estar inhabilitando otros comandos útiles. Si no quieres ver
absolutamente todos, y que habrá algunos que en tu vida usarás, ve a
quickref.txt
.
En el apartado de key-notation
, puedes obtener más información de como Vim
representa las diferentes teclas que puedes usar para los comandos. En este
post estoy usando esa notación. Para escribir teclas más rápidamente puedes
usar (en command mode) <C-v>
y la tecla deseada.
Entendiendo la edición modal
Vim es un editor modal, lo que quiere decir que existen diferentes modos de funcionamiento y comportamiento dependiendo en qué modo te encuentres.
El modo normal donde pasarás la mayor parte del tiempo ya que aquí están los principales comandos de movimiento y sirve de transición hacia los otros modos. Toda tecla que pulses se tomará como un comando, no para escribir texto.
Para hacer esto último, debes acceder al modo insert presionando la tecla i
.
Ahora podrás escribir texto como en otros editores.
También existe el replace mode, al que se accede con R
, y hace exactamente
lo que dice: reemplazar el carácter actual por el nuevo que escribas.
El modo visual se inicia al hacer una selección de texto con v
,
permitiéndote operar con él. Este modo selecciona carácter por carácter, pero
existen los modos visual line (V
), que selecciona líneas enteras, y visual
block (<C-v>
), selección en bloque o por columnas. A partir de estas
selecciones, podemos hacer cambios solamente en el texto seleccionado con otros
comandos.
Paralelamente existe el select mode (accesible con gh gH g<C-h>
-go highlight-, y con <C-g>
alternas a/desde visual mode), muy similar al
visual mode, pero en cambio se comporta de forma similar a los programas de
edición de texto de Windows: seleccionas texto y al comenzar a escribir se
sustituye el texto.
Nota: al sustituir el texto seleccionado al comenzar a escribir algo,
h j k l
dejan de funcionar y solo puedes usar las flechas del teclado. Si configuras las flechas a otras acciones, este modo resulta inútil. Además, se puede simular su funcionamiento desde visual mode, por lo que no es un modo esencial.
El modo terminal emula una consola de comandos que puedes utilizar dentro del
propio editor, sin necesidad de cerrarlo. Para salir al modo normal, presiona
<C-\><C-n>
.
El modo cmd o command line mode es el usado cuando escribes commandos Ex :
,
patrones de búsqueda / ?
y filtros !
.
En todos estos modos (excepto el normal mode) se te indicará en cual de ellos
te encuentras abajo de todo de la pantalla. En el caso del command line mode,
estarás escribiendo en ese espacio. Y para regresar al modo normal usa la tecla
Escape (<Esc>
) (excepto en terminal mode).
Para describir en qué modo se está ejecutando determinado comando, se añade <char>_
antes de la notación de las teclas:
i_
: insertv_
: visualc_
: command: normal, no hayn_
: terminal, no hayt_
Vim como lenguaje
A partir de ahora, los comandos que aparecen listados se ejecutarán desde el modo normal a menos que se diga lo contrario.
Realmente, los comandos en Vim pueden entenderse como un lenguaje por sí mismo, así que cuando empieces a pensar en este lenguaje, podrás entender mucho mejor el editor. Se diferencian en operadores, movimientos/nombres y modificadores (hay quien les llama preposiciones). Combinándolos podrás crear las frases de este lenguaje para describir los cambios que quieras en tu archivo de texto.
Para leer sobre estos en la ayuda de Vim busca
:h motion
:h operador
:h aw
(continua leyendo las siguientes entradas en este último), recomendable en este orden.
Operadores: son los verbos del lenguaje de Vim, realizan acciones; y estos dependen del modo en el que te encuentres.
c
: cambiar (change), es decir, borrar e iniciar insert moded
: borrar (delete)y
: copiar (yank)p
: pegar (paste)
Movimientos / Nombres: estos se pueden usar tanto como para mover el cursor, como ser los objetos a los que realizar las acciones. Por ejemplo, puedo moverme una palabra y entonces considera un movimiento. En cambio puedo usar un operador para borrar y combinarlo con un movimiento de palabra. En este caso, yo lo considero un nombre, ya que está describiendo dónde el operador tiene que actuar. Pero ojo, no todos los operadores necesitan un nombre, pero sí la mayoría de ellos.
h j k l
: carácter a la izquierda/abajo/arriba/derecha. De esta forma no tienes que mover los dedos del teclado hacia las flechas. Para recordarlo piensa laj
como una flecha hacia abajo, yh
-l
están a la derecha-izquierda respectivamente.w
: palabra (word)0 ^ $
: inicio/primer carácter no blanco/fin de línea; similares a<Home> <End>
f<char> F<char>
: hasta encontrar el carácter dado avanzando/retrocediendo (find)t<char> f<char>
: hasta el carácter dado y se detiene antes avanzando/retrocediendo (’til)
También, por norma general, al no haber ningún nombre para la línea; se repite
el mismo operador para aplicarlo en la línea actual. Además, la versión en
mayúscula del operador es sinónimo de combinarlo con $
: D
=d$
, C
=c$
…
Nota: Todos los movimientos son nombres, pero no todos los nombres son movimientos.
Modificadores (opcional)
<número>
para repetir la acción. Se puede aplicar tanto a operadores como a movimientos y nombres.i
: interno (inner)a
: un (a); por ejemplo:caw
change a word (cambia una palabra). A diferencia dei
, que solo afecta al nombre;a
incluye el espacio que lo separa del siguiente.
Estes dos últimos solo se pueden aplicar a nombres.
Bonus:
- Vim también ofrece la posibilidad de forzar con
v V <C-v>
a forma de modificador, para que un nombre se interprete carácter por carácter, línea a línea, o en forma de bloque; a diferencia de su forma normal. Por ejemplo:
1dj ---> borra 2 líneas
2dvj ---> borra desde el cursor hasta el carácter de debajo
3d<C-v>j ---> igual que antes pero incluyendo el carácter inicial
Construyendo frases (con ejemplos)
Borrar dos palabras:
1d2w / 2dw
Cambiar (es decir, borrar y entrar en insert mode) la palabra en la que se encuentra el cursor:
1ciw
Y de forma similar sucede para movernos, por ejemplo bajar 10 líneas:
110j
Como no tenemos un modificador de línea, se repite la acción (ojo: ¡dj
borra dos líneas!):
1dd ---> borra la línea actual
2yy ---> copia la línea actual
3cc ---> cambia la línea actual: la borra y entra en insert mode
Los modificadores también se pueden añadir al insert mode:
13ihola ---> holaholahola
Insert mode
Entrar al insert mode:
i a
: antes/después del cursorI A
: principio/final de la línea sin contar los espaciosgI
: principio de la líneao O
: nueva línea debajo/arribaea
: insertar después de palabragi
: volver al insert mode en el último lugar donde se estuvo en este modo (marca'^
)
Comandos especiales en insert mode
<C-o>
: permite ejecutar un comando en normal mode para después regresar a insert mode<C-k>
: insertar un dígrafo, es decir, tildes. E.g:<C-k>~n
=ñ
,<C-k>'a
=á
<C-t> <C-d>
: identar
Insertar texto ya insertado:
<C-e> <C-y>
: insertar carácter abajo/arriba del cursor<C-a> <C-@>
: inserta el texto previamente insertado/y vuelve a normal mode
El comando <C-x>
activa un submodo dentro del insert mode, permitiendo
realizar más acciones, normalmente relacionadas con el autocompletado. Esos
comandos se tratarán en su respectivo apartado, pero <C-x><C-e> <C-x><C-y>
se
puede usar para mover la ventana una línea hacia abajo, arriba; teniendo en
cuenta que el cursor no puede salir de la ventana ni desplazarse.
Operaciones con registros:
<C-r><id>
: insertar el contenido del registro dado- El registro
=
es especial, ya que te permite ejecutar expresiones de VimScript: operaciones aritméticas, leer variables de entorno, registros y condicionales con el operador ternario de C (:h 41.3
) <C-r><C-r><id>
: inserta contenido del registro
Borrar:
<C-w>
: borrar la palabra anterior (bw
)<C-u>
: borrar hasta el principio de línea (d0
)
Curiosidades dentro de insert mode:
<Tab>
=<C-i>
<Enter>
=<NL>
=<CR>
=<C-j>
=<C-m>
Operadores
u <C-r>
: deshacer/rehacer (los cambios se guardan en la changelist, que la puedes ver con:changes
)g, g;
: ir a la primera/última posición de dicha lista.
: repite el último comando realizado
Reemplazar:
r<nuevo_char>
: remplazar el carácter debajo del cursor y volver al modo normal (replace)c<nombre>
: cambiar (change), es decir, borrar y entrar en insert mode.s
=cl
, pensado para usar como<número>s
S
=cc
Eliminar texto, o más bien, cortarlo; ya que todo lo que borremos se almacenará:
x
: carácter (exterminate)d<nombre>
: eliminar (delete)
Copiar y pegar:
y<nombre>
: copiar (yank)p P
: pegar antes/después (paste)
Formatear texto:
J
: juntar con la línea siguiente (join)<< >>
: identargq gw
: formatear el texto/sin mover el cursor
El formateado del último comando se hace utilizando el contenido de las
opciones 'formatexp'
(expresión) y 'formatprg'
(programa externo). En en
caso de que ambas opciones estén vacías, el formateado se realizará con un
programa interno de Vim, teniendo en cuenta 'textwidth'
y 'formatoptions
(ver :h fo-table
).
Mayúsculas y minúsculas:
g~
: cambiar de mayúsculas a minúsculas y viceversagU
: cambiar todo a mayúsculasgu
: cambiar todo a minúsculas- visual
U
: cambiar todo a mayúsculas - visual
u
: cambiar todo a minúsculas
Seleccionar
v<nombre>
: iniciar modo visualV
: iniciar modo visual line<C-v>
: iniciar modo visual blockgv
: recuperar el modo visual anterioro O
: moverse al otro lado de la selección (solo modo visual)
Los operadores funcionan diferente en este modo: en lugar de requerir un nombre, se tomarán los caracteres marcados como el propio nombre de la operación.
u U ~
: minúsculas/mayúsculas/alternarx d
: cortarc
: cambiary
: copiar< >
: identargq
: formatear
Movimientos y nombres
Aparte de los movimientos ya comentados (a continuación, para recordar), existen muchos otros.
h j k l
w
0 ^ $
f<char> F<char>
t<char> f<char>
<C-g> g<C-g>
: muestra tu posición en el archivo actual
¡Más comandos!:
H M L
: arriba, centro, abajo de la pantalla (High - Medium - Low)+ -
: bajar, subir una línea; pero poniendo el cursor en el primer carácter no blanco
Movimientos que también pueden ser nombres
En primer lugar encontramos los movimientos relacionados con las palabras. Vim separa las palabras con determinados caracteres, pero si quieres que sea una palabra estricta, es decir solamente separada por espacios (saltándose la puntuación), usa la versión en mayúscula.
w
: siguiente palabra (único de esta lista que puede llevar los modificadoresi a
)e
: final de palabra siguienteb
: principio de palabra anteriorge
: final de la palabra anterior
Después, puedes desplazarte entre diferentes frases con ( )
. Vim las separa
con .
, !
o ?
(inclusive). Una frase también termina cuando lo haga el
párrafo.
Para moverte entre párrafos usa { }
, y estos se consideran pedazos de texto
separados por líneas en blanco (o con caracteres en blanco). También puedes
interpretarlo como hacer un salto hasta la siguiente línea vacía.
1¡Hola! Este es un ejemplo
2de párrafo según Vim.
3
4Y este es otro párrafo
5de ejemplo, para que veas
6como debes separarlos.
Por último, si te quieres desplazar entre bloques de paréntesis o llaves,
puedes usar [( ])
y [{ ]}
respectivamente. Ten en cuenta que irá a por el
paréntesis o llave que no esté cerrado. Mira este ejemplo:
Si te encuentras dentro del bloque 2 y realizas [{
, el cursor se desplazará a
la llave que tiene el comentario y dice ser el bloque 2. En cambio, si estás
fuera del bloque 2 pero en dentro del bloque 1, se moverá entre las llaves de
la primera y última línea.
Estos últimos movimientos, ( ) { } [{ ...
, pueden usarse también como nombres, siempre y
cuando no se usen con los modificadores i a
, ya que se confundirían con los
siguientes.
Nombres exclusivos con modificador
Es decir, nombres que no pueden ser movimientos; y dado que se confunden con
los movimientos normales, y por lo tanto deben ir acompañados siempre de un
modificador: i a
.
s
: frase (sentence). Equivalente al movimiento con( )
p
: párrafo (paragraph). Equivalente al movimiento con{ }
( ) b
: paréntesis (brackets). Equivalente al movimiento con[( ])
{ } B
: llaves (curly brackets). Equivalente al movimiento con[{ ]}
[ ]
: corchetes (square brackets)< >
: entre signos de<
y>
(angular brackets)t
: entre etiquetas de XML/HTML (tag) (<xxx>...</xxx>
)`
" '
: entre comillas simples, dobles, o tildes graves
Para esclarecer un poco estos últimos, puede que sea necesario ver algunos ejemplos:
dip
: borra el párrafo actuald}
: borra hasta el final del párrafodi{
odiB
: borra el contenido entre{ }
di"
: borra el interior de las comillasda"
: borra el contenido de las comillas, estas inclusive
Movimientos de Scroll
Movimientos de scroll, es decir, que mueven el contenido de la ventana y no el cursor (el cursor debe de estar siempre en la ventana, así como consecuencia del movimiento también es posible que se ajuste para que continue dentro). Al no ser movimientos del cursor no se pueden usar como nombres y combinar con operadores.
zz
: centrar cursor en la pantalla<C-e> <C-y>
: moverse una línea abajo/arriba (extra lines/???)<C-d> <C-u>
: moverse media pantalla (Down/Up)<C-f> <C-b>
: moverse una pantalla abajo/arriba (forward/backwards)
Moverse cuando hay líneas cortadas (es decir, wrap=false
):
z<Right> zl z<Left> zh
: mover la pantalla a la derecha/izquierda una columna/carácterzL zH
: mover media pantalla a la derecha/izquierda
Más en scroll.txt
.
También, cuando hay líneas que no aparecen completas horizontalmente en la ventana, podemos movernos cómodamente:
gj gk
: bajar/subir una línea visible y no real (línea cortada vs línea real del archivo)g0 g^ g$
: igual que con los comandos anteriores pero yendo al principio/primer carácter no blanco/final de línea
Ir a
%
: la pareja de ( ), [ ], { }, /* */, o incluso #if #elif #else #endif…<number>gg <number>G
: número de líneagg G
: inicio/final del archivogf gF
: ir al archivo debajo del cursor/en determinada línea (usa la variable'path'
para buscar los archivos)gx
: abrir URLgd gD
: ir a la declaración local/global
Buscar
Estos comandos también funcionan como movimientos y nombres.
Buscan en la misma línea:
f<char>
: en la misma líneaF<char>
: en la misma línea detrást<char>
: 1 posición antes dechar
; ,
: siguiente/anteriorchar
en la búsqueda
Multilínea:
/<patrón> ?<patrón>
: realiza una búsqueda en todo el archivo y se desplaza al primer match desde el cursor hacia delante, hacia atrásn N
: repite la búsqueda anterior/al revés* #
: realiza una búsqueda con/ ?
usando como patrón la palabra debajo del cursorg* g#
: igual que* #
pero elimina\< \>
, es decir, búsqueda parcial
Marcas
Sirven como una especie de marcapáginas: se colocan en determinadas posiciones de un archivo, para posteriormente regresar a ellas con un simple comando.
m<id>
: establece una marca en la posición del cursor- `
<id> '<id>
: regresa a la marca/regresa al primer carácter no blanco de la línea marcada
El identificador o nombre de las marcas será una letra:
Si es minúscula solo corresponderá al archivo actual, y se borrarán con el buffer, también si borras la línea en donde está la marca. Se pueden usar como movimientos/nombres.
Pero si es mayúscula funciona a través archivos, ya que incluyen el nombre del archivo a la hora de recordar la marca. Estas se mantienen aunque se borre la línea de la marca o el buffer.
Hay algunas marcas ya establecidas:
Las que se llaman números no se pueden establecer directamente, sino que recuerdan las posiciones en donde estuviste al cerrar Vim.
'0
es la última posición en el que lo cerraste,'1
la penúltima, etc.'[ ']
: recuerdan el primer y último carácter de texto editado o copiado'< '>
: recuerdan el primer y último carácter de texto seleccionado''
: recuerda la posición anterior a un salto o donde se hizom'
'"
: recuerda la última posición del cursor antes de salir del buffer (individual para cada buffer)'^
: recuerda la última posición del cursor al salir de insert mode (se usa para el comandogi
)
Con el comando :marks
puedes listar todas las marcas actuales, y con
delm[arks] <id>
borrarlas (solo a-zA-Z0-9).
Cada uno de los saltos que realices, se guardarán en la jump list (cuyo
contenido puedes ver con :jumps
o :ju
) y los comandos <C-o>
y <C-i>
te
permitirán regresar a un salto anterior o posterior respectivamente.
Los movimientos de siguientes comandos se añadirán a la lista:
gg G { } ( ) [{ ]} [[ ]] H M L % :tag <C-t> <C-]>
TODO: Yo personalmente uso mucho los movimientos de
{ }
, y es muy molesto que esos también se consideren saltos, ya que me llena la lista con saltos inútiles cuando realmente quería conservar otro salto; como ir al principio del archivo, búsqueda, etc.Supongo que hasta encontrar una solución usaré
<C-d> <C-u>
Comandos Ex
Buffers, ventanas y pestañas
- Un buffer es el texto cargado en la memoria de un archivo.
- Una ventana es un viewport (representación gráfica) de un buffer
- Una pestaña es una colección de ventanas
Si quieres conservar la configuración actual de buffers, ventanas, opciones…
Puedes usar el comando :mks[ession] [<nombre-archivo>]
, que crea un archivo de
VimScript que vuelve a configurar el editor. Cárgalo con :source <nombre-archivo>
.
Buffers
Puedes listar los buffers activos con el comando :buffers
: el primer número
es su id, luego están los estados en los que se encuentra y el archivo al que
corresponde.
Un buffer puede tener estar en los siguientes estados:
Estado | ¿Cargado en memoria? | ¿Aparece en una ventana? | :buffers muestra… |
---|---|---|---|
active | Sí | Sí | a |
hidden | Sí | No | h |
inactive | No | No |
|
También hay otros tipos de indicadores, aparte de los del estado, y pueden aparecer varios de ellos juntos:
u
: unlisted, solo aparece cuando se ejecuta:buffers!
%
: buffer actual#
: buffer alternativo, al que se puede cambiar con<C-^>
o:e #
+
: buffer modificado-
:'modificable'=false
=
: solo lecturaR
: terminal ejecutando una tareaF
: terminal ha terminado la tarea?
: terminal sin tareax
: errores de lectura
Tipos especiales de buffers, que se consiguen combinando sus estados:
- quickfix: se usa para contener la lista de errores o de contenidos (ver
:h cwindow
y:h lwindow
) - help: contiene los manuales de ayuda
- terminal: el contenido no se puede cambiar o leer hasta que el trabajo termine
- directory: contenido de una carpeta, usado por plugins (
buftype=nowrite; bufhidden=delete; noswapfile
) - scratch: texto que no se guarda y puede ser descartado; hay que borrarlo explícitamente (
buftype=nofile; bufhidden=hide; noswapfile
) - unlisted: no aparece en la lista de buffers (
nobuflisted
)
Nota: estas opciones se describen con
:setlocal
::setlocal buftype=nofile
Comandos para moverse entre buffers:
:b[uffer] <id>
: moverse al buffer en concreto dado el id:bn[ext] :bp[revious]
: moverse entre los distintos buffers de la lista (buffer next, buffer previous):bf[irst] :bl[ast]
: moverse al primer/último buffer de la lista:bm[odified]
: moverse al buffer anterior modificado (con cambios sin guardar)
Abrir en una nueva ventana horizontal:
:ball
: editar todos los buffers a la vez:sb[buffer] <id>
:sbn[ext] :sbp[revious]
:sbf[irst] :sbl[ast]
:sbm[odified]
: igual que los comandos del apartado anterior, pero se abre en una nueva ventana (split buffer …)
Borrar buffers:
:bdel[ete] [<id>]
: elimina el buffer actual (si no se le ha dado el id) de memoria y la lista de buffers:bw[ipeout] [<id>]
: igual que el comando anterior, pero realmente borra el buffer, todas las marcas relacionadas, etc. No usar a menos que sepas lo que haces.
Hay más comandos que puedes usar en la ayuda: :h buffer-list
.
Ventanas
No hay una forma de listar las ventanas activas, pero no es necesario, ya que se ven a simple vista.
Existen dos tipos de ventanas: split es una ventana que aparece en horizontal respecto a otra; y vertical split que es una ventana que aparece en vertical.
Estos comandos se ejecutan desde el normal mode, precedidos por
<C-w>
Abrir y cerrar ventanas
s
: abrir nueva ventana horizontalmente (split)v
: abrir nueva ventana verticalmente (vertical split)n
: abrir una nueva ventana horizontalmente con un nuevo archivo (new)q c
: cerrar ventana (quit, close) (conq
, si es la última, cierra Vim)o
: cerrar todas las ventanas menos la actual (only)
Moverse entre ventanas
<Left> <Down> <Up> <Right>
: moverse a la ventana inmediatamente a la izquierda/abajo/arriba/derechah j k l
=<Left> <Down> <Up> <Right>
t b
: moverse a la ventana más arriba a la izquierda/abajo a la derecha (top-left, bottom-right)p
: moverse a la última ventana visitada (previous)P
: moverse a la ventana de previsualización (preview)w W
: moverse a la ventana siguiente counterclockwise/clockwise
Mover ventanas
r R
: rotar ventanas hacia abajo/derecha arriba/izquierdax:
cambiar (exchange) por la siguienteH J K L
: mover a la izquierda/abajo/arriba/derecha lo máximo posibleT
: mover a una nueva pestaña
Cambiar de tamaño
=
: mismo tamaño- +
: más alta/baja< >
: más ancha/delgada
Comandos Ex para las ventanas
winc <argumento>
=<C-w><argumento>
:vs[plit] [<archivo>]
=<C-w>v
:sp[plit] [<archivo>]
=<C-w>s
:n[ew] [<archivo>]
=<C-w>n
:vne[w] [<archivo>]
: abrir una nueva ventana verticalmente con un nuevo archivo:sv[iew] [<archivo>]
: split de solo lectura:sf[ind] [<archivo>]
: split del archivo, buscado como en el comando:f[ind]
Pestañas
La pestañas aparecerán listadas en la parte superior.
Moverse entre pestañas:
gt :tabn
gT :tabp
: siguiente/anterior pestaña<C-Tab> g<Tab>
: alternar entre las últimas pestañas visitadas
Abrir y cerrar pestañas:
:tab <comando>
: abre una nueva pestaña ejecutando el comando dado:tabn[ew] :tabe[dit] <archivo>
: edita en una nueva pestaña el archivo dado:tabf[ind] <archivo>
: encuentra el archivo dado (como con:find
) y lo edita en una nueva pestaña:tabc[lose]
: cierra la pestaña:tabo[nly]
: cierra todas las pestañas menos la actual
Mover pestañas con :tabm [+-]<num>
.
Otras funcionalidades
Rangos
Patrones de búsqueda
magic
: algunos caracteres dentro de un patrón se toman literalmente; pero si
se preceden con una barra invertida (\
), actúan como caracteres especiales con
un significado diferente (TODO: regex).
Por ejemplo: a
se refiere al carácter a
, mientras que \a
se refiere a
cualquier carácter alfanumérico.
Otros casos: .
se refiere a cualquier carácter, mientras que \.
, se refiere
a un .
literalmente.
\m = magic \M = nomagic
\v todos los caracteres ASCII menos 0-9a-zA-Z y _ tienen valor especial (very magic)
\V solo los caracteres precedidos de \
tienen significado especial (very nomagic)
smartcase
pattern | matches |
---|---|
word | word, Word, WORD… |
Word | Word |
WORD | WORD |
WoRd | WoRd |
Sustituir
El comando :s
permite sustituir texto usando patrones. Aquí está una versión
completa de todas sus funciones:
1[<rango>]s[ubstitude]/<patrón-a-buscar>/<string-con-la-que-sustituir>/[<opciones>]
Opciones:
\c
: ignore case\C
: match case
Registros
Cuando eliminamos texto, realmente no lo estamos eliminando, sino cortando. Dicho texto queda almacenado en los registros (automáticamente nombrados del 0 al 9, al menos que no se especifique uno manualmente), para que puedas volver a utilizarlo o pegarlo en otro lugar.
Para ver el contenido de tus registros usa :reg
"<id><comando>
: usar el registro"a-zA-Z
: registros del usuario""
: registro sin nombre (por defecto)"<0-9>
: historial del registro sin nombre (0 más nuevo, 9 más viejo)
Registros que no guardan nada (para evitar que se sobreescriban otros registros. Útil para plugins):
"_
: registro agujero negro (no se guarda)"-
: según la ayuda:
This register contains text from commands that delete less than one line, except when the command specifies a register with [“x].
Registros read-only:
".
: último texto insertado":
: último comando ex"%
: dirección relativa al archivo actual"#
: otra dirección de archivo extraña. No creo que la uses
Desplegables
Más información en :help fold.txt
zf
: crear un desplegable en función de un movimiento/nombre o líneas seleccionadas en visual modezd zD zE
: eliminar desplegable, recursivamente, todos en la ventana actualzo zO
: abrir el desplegable, recursivamentezc zC
: cerrar el desplegable, recursivamenteza zA
: alternar entre abrir y cerrar el desplegable, recursivamente
Macros
Autocompletado
Corrección de ortografía
Plugins
Netrw
Este es un plugin que viene preinstalado en NeoVim, y permite mostrar archivos tanto locales como remotos a través de SSH, etc.
:Ex
: abrir Netwr:Lex [<size>]
: abrir Netwr a la izquierda:Tex
: abrir Netwr en una nueva pestañai
: cambiar display (lista, árbol, columnas, etc)I
: esconder/mostrar la cabezera de informacióngh
: esconder/mostrar dotfiles<Enter>
: abrir el archivo-
: ir a la carpeta superiorp
: previsualizar archivo<C-w>z :pc :pclose
: cerrar previsualizaciónv
: abrir en una división vertical%
: crear archivo en la carpeta actual (da un nombre)<Del> D
: borrar el archivo debajo del cursord
: crear una carpeta (da un nombre)R
: renombrars
: cambiar orden (nombre, fecha, tamaño)