Tips Vim/GVim
Última actualización: 26/12/2011
En esta entrada voy a ir recopilando algunas de las combinaciones de teclas que más uso en Vim a la hora de escribir cualquier documento (sobre todo a la hora de programar). Espero que os sean de tanta ayuda como a mí. Al final de la entrada he dejado algunos de los enlaces de los que me he servido para ir avanzando en la aventura de conocer vim a fondo. Intentaré tener actualizada la entrada conforme vaya aprendiendo nuevas cosas de interés.
Atajos de teclado más usados
Antes de nada, y lo escribo separado del resto de cosas: ¡intenta no usar las flechas del teclado!. Cuesta trabajo acostumbrarse, a mi aún se me va la mano de vez en cuando, pero es asombroso ver la cantidad de tiempo que ahorras moviéndote por el texto con las teclas provistas por vim para esta causa. Las teclas en cuestión son:
- h: Moverse un carácter a la izquierda.
- j: Moverse un carácter hacia abajo.
- k: Moverse un carácter hacia arriba.
- l: Moverse un carácter a la derecha.
Como podréis apreciar esta cuatro teclas quedan en la fila principal del teclado (ASDFGHJKLÑ) y por lo tanto no tendremos que levantar nuestra mano para realizar estos movimientos. Una vez dicho esto … ¡no lo olvidéis ehhh!
… Tened muy en cuenta el uso de mayúsculas y minúsculas en el resto del post, ya que hay muchas teclas que tienen diferentes comportamientos según si pulsamos la tecla en mayúsculas o minúsculas. Otro apunte importante, cuando ponga ^C (donde C hace referencia a cualquier caracter), la combinación es pulsar la tecla control junto al carácter en cuestión, pero sin tener que pulsar además la tecla de mayúsculas. Es una notación que se usa en vim a la cual debéis acostumbraros.
Moverse por el texto
- Las cuatro teclas anteriormente comentadas: hjkl.
- $: Ir al final de la línea
- 0: Ir al principio de la línea
- _: Ir al primer carácter no blanco de la línea
- -: Ir al primer carácter no blanco de la línea anterior
- ^B: Ré Pag o Pag Back.
- ^F: Av Pag o Pag Forward.
- H: Ir a la parte superior de la pantalla actual.
- M: Ir al medio de la pantalla actual.
- L: Ir a la parte inferior de la pantalla actual.
- gg: Ir al principio del documento.
- G: Ir al final del documento.
Pasar a modo de inserción desde el modo de edición
- A: Ir al final de la línea y pasar a modo de inserción.
- a: Pasar al modo de inserción en el siguiente carácter.
- i: Pasar al modo de inserción en el carácter actual.
- o: Pasar al modo de inserción en una nueva línea (debajo de la actual)
- O: Pasar al modo de inserción en una nueva línea (encima de la actual)
Seleccionar, Cortar, Copiar, Pegar
- shift + v: Modo de selección de líneas completas.
- ctrl + v: Modo de selección de caracteres.
- y: Copiar selección realizada
- d: Cortar selección realizada
- p: Pegar selección realizada (después de la posición del cursor)
- P: Pegar selección realizada (antes de la posición del cursor)
- yy: Copiar línea actual
- dd: Cortar línea actual
Tabulaciones
- << Tabular línea actual a la izquierda.
- >> Tabular línea actual a la derecha.
- < Tabular a la izquierda la selección actual.
- > Tabular a la derecha la selección actual.
Manejo de ventanas dentro de una pestaña
- ^Ws : Divide la pestaña actual en dos ventanas (División con corte en horizontal).
- ^Wv : Divide la pestaña actual en dos ventanas (División con corte en vertical -> Muy útil si tienes un monitor panorámico y quieres tener en una ventana tu fichero .h y en la otra tu fichero .cpp).
- ^Wq : Cierra la ventana actual.
- ^Wh : Cambiar a la ventana que está a la izquierda.
- ^Wj : Cambiar a la ventana que está abajo.
- ^Wk : Cambiar a la ventana que está arriba.
- ^Wl : Cambiar a la ventana que está a la derecha. (Observad la coincidencia de hjkl con los mivimientos por el texto).
- ^W^W: Cambiar a la ventana anterior.
Por último y con mención especial el punto (.) realiza la última acción que hayas realizado. Por ejemplo:
- Si seleccionas un bloque de texto y lo tabulas en cualquier sentido, pulsado el punto vuelve a tabular todo ese bloque en el mismo sentido.
- Si eliminamos una palabra y la sustituimos con otra con el juego de la tecla “c”, cuando pulsemos el punto en otro sitio se eliminará una palabra y se sustituirá. Esto es muy útil cuando programamos.
Búsqueda
Para realizar una búsqueda en el modo normal tenemos que poner una barra y la palabra a buscar: /palabra. Después para buscar las siguientes ocurrencias en el texto o las previas pulsamos n o N respectivamente.
Además si pulsamos Alt Gr + 3 encima de alguna palabra buscaremos directamente esa palabra.
Buscar y reemplazar
Se utiliza la siguiente sintaxis:
:s/patron-a-buscar/patron-de-sustitucion/gc
Aquí tenemos muchísimas opciones a utilizar, incluso podemos hacer uso de expresiones regulares, pero para hacer cosas sencillas nos bastará con conocer la sintaxis básica. La primera s es el comando que determina que vamos a realizar una búsqueda con sustitución. En patron-a-buscar pondremos las letras que queremos buscar, siendo case-sensitive y admitiendo todo tipo de símbolos y expresiones regulares en la cadena. En patron-de-sustitucion ponemos la cadena que queremos que reemplace a patron-a-buscar. Por último, los caracteres g y c son opcionales. El primero (g) indica que se haga una sustitución global, reemplazando todas las coincidencias, si no lo ponemos solo reemplaza la primera coincidencia que encuentre. El segundo (c) pide la confirmación por parte del usuario para cada coincidencia.
En los enlaces que se muestran al final de la entrada podrás encontrar más información acerca de esta característica de vim, además de pequeñas reseñas al uso de expresiones regulares. Aunque básicamente son expresiones regulares de Perl, por lo que haciendo un “man regex” podéis ver las entrañas de este tipo de expresiones.
Un caso muy común con el que os encontraréis es que queráis añadir una barra “/” en vuestros patrones, para ello tenéis que usar el carácter de secuencia de escape “\”. Es decir, si queréis reemplazar por ejemplo todas las coincidencias de /ruta/ por /path/ tendréis que utilizar el siguiente comando:
Expresiones regulares
Junto a la característica anterior, un buen conocimiento de las expresiones regulares en Vim es esencial. En los enlaces podréis encontrar más información pero aquí os iré dejando aquellas cositas que en más de una ocasión me han salvado la vida.
- Juntar las líneas que empiecen con el caracter a, a la línea anterior
:%g/^a/-1join
- Reducir múltiples líneas en blanco a solo una.
:g/^$/,/./-j
- Eliminar todas las líneas que comiencen con #.
:g/^#/ d
- Seleccionar líneas con más de 80 caracteres.
/\%>80v.\+
Abrir fichero en nueva pestaña
Usar el comando
:tabnew rutaCargar buffer anterior
Si por alguna razón se ha cargado otro fichero en tu pestaña actual puedes volver rápidamente a tu buffer anterior mediante el menú Buffers->Previo (Alt+B, +P).
Ejecutar comandos desde vim
Poner el comando tras
. Ejemplo:
Cambiar fuente
Aquí hay una peculiaridad. Si queremos hacer el cambio para vim solamente hay que usarla siguiente notación:
set guifont=Inconsolata:12 "Fuente de texto
Y si queremos hacer el cambio para gvim tenemos que usar la siguiente notación:
set guifont=Inconsolata\ 12 "Fuente de texto
Bookmarks
En vim podemos hacer también uso de marcadores de forma muy sencilla:
- ma: Establece un marcador llamado a en la posición actual del cursos. Un marcado puede ser etiquetado con cualquier letra minúscula, y a pesar de que no podemos verlo visualmente está ahí
. - ‘a: Ir al marcador a. El apostrofe es el que se encuentra a la derecha del cero en el teclado.
- ‘.: Va a la última línea que hayas editado. ¡Esto es realmente útil! Si te has movido por el fichero para mirar algo y quieres volver a la línea en la que estabas escribiendo sin tener que hacer un marcador.
Contar palabras
Para contar el número de palabras:
- g^G: Nos dice el número de columna actual respecto al total, el número de línea actual respecto al total, el número de palabra actual respecto al total y el caracter actual respecto al total.
Si tenemos un bloque visual seleccionado, hara los cálculos respecto a dicho bloque.
Comentar/Descomentar varias líneas
Una característica muy requerida entre los programadores es poder comentar y descomentar varias líneas al mismo tiempo con una combinación sencilla de teclas. En VIM, creo que no existe una combinación sencilla para hacer esto, pero la potencia de las expresiones regulares nos ayudará en esta tarea. Para comentar varias líneas las seleccionamos con SHIFT + V y ejecutamos el siguiente comando:
:s/^/#/
Lo que hacemos es realizar una sustitución al principio de la línea incluyendo el caracter “#”, o el que venga a cuento. Si queremos descomentar, seleccionamos de nuevo las líneas e introducimos el comando:
:s/#//
Aprecia que no incluimos la opción g al final, ya que solo queremos que elimine la primera coincidencia.
Conversión de mayúsculas a minúsculas y viceversa
Nunca ha sido tan sencillo realizar una conversión de mayúsculas a minúsculas (y viceversa) con un editor de texto. Colocándote al principio de una palabra utiliza los siguientes comandos para:
- gUw: convertir de minúsculas a mayúsculas.
- guw: convertir de mayúsculas a minúsculas.
Eliminar los saltos de línea de Windows
Los saltos de línea de Windows (^M) pueden ser fácilmente eliminados. Para hacerlo ejecutar lo siguiente:
:%s/^V^M//g
(Apreciad que ^V no se mostrará).
A veces es necesario añadir también un salto de línea:
:%s/^V^M/\r/g
Cambiar el formato de fin de línea
Los sistemas operativos manejan los saltos de línea en los ficheros con diferentes tipo de caracteres. En windows se utilizan dos (CRLF), mientras que en Linux solo uno (LF). Para cambiar de CRLF a LF simplemente tenemos que introducir el siguiente comando en vim y después guardar el fichero:
:set ff=unix
Eliminar búferes
Si mantenemos una sesión de gvim durante mucho tiempo en la que vamos abriendo y cerrando archivos (cerrando los archivos con el comando :q), vim va manteniendo una lista de búferes de todos los archivos con los que has ido trabajando. Esto puede ser molesto a la hora de utilizar ciertos plugins que trabajan con la información existente en dichos búferes. Para mostrar un listado de los búferes actuales podemos ejecutar el comando :buffers y para eliminar un búfer en concreto podemos hacerlo por su nombre o por su índice:
:bdelete f1.txt :bdelete 4
Sin embargo, si queremos eliminar varios búferes a la vez, lo más cómodo es utilizar un rango de índices (:3,11bdelete).
Grabar y ejecutar macros
Con las macros tenemos la posibilidad de definir una secuencia de operaciones que podremos realizar de forma automática en el futuro. Los pasos a seguir son los siguientes
- Pulsar q para entrar en el modo de grabación de macros.
- Pulsar un carácter para asignarle un identificador a la macro (Aparecerá abajo “grabando”).
- Ejecutar las operaciones que queramos realizar.
- Pulsar de nuevo q para finalizar el modo de grabación.
Ya tenemos nuestra macro definida. Para ejecutarla debemos teclear @x donde x es el carácter que pulsamos en el paso 2. Si queremos repetir este paso varias veces podemos teclear @Yx donde Y es el número de repeticiones.
Enlaces
Por último, algunos de los múltiples enlaces que he ido visitando para ir aprendiendo a desenvolverme mejor con vim.
- http://www.raffy.ch/projects/vim.html
- http://www.stud.fernuni-hagen.de/q6212743/vim.html
- http://www.jonlee.ca/tag/vim/
- http://www.linux.com/articles/55316
- http://www.lagmonster.org/docs/vi.html#re
- http://www.semicomplete.com/presentations/vim/#slide_0
- http://hurley.wordpress.com/2007/06/13/vim-tip-comment-out-multiple-lines/
- http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtml
- http://grx.no/kb/2008/11/17/remove-windows-line-endings-in-vim/
- http://vim.wikia.com/wiki/Vim_buffer_FAQ
- http://vim.wikia.com/wiki/Deleting_a_buffer_without_closing_the_window
- http://vim.wikia.com/wiki/Delete_all_lines_containing_a_pattern
- http://vim.wikia.com/wiki/Highlight_long_lines
- http://www.harecoded.com/grabar-ejecutar-macros-vim-125861
loading...


Últimos comentarios