Skip navigation

En realidad estaba buscando como mapear el autocomplete de Vim a otro shortcut más amigable (que el default de Ctrl+N o Ctrl+X, Ctrl+O), y me topé con este scriptcito que me cautivó.

Ah, doy una mínima explicación de lo que estoy escribiendo para terminar de ahuyentar a lectores poco nerds o no programadores:

Vim: Editor de textos re pro con una curva de aprendizaje complicada pero muy poderoso si se lo sabe usar. En el contexto, es el editor que uso para todo (desde programar hasta hacerme un MOTD con ASCII ART).

autocomplete: funcionalidad de Vim que autocompleta una palabra a medio escribir a partir de

  • Una lista de palabras ya usadas en el mismo archivo u otros abiertos
  • Un diccionario
  • Funciones del lenguaje de programación en el que estemos escribiendo

shortcut: combinación de teclas que ejecuta un comando o función. En el caso de Vim, son todos shortcuts😀

scriptcito: Programita chiquito que hace algo no muy complejo pero groso. En este caso es, además, tierno por su simpleza.

Dadas las explicaciones y definiciones necesarias, y ya habiendo filtrado lectores de mi blog no programadores ( o giles que vieron luz en un mal google search y entraron ) prosigo a mostrar el script y explicar su uso/instalación.

EDIT: Modifico este post, dado que el WYSIWYG del orto de WordPress me garcha todas las comillas, tabs y demás (No es muy bueno para publicar sourcecode). Abajo pongo los links de donde saqué la data. No intenten copiar el source aquí publicado porque no anda ni para atrás).

El script:


"This code autocloses parenthesis, brackets, etc around cursor
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "<Right>"
else
return a:char
endif
endf
"This map adds lines to the previous trick…
inoremap { {<CR><BS>}<ESC>ko

Lo que hace:

La primer parte, hasta el segundo comment, hace que cuando tipiemos un paréntesis (, llave { o corchete [, lo cierre automáticamente con su contraparte ) } ] y posicione el cursor en el medio de ambos. Interesante.

La segunda parte hace que se den un par de ENTERs automáticamente en el caso de ser llaves, ubicando el cursor en la línea del medio…

{

| — CURSOR

}

Como instalarlo:

En realidad se puede tirar así como viene en el .vimrc, pero yo por amor a la prolijidad del código lo puse en un archivo en ~/.vim/plugin/autoclose.vim . Si lo ponen ahí el vim lo incluye solo.

mmh, qué más decir… es ALTAMENTE RECOMENDABLE este truquito. Me hace acordar a un video que ví hace mucho de un tipo que explicaba qué cheto que era programar en Ruby On Rails, y usaba Vim, y tenía estas pavadas, y yo dije “aaah quiero programar asiiii”.

La idea del script la saqué de acá, y la última línea donde agrega los ENTERs la leí en los comments de acá. Les recomiendo que copy-pasteen de esos sitios, y no del mío, porque las comillas dobles y simples están mal y no les va a andar nada.

Me voy a seguir investigando como cambiar los shortcuts del autocomplete.

5 Comments

  1. Es mortal la descripción de “scriptcito”

  2. Claro, porque “todo en la vida es scripteable”😀

  3. no es posible hacer lo mismo pero pa que tambien me cierre las ” y las ‘ ??

  4. no probé, pero seguro que se puede, según la lógica del scripcito ese, agregando otro par de líneas de los maps de teclas…
    algo como
    :inoremap ” “i
    :inoremap ” =ClosePair(’”‘)
    aunque no estoy seguro, porque en los casos que probé yo siempre tienen caracteres distintos de apertura y cierre (por ejemplo [ ] )
    Habrá que probar.😀

  5. la unica forma que logre que funcionara fue esta:

    :inoremap ” ” “hi

    lo que hace es que cuando escribes ” te la cierra te angrega un espacio entre estas y te pone el cursor ahi, no logre hacer que funcionara sin el espacio


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: