2010-08-05 11 views
29

En uno de los editores basados ​​en Eclipse que probé recientemente (creo que era RubyMine), cuando una palabra clave Ruby se abrió o se ha seleccionado un método o bloque seleccionado, se ha resaltado la palabra clave correspondiente de abrir/cerrar. Similar a la forma en que Vim puede resaltar un paréntesis de abrir/cerrar correspondiente.Vim: Resalte los pares de palabras clave en Ruby (def/end, do/end, etc.)

Por ejemplo, si selecciono una 'def', resaltaría el 'final' correspondiente. También funcionó para do/end blocks.

Esto fue realmente útil, especialmente para aquellos archivos Rspec largos y, a veces muy anidados.

¿Alguien sabe cómo lograr esto en Vim?

+2

Eche un vistazo a ruby-matchit.vim, que le permite saltar entre 'def' ...' end' y 'class'..' fin' y compañía con'% '. La lógica debería ser la misma para lo que quieres. http://vim.sourceforge.net/scripts/script.php?script_id=290 – Telemachus

+1

Otro complemento útil de Vim para los pares 'x' ...' end' es 'endwise' de Tim Pope, que insertará automágicamente un' end' cada vez que inicie una sección que requiera uno: http://github.com/tpope/vim-endwise – Telemachus

+0

Gracias por los comentarios de Telemachus. Estos no son precisamente lo que estoy buscando, pero de todos modos me resultan útiles. ruby-matchit puede servir para el mismo propósito, pero yo preferiría resaltar como se describe en mi pregunta, si es posible. Una vez que sepa más sobre Vim, puedo investigar si es posible implementarlo. – pakeha

Respuesta

2

Parece que este plugin de vim hace la coincidencia de pares: http://vimdoc.sourceforge.net/htmldoc/pi_paren.html Probablemente pueda profundizar en ese código para ver cómo extenderlo y hacer coincidir otras cosas.

+1

no funcionará ya que ': help matchpairs' dice: Actualmente solo se permiten pares de caracteres de un solo byte, y deben ser diferentes. –

+0

Sí, dice actualmente ... pero el código dará una idea de cómo hacer la coincidencia de paren, y luego puede ampliarlo para que admita pares de varios caracteres, sí? Es un lugar para comenzar :) –

8

VIM (hasta 7.2) no se puede resaltar un cierre de pares 'if/end' porque la configuración coincidente acepta un solo carácter (consulte: help matchpairs). recomiendo el uso de plegado en su lugar, siempre y cuando aplica sangría con precisión su código:

:set foldmethod=indent 

A continuación, utilice: zc, za para asegurarse de que está en el bloque de la derecha.

17

Si está utilizando Vim 7.3, debe tener disponible la macro MatchIt vim.

Agregue runtime macros/matchit.vim a su archivo .vimrc y debería poder usar% para que coincida con los bloques de ruby.

Puede ver el plugin filetype para ruby ​​para ver en qué se moverá.

+0

¡Perfecto! Funciona mucho mejor que ': set foldmethod = indent' y' zc' +1 –

1

me encontré con este plugin durante la búsqueda de la respuesta en el mismo problema que funciona para código básico rubí, pero no he probado fuera de Rspec etc.

Sólo tienes que instalar a través de pathogen y añadir let g:hl_matchit_enable_on_vim_startup = 1

https://github.com/vimtaku/hl_matchit.vim

Cuestiones relacionadas