Entrar
¿Usuario nuevo? Regístrate
linux-malaga · Lista de correos de la asociación Linux
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes determinar el orden de los mensajes. Pulsa el enlace en la columna correspondiente a la fecha. Tus preferencias serán guardadas y no tendrás que introducirlas de nuevo.

Mensajes

  Mensajes Ayuda
Avanzado
vim lore II (I am a man in constant sorrow)   Lista de mensajes  
Responder | Reenviar Mensaje #1983 de 8930 |
PREFACIO: DIRECTORIOS DE CONFIGURACIÓN.

Me he dado cuenta de que vi busca los ficheros en distintos directorios en un
distinto orden, lo que nos puede servir para mucho :-) Si entramos en vi y
tecleamos el comando ":set rtp" veremos los directorios en los que vi busca los
ficheros. El último de ellos es (al menos en los vim que he visto) ~/.vim/after.
Así que podríamos poner en ese directorio un directorio syntax y crear un
fichero distinto para cada tipo de fichero. Por ejemplo podríamos cargar el
diccionario de php y poner la orden en ~/.vim/after/syntax/php.vim.

EL ARTÍCULO EN SI MISMO

Antes de hablar del autoformato, quiero explicaros como cambiar el indentado de
los textos. Esto es especialmente útil para lenguajes de programación como
Python o si nos gusta tener bien ordenado el código. En modo visual (pulsando
"v" en modo comando) seleccionamos la parte que queremos (para seleccionar
entramos en modo visual en el principio de la parte que nos interese y nos
movemos hasta el final de la parte interesada) y con las teclas "<" y ">"
podemos hacer que lo seleccionado se indente quitando espacios o añadiendolo. Lo
mejor que podéis hacer para comprender mi pobre explicación es probarlo, lo
entenderéis enseguida.

Alguna vez tendremos que trabajar con textos que tengan líneas largas (por
ejemplo si escribimos un carta a un director o un artículo). Normalmente vim
mostrará la línea de texto partida en varias líneas. O a lo mejor lo tenemos
configurado para que nos las muestre fluyendo libremente más allá de los bordes
de nuestra terminal. No pasa nada, si lo que queremos es partirlas sólo
tendremos que usar "set wrap" (podemos hacerlo sin tener que editar .vimrc si
queremos tecleando ":set wrap" en modo comando). Para hacer que las líneas
fluyan sólo tendremos que desactivar el 'partido' (wrap en inglés) de la línea
utilizando el comando ":set nowrap" (no hubiese resultado difícil adivinarlo
:-)).

Pero claro, resulta muy engorroso moverse por una línea larga en cualquiera de
las 2 formas, aunque personalmente prefiero tener activado el 'wrap', pero no es
fácil moverse por la línea porque los cursores nos mueven a la siguiente y
anterior línea. Para poder movernos por las distintas 'lineas' podemos usar las
teclas "gj" y "gk" (para subir y bajar).

Hay que recordar que el 'wrap' es sólo una herramienta visual, es decir, las
líneas siguen teniendo la misma longitud aunque las veamos partidas. Si lo que
queremos es que vi parta realmente la línea, pues bueno, sólo habrá que
pedirselo con elegancia :-) La opción que buscamos es "textwidth".

Con "textwidth" le especificamos a vim que longitud en columnas queremos que
tengan los textos, y vim se encargará de partir las líneas a medida que
escribimos (sin partir las palabras). Para decir cuantas líneas queremos le
especificamos en el ~/.vimrc "set textwidth=80" si quisieramos que tuviese una
longitud de 80 columnas.

Podemos combrar que a medida que escribimos, vim cambiará de línea para hacer
que ninguna línea supere las 80 columnas. Es importante observar que la longitud
sólo se respetara a medida que se escriben las nuevas líneas. Si quisieramos
insertar texto en medio de una línea ya existente, esta no se ajustaría al
tamaño. No pasa nada, podemos ordenarle a vim que ajuste un párrafo en cualquier
momento, así que lo mejor será que terminemos de escribir y luego ajustaremos el
párrafo y se reorganizará quedando unos precioso ajustes de línea.

Se ajustaría utilizando "gq" en modo comando. El comando gq funciona con un
parámetro. Por ejemplo, si usamos "gqap" ajustará un párrafo, y para vim un
párrafo es aquello que hay entre 2 líneas en blanco. En un principio sólo he
visto interesante esta opción, pero también exiten otros tipos de formato como
(entre otras muchas) "gqq" que formatea la línea actual y "gq" en modo visual
formateará lo seleccionado.

Además, también se puede controlar la forma en la que vim hará el formateo, pero
personalmente no me interesa. Así que si te gusta escribir con un tabulado en la
primera línea de cada párrafo, podras mirar con ":help fo-table" y asignar los
valores apropiados a la variable "formatoptions".

Personalmente utilizo el indentando para cuando escribo textos en DocBook, ya
que en los lenguajes de programación el indentando viene definido por las reglas
de sintácticas del lenguaje. Así que sería interesante hacer que vim formateara
un párrafo con una pulsación de tecla. Esto lo hacemos con:

nmap <C-J> ?<para><CR>v/<\/para><CR>gq

El comando "nmap" es muy parecido al "imap" que ya hemos visto antes y asigna
una pulsación de tecla a una serie de órdenes, sólo que "imap" lo hacía en modo
inserción y "nmap" lo hace en modo normal (o 'modo comando'). Lo que hacemos es
asignar a la pulsación ^J (Control + J) el comando de búsqueda hacia atras ?
para que busque la cadena '<para>' y después entramos en modo visual con v y
utilizamos el modo de búsqueda hacia alante / para buscar '</para>', después
formateamos el parrafo seleccionado con "gq".

Este último comando que hemos añadido sólo tiene sentido si tenemos definido un
"textwidth" y realmente sólo nos es de utilidad cuando estamos trabajando con un
fichero DocBook (o algún otro formato de texto, para programas en C no tiene
utilidad, , así que podriamos tener un fichero ~/.vim/after/syntax/docbk.vim con
las líneas:

set textwidth=80
nmap <C-J> ?<para><CR>v/<\/para><CR>gq

Con las anteriores líneas le decimos a vim que las líneas no deben tener más de
80 columnas y le asignamos a ^J (en modo comando) a autoformatear el párrafo
entre <para> y </para>.

Quizá también queremos asignarselo en modo inserción para nuestra comodidad, en
ese caso quizá lo mejor sería recurrir a una función.

function FormateaPara ()
normal! ?<para>^Mv/<\/para>^Mgq
endfunction

imap <C-J> <esc>:call FormateaPara()<CR>
nmap <C-J> :call FormateaPara()<CR>
vmap <C-J> gq<cr>

Vemos que el código es ligeramente distinto, esto es porque hacemos alguna
cosita más. Lo primero que descubrimos es que definimos una función. Sí señores,
el lenguaje de scripting de vim es más complejo de lo que creiamos.

Al mapear "nmap" lo que hacemos es decirle que llame a la función que hemos
escrito, y cuando utilizamos "imap" la diferencia es que antes simulamos la
tecla 'escape' para abandonar el modo inserción y entrar en modo comando. En el
modo visual tan sólo ejecutamos el comando "gq" sobre lo seleccionado.

Básicamente esto es lo que se de formateo en vim, así que aquí terminamos este
capítulo de vim lore :-)

NOTA FINAL

En estos textos explico como trabajo yo en vim, y estoy descubriendolo estos
días. Hasta ahora sólo utilizaba las funciones más básicas de vim, y pensé que
quizás debería aprender a utilizarlo mejor para poder ser más eficiente a la
hora de teclear. Así que decidí investigar utilizando la ayuda de vim y
numerosos ejemplos que hay en Internet, así que aclarar que no soy ningún gurú
de vim ni nada parecido, y que es posible que haya formas mejores de las que yo
he encontrado, pero vim es algo tan grande y tan amplio que creo que estos
primeros pasos pueden venir muy bien.

Por lo demás, indicar algunas referencias:

- http://www.vim.org - La página principal de vim con numerosos scripts y
trucos.

- http://tldp.org/HOWTO/C-editing-with-VIM-HOWTO/ - Un documento centrado en
editar programas en C con vim. Muy interesante y educativo

- http://www.google.com - No necesita presentación :-)

--
Pablo Martínez Schroder
aka SegFault



Vie, 7 de Feb, 2003 9:15 pm

segfault34
Sin conexión Sin conexión
Enviar mensaje Enviar mensaje

Reenviar Mensaje #1983 de 8930 |
Desplegar mensajes Autor Ordenar por fecha

PREFACIO: DIRECTORIOS DE CONFIGURACIÓN. Me he dado cuenta de que vi busca los ficheros en distintos directorios en un distinto orden, lo que nos puede servir...
Pablo Martínez Sch...
segfault34
Sin conexión Enviar mensaje
7 de Feb, 2003
9:15 pm

... Saludos :) Buenas, despues de un tiempo de "lurker" me decido a dar la cara. Lo primero es lo primero, vaya peaso de tutorial :)) ... Añadir una mas, que...
Ignacio Garcia
mainake@...
Enviar mensaje
7 de Feb, 2003
9:40 pm
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda