Skip to content

Instantly share code, notes, and snippets.

@juanprq
Created December 14, 2019 05:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juanprq/c27a7136a8c48f89f515acb09414d4e6 to your computer and use it in GitHub Desktop.
Save juanprq/c27a7136a8c48f89f515acb09414d4e6 to your computer and use it in GitHub Desktop.

Presentación vim básico

Qué es vim?

Vim es un editor de línea de comandos existente desde 1991, sus origenes se remotan a cuando los computadores no tenian raton, es debido a esto su peculiar diseño que para los estandares de hoy nos parece bastante extraño, está pensado para editar cualquier tipo de texto y también para ser altamente configurable. Al día de hoy vim sigue siendo activamente desarrollado por la comunidad.

Curiosamente tengo la sensación que no es tan usado hoy en día, un tiempo atrás en mis inicios en el mundo del desarollo de software había una creencia y era que los programadores top en el mundo usaban vim o emacs, esto me hace plantearme las siguientes preguntas:

  • Es esta afirmación cierta?
  • Por qué un editor tan antiguo como vim sigue siendo relevante en el mundo moderno?
  • Qué nos ofrece vim que sea diferente?
  • En realidad vale la pena aprender?

Objetivos con la presentación

Mi objetivo con esta presentación es dar una noción de porque esta herramienta es relevante y que hace que sea interesante, mostrar un poco desde mi experiencia personal como fue el haber aprendido vim, como lo uso a diario y si personalmente creo que ha valido la pena.

Quiero que al final la audiencia aprenda a no tenerle miedo y que por lo menos lo empiecen a usar comodamente cuando necesiten editar cualquier archivo en un servidor y al final cerrar vim correctamente sin sufrir!

Mi experiencia con vim

  • Llevo 9 meses +- usando vim, unos 7 usandolo en mi trabajo, (Pablo Florez fue quien me hizo el daño).
  • Obviamente no soy experto, vim es una herramienta que se tarda años en masterizar, siempre hay cosas que aprender.
  • Fue una experiencia incomoda y dolorosa al principo.
  • Encontre el valor de en verdad hacer Touch Typing.
  • Aprendí con el libro Practical Vim.
  • Encontre muchas cosas interesantes que me hicieron cuestionar como editamos texto normalmente.
  • Aunque la verdad no se si vale la pena, siento que ya no puedo volver atrás.
  • Curiosamente hay plataformas como youtube y facebook que les sirven los comandos de vim (hacer pequeña demo).

Por que usar vim?

Vim es un editor que está diseñado para realizar tareas de edición de manera rapida y eficiente (la menor cantidad de teclas posible), obviamente para alcanzar esta eficiencia hay que practicar bastante, pero eventualmente se vuelve natural

Vim es un editor que tiene herramientas para realizar todo tipo de tareas (comentar, cambiar, volver mayusculas, seleccionar, cortar, pegar) y está pensado para hacerlas de manera rápida y usando solo el teclado, con un poco de práctica esto nos hace más eficientes al momento de editar código.

Es interesante que al ser vim un editor de consola, podemos abrirlo y customizarlo desde un servidor, recientemente hicimos un experimento con python en EC2 y me fue bastante cómodo usar vim desde la instancia para realizar todo el código de la aplicación (lo podemos ver como una ventaja), por ejemplo Pablo lo uso para codificar en su raspberry.

Existe una comunidad grande que está constantemente escribiendo plugins para vim, agregando funcionalidades que pueden ser útiles para nosotros, en su filosofía, vim nos alienta a customizar nuestro editor de acuerdo a sus necesidades, esto a mi en un principio me parecio como algo útopico pero con el tiempo y un poco de experimentación, me he dado cuenta que en efecto así es.

En conclusión invito a todos a que por lo menos tengan la mente abierta a todas las posibilidades que ofrece vim, yo también dudaba que vim pudiera ofrecer características como las que nos ofrece VS Code, pero cada vez estoy más convencido de que sí.

También hay plugins para VS Code que nos permiten realizar algunos de los comandos de vim, tal vez es una buena alternativa para empezar si alguien tiene curiosidad sin salir de su espacio de confort, aunque yo considero que es mejor dar el salto por completo.

Conceptos básicos de vim

Revisemos algunos conceptos básicos de vim, nada del otro mundo.

Cómo instalar vim?

Yo tengo la versión 8.1, existen otras variantes como neoVim, macVim, etc... desconozco sus diferencias, pero en escencia es lo mismo.

  • Linux: Probablemente ya este instalado, pero en un Ubuntu seria algo como: apt-get vim.
  • Mac: Si tiene Homebrew, brew install vim.
  • Windows: Descargar y doble click?? probablemente...

Modos en vim

El primer concepto que debemos tener en cuenta es que vim es un editor multi-modal, esto qué significar? significa que el editor tiene multiples modos, estos son:

  • normal: este es el modo en que vim se encuentra por defecto y donde deberíamos permanecer el mayor tiempo, para ingresar a este modo, se usa la teclar esc (alguna personas usan la tecla caps lock, yo lo hago).
  • comando: si estamos en el modo normal y queremos ejecutar un comando, como el de cerrar vim, presionamos la tecla : esto nos despliega una entrada modal en donde podremos escribir el comando (lo podemos autocompletar usando tab, ojo, es case sensible).
  • edición: este es el modo que usamos para escribir texto, existen multiples formas para ingresar a este modo, pero la manera más básica y tradicional es presionando la tecla i (minsuscula! vim es case sensible en los comandos).
  • visual: aquí seleccionamos texto, es un modo que funciona similar a cuando en un editor normal dejamos presionado la tecla shift y vamos presionando las flechas para seleccionar, en vim lo que hacemos es posicionarnos en donde necesitamos seleccionar y presionamos la tecla v, una vez nos empecemos a mover iremos seleccionando el texto requerido, para finalizar, podemos cortar el texto seleccionado por ejemplo.

Recordar que el flujo normal en vim es, estar en modo normal, entrar a el modo necesario, hacer la operación que queremos realizar (como insertar una palabra o una línea de texto) y luego presionar la tecla esc para volver al modo normal.

Mover mi cursor en vim

En vim podemos mover el cursos normalmente con las flechas del teclado, inclusive hasta con el ratón (mucha gente no lo sabe), pero no es la forma en que vim nos alienta a realizarlo, la manera convencional de navegar en vim, es usando las teclas h,j,k,l, lo se... no parece ser muy intuitivo, y al principio cuesta bastante, pero esto tiene una filosofía detrás, y es nunca mover las manos del teclado, eventualmente cuando uno se acostumbra, da mucho coraje quitar las manos para llevarlas al ratón, inclusive hacia las mismas flechas, aquí empieza a cobrar sentido todo (cuando a mi me contaban esto, no lo creia y no le daba importancia, hoy día me molesta tener que mover mis manos del teclado).

Estas son las teclas que vamos a emplear comunmente para movernos en la pantalla, si en un inicio debes aprender algunas, solo aprendan h,j,k,l, las otras se irán aprendiendo cuando se vea la necesidad.

  • h desplazamos el cursor un espacio a la izquierda.
  • j desplazamos el cursor un espacio arriba.
  • k desplazamos el cursor un espacio abajo.
  • l desplazamos el cursor un espacio a la derecha.

Con el tiempo el desplazamiento viene de manera natural, de hecho tuve problemas pensando que hacía cada una de las teclas mientras escribía esta guía, pero cuando las uso en el día a día no tengo que pensarlo, eso si, al principio cuesta bastante.

Otros comandos interesantes para despleazarnos:

  • w y W importante!, nos movemos de palabra en palabra.
  • e y E nos movemos no hasta la otra palabra si no hasta el final de la que estemos.
  • gg y G Nos lleva al inicio del archivo y final del archivo respectivamente.
  • ctrl-d y ctrl-u hacemos scroll abajo y scroll arriba.
  • H o high lleva el cursor a la primera línea visible.
  • L o low lleva el cursor a la última línea visible.
  • M o mid lleva el cursor a la línea media visible.

Insertar texto en vim

  • i y 'I' es el modo más común de insertar texto en vim, en donde está el cursor nos permite ingresar texto, esc para salir.
  • c y C se refiere a change, y es eliminar la selección y entrar en modo edición, se puede combinar con movimientos (Luego explico).
  • a y A nos pone en modo inserción en la siguiente posición a la derecha del cursor, este se puede leer como append.
  • o y O nos pone en modo insercíon en la siguiente línea.

algo curioso es que si repetimos la tecla, siempre se va a referir como si hubieramos seleccionado toda la línea, por ejemplo, si deseamos eliminar la línea actual, presionamos dd y si queremos cambiar toda la línea actual, presionamos cc.

podemos combinar comandos con numeros, y esto indicara el número de veces que lo va a repetir, por ejemplo si le doy 10dd, eliminaría 10 líneas.

Comandos básicos

  • q cierra el editor, si tenemos cambios pendientes no nos va a dejar, para forzar agregamos el simbolo ! al final.
  • w guarda el archivo actual.
  • x combina el comando de guardado y cerrado en uno solo, otra forma de combinar los comandos es wq, que sería como write and quit.
  • d y D elimina la selección.
  • x borra el caracter debajo del cursor.
  • r reemplaza el caracter debajo del cursor por el siguiente caracter que presionemos.
  • u es deshacer, normalmente deshacemos todo lo que hicimos justo antes de presionar la tecla esc, si por ejemplo agregamos una nueva palabra con i nueva palabra esc, si presionamos u deshacemos la inserción de la palabra.
  • ctrl-r rehace lo último cambio que desechamos con u.
  • . repite lo ultimo que hicimos antes de presionar esc.

Vimrc

Este archivo es importante ya que nos permite personalizar nuestro vim, allí pondremos configuración que inicializará junto con vim y nos permitirá definir todas nuestras preferencias.

El archivo en sistemas unix se puede encontrar en ~/.vimrc.

Es recomendable, empezar a aprender sin usar ninguna configuración, sin embargo voy a hacer una recomendación inicial básica que no agrega mayor funcinalidad pero si alguna utilidad.

set number
set autoread
set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
colorscheme molokai

Demo de lo que podemos lograr con vim

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment