NeoVim/Vim, apuntes para el uso del editor de consola

Vim y neovim son editores de consola muy versatiles, pero al ser bastante antiguo tiene sus peculiaridades, una de ellas es que está diseñado para usarse solamente con el teclado, es más, como los teclados antiguos no poseían las teclas de cursor se usaban otras teclas para moverse entre el texto. Esto hace que para emplearlo eficazmente puedes ser bastante tedioso para un usuario acostumbrado al teclado y al ratón. Sabiendo esto me cree una pequeña chuletas para conocer los atajos de teclado y el funcionamiento básico.

Como ventaja tenemos que al no necesitar mover las manos del teclado mejoramos, en teoría, la velocidad de edicción.

Cursor movimiento

TeclaAcciónMemotécnica
h, j, k, lmoverse izquierda, abajo, arriba, derecha respectivamentej es como una flecha abajo
wsaltar al principio de palabra (la puntuación se considera palabra)word
Wsaltar palabras (los espacios saltan las palabras separate words)Word
eir al final de las palabras (la puntuación se considera palabra)end
Eir al final de las palabras (la puntuacin no se considera palabra)End
bsaltar palabras hacia atras (incluida puntacin)backwards
Bsaltar palabras hacia atr s (no incluir punctuation)Backwards
0(cero) comienzo de linea0 es el inicio
^primer caracter que no sea espacio en una linea^ es siempre principio
$fin de linea$ es siempre fin
Gir al comando (prefijo numeral - 5G va a la linea 5)Go

Nota: El prefijo en un comando de cursor de movimiento lo repite. Ejemplo, 4j mueve abajo 4 lineas.

TeclaAcciónMemotécnica
ggir al principiod de documento
Gir al final del documento
4Gir a la linea 4

Insertar (Modo) - Insertar/Añadir texto

TeclaAcciónMemotécnica
iinsertar en la posición del cursorinsert
Iinsertar a principio lineaInsert
aañadir detrás del cursoadd
Aañadir a final de la líneaAdd
oañadir (open) linea en blanco bajo linea acutalOpen line
Oañadir (open) linea en blaco sobre linea actualOpen line
eaañaidr al final de la palabraend append
Escsalir de insert modeEsc siempre sale

Editar (Modo)

TeclaAcciónMemotécnica
rreemplazar un solo caracter sin hacer insert modereplace
June linea de abajo con la actualJoin
cccambia (reemplaza) una linea completachange
cwcambia (reemplaza) hasta el final de una palabrachange word
c$cambia (reemplaza) hasta el final de la lineachange end
sborrar caracter bajo el cursor y sustituye textosuprime
Sborrar linea bajo el cursor y sustituye texto (igual que cc)Suprime
xptrasponer dos letras (borrar y pegar, tecnicamente)trasXPose
udeshacerundo
.repite el ultimo comando

Marcado de texto (visual mode)

TeclaAcciónMemotécnica
vvisual mode, marca lineas y luego un comando (como y - yank)visual
Vvisual mode, comenzando con lineaVisual
omueve a otro final de area marcadaother
Ctrl+vvisual modo de bloquevisual block
Omove to Other corner of block
awmark a word
aba () block (with braces)
aBa {} block (with brackets)
ibinner () block
iBinner {} block
Escexit visual modeEsc para salir

Visual comandos

TeclaAcciónMemotécnica
>tabula a la derecha
<tabula a la izquierda
yyank (copy) el texto marcadoyank
dborra el texto marcadodelete
~switch case

Copiar y pegar

TeclaAcciónMemotécnica
yyyank (copy) a lineyank
2yyyank 2 lines2 yank
ywyank wordyank word
y$yank to end of lineyank $ = end of line
ppega (paste) el contenido del clipboard después del cursorput
Ppega (paste) antes del cursorPut
ddborra (cut) una lineadelete
d$borra hasta el final de una líneadelete $ = end of line
dwborra (cut) una palabradelete word
xcorta (cut) el caracter actualx como cortar

Nota: es posible combinar un número con el operador de forma que si pulso 4 y luego la d borro 4 caracteres, y también mezclar operadores de movimiento si pulso d para borrar y luego w de palabra borro la palabra completa. Ej.- elminar 6 palabra d6w (o 6dw) borra seis palabras

Moverse entre archivos

TeclaAcciónMemotécnica
gdir a la definicióngo to definition
gfir a la funcióngo to function

Saliendo

TeclaAcciónMemotécnica
:wgraba (save) el archivo, pero sin salirwrite
:wqgraba (save) y salewrite quit
:qsale (falla si algo ha cambiado)quit
:q!sale y quita todos los cambiosquit

Buscar/Remplazar

TeclaAcciónMemotécnica
/patternbusca un patron
?patternbuscan un patron al inverso
nrepite busqueda en la misma dirección
Nrepite busqueda en dirección opuesta
:%s/old/new/greemplaza lo viejo con lo nuevo a través del archivo
:%s/old/new/gcr reemplaza lo viejo con lo nuevo a través del archivo con confirmaciones

Trabajando con multiples archivos

TeclaAcciónMemotécnica
:e filenameEditar un archivo en un nuevo bufferedit
:bnext (or :bn)ir a un nuevo buffer
:bprev (of :bp)ir al buffer anterior
:bdborrar un (cerrar archivo)
:sp filenameAbrir un archivo en nuevo buffer y dividir ventana
ctrl+wsdividir ventanawindow split
ctrl+wwcambiar entre ventanaswindows sWitch
ctrl+wqcerrar ventanawindows quit
ctrl+wvdividir ventana verticalmentewindows split Verticaly

Config base vim

Crear un .vimrc en $HOME

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax on		" activate vim syntax coloring
set number		" enable numbers 'set nu' for short
set ru			" enable row numbers
set mouse=a		" allow cursor movement by clicking
" set expandtab		" use spaces instead of tabs
set smarttab		" be smart when using tabs 
set shiftwidth=4	" set (1 tab == 4 spaces)
" set tabstop=4

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Indentation
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set autoindent		" enable autoindent 'set ai' for short
set si			" smart indent
set wrap		" enable lines wrapping
" set cindent		" enable c lang indent
set tabstop=4		" this enable vscode format like alignement