Rocco Di Tella

Vim

Bueno, por qué vim? Desde ahora le voy a decir vim a NeoVIM. Vim es un editor de texto muy liviano y muy configurable. Lo principal que está bueno de vim es que tiene muchos atajos en el teclado y hace muy fácil hacer atajos nuevos. Parece poco, pero esto nos deja hacer todo desde el teclado, nos deja movernos muy rápido por nuestros archivos sin necesidad del mouse.

No es super fácil acostumbrarse a cómo se usa de forma básica, pero tampoco lleva más que unos días.

Ese sistema de atajos es al que accedemos siempre que en VScode, Overleaf o Google Colab tildamos en los settings "vim mode". Una forma razonable de empezar a usar vim es con el vim mode de su actual editor de texto, hasta que se acostumbren a cómo son los movimientos.

Modos

Lo más distinto de vim a como usamos un editor de texto normalmente, es pensar que tiene modos. Todos los modos existen en los editores que están acostumbrados, sólo que no los pensamos como modos.

Hay 4 modos:

  • Normal Mode
  • Insert Mode
  • Visual Mode
  • Command Mode

Normal Mode

Normal Mode es el modo en el que van a querer estar en general. La tecla para entrar a Normal Mode es esc y es tan práctico estar siempre en Normal mode que es muy común y muy recomendable hacer que caps lock sea escape. Esta recomendación la hago muy fuertemente. Hacelo ahora.

En normal mode cada tecla hace un comando específico. La analogía a otros editores es como si estuviesen apretando la tecla ctrl. Cuando tenés apretado ctrl, p imprime, s guarda, c copia, v pega, etc.

Con ctrl apretado, en word o VScode, cada tecla hace una función. En vim, cuando estás en normal mode, cada la tecla es un comando distinto. Esta es la parte que puede ser más confusa. Si estás en normal mode, las teclas no escriben, las teclas son comandos. Lo interesante es que las combinaciones de teclas también son comandos, entonces hay muchas cosas que se pueden hacer desde acá.

Lo más básico de normal mode es usar hjkl para moverse en distintas direcciones (como harías con las flechitas).

  k
h   l
  j

Insert Mode

Insert mode es muy fácil de entender. Cuando estás en insert mode, cada tecla escribe su letra. Nada más para agregar.

Cuando estás en normal mode, la tecla i entra a insert mode. La lógica de que en general queramos estar en normal mode es que cuando trabajamos en código, es más común querer editar que sólo escribir.

Visual Mode

Este también es muy simple. La analogía es a cuando en otro editor arrastrás el mouse para seleccionar texto (o con shift). Visual mode es muy parecido a normal mode. Por ejemplo, si estás parado al final de una oración y apretás v (de visual), entrás a visual mode con un caracter highlighteado. Si empezás a apretar h varias veces, va a ir pintando hacia la izquierda. Una vez que tenés seleccionado el texto que querés podés copiar(y), pegar(p), borrar(d), etc.

Command Mode

En normal mode, apretar : te deja poner comandos. Por ejemplo, guardar (write) es un comando estando en normal mode poner :write guarda tu archivo. También funciona :w. Para cerrar vim, :q.

Una cosa interesante más, si ponés :! lo que venga después es un comando para la terminal. Por ejemplo :!python3 % es esquivalente a poner python3 {nombre del archivo} en la terminal.

Vim Motions

La referencia para esta parte es esta serie de videos de ThePrimeagen. En particular, los primeros 3 videos (son de 10 min c/u).

También recomiendo jugar un rato al snake con vim bindings, porque hjkl es pura memoria muscular.

Voy a listar algunos keymaps que recomiendo saber: (siempre asumiendo que empezás en normal mode)

Movimientos

  k
h   l
  j
Para mover el cursor.
  • w (word) es ir una palabra para adelante

  • b (back) es ir una palabra para atrás

  • Combinación de números y comandos para repetir. Por ejemplo: 8j baja 8 líneas.

  • gg va hasta arriba de todo

  • G va hasta abajo de todo

Escribir

  • i entra a insert mode en el caracter en el que estás parado

  • a entra a insert mode a la derecha del caracter en el que estás parado

  • I (shift + i) entra a insert mode al principio de la línea en la que estás parado

  • A (shift + i) entra a insert mode al final de la línea en la que estás parado

Muchas veces la opción mayúscula de un comando es lo mismo pero "más". Cuando pongo I es lo mismo que pensar shift + i

Esta es otra razón para poner escape donde está caps lock. Querés ir muy seguido a normal mode, entonces escape es muy útil y si no te das cuenta y apretaste caps lock va a hacer V en vez de v o A en vez de A

  • o crea una new line abajo y entra en insert

  • O crea una new line arriba y entra en insert

  • u es undo

  • ctrl + r es redo (yo recomiendo el plugin undo tree en vez de usar esto)

  • I (shift + i) entra a insert mode al principio de la línea en la que estás parado

  • A (shift + i) entra a insert mode al final de la línea en la que estás parado

Visual Mode

  • v entra a visual mode

  • V entra en visual mode para toda la línea.

  • s Borra lo que esté seleccionado y entra en insert mode

En visual mode,

  • U (uppercase) pasa todo a mayúsculas

  • u pasa todo a minúsculas

(más razones para no necesitar caps lock!)

Combinaciones

  • y copia

  • p pega

  • d borra

Se pueden combinar los comandos:

  • V d selecciona la línea y después borra (no hay que tocar a la vez, es en secuencia)

  • V 3j d selecciona desde la línea en la que estás, baja 3 y después borra

  • d i w (delete in word) borra la palabra en la que estás parado

  • d i ) (delete in ')') borra todo lo que está dentro de unos paréntesis

  • d i " (delete in ' " ') borra todo lo que está dentro de comillas

  • y i ) (yank in ')') copia todo lo que está dentro de unos paréntesis

  • v i ) (visual in ')') selecciona todo lo que está dentro de los paréntesis

  • v i ) s selecciona entre paréntesis, borra y entra en insert mode (es el mismo efecto que hacer c i ))

Búsqueda

  • / es el buscador (como ctrl find en otros lados)
    • /hola para buscar hola. Hay que apretar enter para empezar a buscar y con n vas a la siguiente aparición y con N volvés a la anterior.

Para hacer search and replace podés hacer así:

  • Seleccionás el área donde querés hacer search and replace (visual mode)

  • : (entrás a command mode)

  • s/hola/chau/g escribís todo eso. substitute hola por chau global. (si no ponés /g, sólo se va a aplicar al primer hola de cada línea)

Si querés hacerlo para todo el documento, sin pasar por visual mode, es así

  • :%s/hola/chau/g

También hay plugins que lo hace más fácil, pero todo lo que dijimos acá sirve en el vim mode de VScode u Overleaf o lo que fuere.

Vim, the editor

[Me queda pendiente poner algo sobre como configurar los plugins y el editor vim propiamente dicho]

En principio, mi recomendación es usar este setup: kickstart.nvim

La forma más básica de tener ese setup andando es correr en la terminal

sudo apt-get install ripgrep

(necesitamos la dependencia ripgrep, así se instala en ubuntu)

git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim

Esto pone el init.lua de kickstart en ~/.config/nvim

Una vez que corriste esas dos líneas, ya anda decentemente bien nvim.