Vim
¿Por qué Vim?
- Primero porque no requiere de mouse
- Está en todos los sistemas Unix (mac/linux)
- La configuración de Vim es portátil
- Es muy personalizable y extensible
- Funciona a través de Telnet y las conexiones SSH
- 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 ficherosModo 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"
Resumen de Comandos
Se puede considerar que estos comandos
comando de inserción para escribir texto
para navegar por el documento o mover el cursor.
comandos desahcer o rehacerBuscar una palabra.
Reemplazar un texto
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.
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.
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 mundoDibujar dentro de un Archivo de Texto
Instalar drawit.vim