Vim

¿Por qué Vim?

  1. Primero porque no requiere de mouse
  2. Está en todos los sistemas Unix (mac/linux)
  3. La configuración de Vim es portátil
  4. Es muy personalizable y extensible
  5. Funciona a través de Telnet y las conexiones SSH
  6. Es capaz de ejecutar comandos externos

IMPORTANTE: VIM ES SOLO PARA LOS QUE DOMINAN LA MECANOGRAFIA

Funcionamiento de Vim

Los Modos de Vim

Vim es un editor modal, dependiendo del modo en que se encuentra al presionar una tecla el programa hace una cosa o otra.

Esto permite movernos, editar, corregir, añadir texto, etc., hacer todas las operaciones que necesitemos en un documento de texto sin mover nuestras manos del teclado

Modo Normal

Cuando abrimos el programa se inicia en este modo

En este modo las teclas en vez de ingresar el carácter que le corresponde ejecutan un comando.

Modo Edición

En el usamos el teclado para introducir texto como lo hacemos habitualmente

Para volver de nuevo al modo normal debes pulsar la tecla ESC

Modo Línea de Comando

En este modo ingresamos comandos en la línea de comandos

Trabajar con ficheros

Modo Visual

El modo visual de Vim permite realizar selecciones de texto.

Una vez echas éstas, podremos copiar, cortar y pegar

también podemos copiar y pegar desde programas externos usando el portapapeles normal del sistema operativo, aunque en ese caso se recomienda activar el modo "paste"

Comandos en modo Visual

Resumen de Comandos

Se puede considerar que estos comandos

Comando para borrar

comando de inserción para escribir texto

para navegar por el documento o mover el cursor.

comandos desahcer o rehacer

Buscar una palabra.

Reemplazar un texto

Comandos para mover líneas

Copiar y Pegar

Plegar (Code Folding)

Marcadores (Bookmark)

Macros

Imprimir

Insertar texto de otro fichero

Nota con la tecla . (punto) se repite la última modificación que hayamos realizado.

Ficheros, Buffers, Ventanas y Pestañas

Al iniciar Vim podemos abrir varios ficheros a la vez simplemente separando sus nombres por un espacio: $ vim file1 file2 ... filen, o con vim *.txt, etc. Cada uno de ellos se cargará en un buffer independiente

pestañas para editar varios ficheros

divisiones de ventanas que permiten ver distintas partes de un fichero

Además nos permite guardar las sesiones de edición. Esto incluye opciones usadas: pestañas, archivos cargados en las pestañas, y subdivisiones creadas dentro de cada pestaña, pudiendo recuperarlas en cualquier momento.

proyectos

Es posible abrir cada uno de los ficheros en una pestaña

crear subdivisiones para ver varias partes de un fichero al mismo tiempo.

Trabajando con HTML/XML

  • dit => delete inside tags
  • cit => change inside tags
  • yit => copy (yank) indide tags
  • vit => visual select inside tags

Copiar y Pegar

  • yyp => remenber it with "yipee!"
  • y7yp => multiple lines a number in between
  • "ayy =&ht; this will store the line in buffer a
  • hola

Emmet-vim

Instalación y Configuración

Para usar la tecla TAB en vez de CTRL+y+, podemos usar La solución propuesta aquí, que consiste en colocar la siguiente línea en nuestro .vimrc

imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>")

Plugins de emmet. Existe un tutorial en su página de github

Solución de Problemas

Como principiante tal vez cometamos el error de presionar Ctrl+S lo que causa que se bloque el terminal, la solución es presionar nuevamente Ctrl+q para tomar de nuevo el control. Para evitar que esto ocurra debemos editar ~/bash_profile o ~/.bashrc y escribir: stty -ixon. El tema se explica aquí

Programando

Comandos para Programar

:make Compilar o comprobar errores
Ejecuta make desde el directorio donde lanzamos Vim y si hay algún error salta directamente a él. Se puede configurar para que ejecute el pychecker o el pylint
gd Salta a declaración o primera aparición del simbólo bajo el cursor
} ó { Ir al siguiente/previo bloque de sentencias
w ó b Ir a la Siguiente/Anterior palabra, pero de acuerdo a cada lenguaje
ci' ó ci" Elimina el texto entre comillas y queda en modo de inserción para sustituírlo
vi' ó vi" Selecciona el texto entre comillas
Ctrl+a ó Ctrl+x Suma o resta 1 al número bajo el cursor
% Resalta las llaves y/p parentisis del bloque de código actual
:grep "text" Busca el texto entre los ficheros del directorio actual.
Con el argumento -r busca recursivamente, directorios y subdirectorios

Autocompletado

El Vim proporciona muchos modos de autocompletado. La mayoría se activar pulsando Control-X y luego un carácter que activa un modo u otro. Sin duda el modo más avanzado es el "Omni" (Vim 7.0 o superior) que completa, si estamos programando, de forma inteligente los métodos de clase, funciones o miembros de un módulo. Cuando hay varias alternativas estos modos de completado muestran una lista desplegable con todas las opciones, que podremos seleccionar con los cursores e intro. Los modos de autocompletado funcionan en modo de inserción, no en modo comando.

CTRL+p Completa la palabra con otra existente existente en los ficheros que estemos editando (pestañas)
Se puede mapear la tecla TAB para cumplir esta función
CTRL+xf Completar el nombre del fichero o directorio con el existente en el sistema de archivos
CTRL+x o Los nombres de métodos de clases, clases y módulos
CTRL+e Elimina la sugerencia de la lista desplegable.

Anula cualquier sugerencia de completado y elimina la lista desplegable. No funciona si ya hemos seleccionado uno de los términos.

Formatear Automáticamente Código

Primero definir el tipo de archivo. Por ejemplo si es cógigo PHP

:set filetype=PHP

Formateamos

Esc gg=G

Esc es para estar en modo normal

Ejecutar Comandos Externos

La Sintaxis General es !comando

Ejemplos

:!ls Lista los ficheros del directorio actual
:!sort Aplicado sobre un texto seleccionado en modo visual ejecuta la orden de bash

Suspender Vim

Con CTRL+Z se vuelve al Shell, para poder ejecutar comandos del sistema. Se regresa a Vim con la orden fg

Configuración

El fichero de configuración de Vim es $HOME/.vimrc

set sw=3 " Tabulación a 3 carácteres. (Por defecto son 8) 
set ai   " Autoindent: Al pulsar intro la nueva línea se identará del mismo modo que la línea anterior.

" En Linux, con el controlador para ratón en consola GPM, 
" al pegar texto con el ratón se descoloquen todas las líneas, 
" porque va tomando la indentación de la anterior y se van acumulando.
" Para evitar esto  antes de pegar ':set noai' pera desactivar la autoindentación,
" y ':set ai' para activarla después.

set cindent "Identación inteligente

"Por ejmplo pondrá una tabulación tras una llave "{" si estamos con un programa en C,
'o la reducirá cuando encuentre una llave de cierre).

set sm "Cierre automático de llaves, corchetes

set ruler "Indicador de línea y columna en la parte inferior de la pantalla

set nocompatible "Usar valores por defecto de Vim y no los de Vi

Creando Nuestros Propios Atajos

Existen 3 formas diferentes de crear nuestros propios atajos, cada una de ellas es edecuada para usar en situaciones especificas

  • Con el comando :map o map en .vimrc
  • Usando ab en nuestro .vimrc
  • Mediante macros

Mapping Keys

En el fichero .vimrc podemos además crear nuestros propios comandos mediante el comando map.

Sintaxis de map:

COMANDO [ATRIBUTOS] ATAJO INSTRUCCIONES

COMANDO puede ser cualquiera de los siguientes map, map!, Nmap, vmap, imap, etc. dependiendo del modo donde se ejecutará el atajo

Los ATRIBUTOS son opcionales y pueden ser uno o más de los siguientes: <buffer>, <silent>, <Expr>, <script>, <unique> y <specialL>

ATAJO es la secuencia de una o más teclas que se usará para ejecutar las INSTRUCIONES

INSTRUCCIONES son la secuencia de comandos de Vim.

Ejemplos

map ^]c ^]^I#]j Queremos que al precionar ALT+C se comente la línea en la que estemos trabajando con #

^[c Con esto lo que queremos decir es: "cuando pulses ALT+c .....". Para ponerlo nos ponemos en modo "INSERT" y pulsamos CTL+v seguido de ALT+c. Esto se aplica a cualquier comando que queramos crear.

^[ Esta secuencia tiene el mismo efecto que si pulsáramos dentro del editor la tecla ESC (pasar a modo comando) y, por lo tanto, lo conseguimos mediante la secuencia dentro del editor: CTL+v seguido de ESC.

^ Mediante esta secuencia lo que conseguimos es ponernos al principio de la lí­nea. Esto es análogo al uso que en grep se le da a ^

I#: Una vez que estamos al principio de la lí­nea lo que queremos es insertar un "#". Por lo tanto nos ponemos en modo insertar y le decimos que ponga "#".

^[j: Nos ponemos en modo comando para mover el cursor una lí­nea hacia abajo mediante el comando "j". Para ponernos en modo comando, puesto que es igual que si pulsáramos la tecla ESC dentro del editor, utilizamos la secuencia CTL+v seguido de ESC. Poniendo j después conseguimos que el cursor avance una línea.

Y ya tenemos terminado nuestro comando. Grabamos el .vimrc, y cuando entremos al vim y pulsemos ALT+c se comentará la lí­nea en la que estemos trabajando. El comando para comentar una lí­nea de un fuente de C serí­a muy parecido: map ^[v ^[^I//^[j I

Con este comando al pulsar ALT+v se insertará "//" al principio de la lí­nea y bajará a la siguiente.

Creando Alias

Son conbinaciones de teclas que definimos en nuestro .vimrc para usarlas como atajos de palabras que usamos frecuentemente en nuestros documentos.

Para crear un alias usamos el comando ab, que tiene la siguiente sintaxis:

ab alias palabra

Por ejemplo: Si creamos un alias para nuestro email en nuestro .vimrc

"Alias
"=====
ab dcr miemail@gmail.com "Alias mi email

De esta forma si colocamos en un documento dcr nos escribirá miemail@gmail.com, ahora bien si ésta secuencia es parte de una palabra no se sustituye.

Plugins

Existen plugins formidables

CrtlP Este plugin nos permite buscar ficheros en el direcctorio raíz o cualquier subdirectorio, buffers abiertos, ficheros recientemente utilizados, etiquitas, etc. Basta con ingresar uno de sus comando, empezar a escribir parte del nombre de lo que quieres abrir y con unas pocas pulsaciones se le puede seleccionar.

El obtiene desde aquí

Project Nos muestra una barra lateral del proyecto con un árbol de nodos extensibles representando directorios y ficherosde modo que al poner el cursor sobre el fichero o buscar con / y pulsar intro lo abre en un buffer nuevo.

Se obtiene desde aquí

TagBar Es una barra lateral donde se pueden ver todos las clases, métodos, funciones, variables, etc. del fichero actual. Esto nos permite ver la estructura lógica del fichero fuente y navegar por ella.

Se obtiene desde aquí

SnipMate Incluye varios snippets para distintos lenguajes de programación y es muy fácil aprender a definir nuevas plantillas simplemente viendo el código existete. Además con la tecla Tab se pueden ir rellenando.

Se obtiene en aquí

PowerlineMejora la barra de estado de Vim.

NerdCommenterPermite comentar o descomentar líneas o secciones de Código.

YankRingMejora el sistema de pegar y copiar. Es como una versión mejorada del comando :redisters de Vim.

Trucos

Ir a la primera línea: gg (gg es Go Go en inglés)

Ir a la línea 45:45gg

Ir a la última línea: G

Usando esto podemos ir aplicar algún comando sobre el texto

Borrar todo el texto: ggdG

Seleccionar todo el texto: ggyG

Abrir un fichero o URL escrito en el texto: Con el cursor sobre el nombre del fichero aplicar Ctrl+w seguido de gf (gf significa go file). Luego con Ctrl+o podemos regresar.

Abrir una url que este en el texto:

surround.vim

Este plugins permite trabajar con todo tipo de delimitadores que envuelven texto

Cuando se carga el plugin está disponible un nuevo objeto

cambiar los delimitadores: cs'nvo

Hola mundo

Dibujar dentro de un Archivo de Texto

Instalar drawit.vim

Fin del Tema