2009-10-27 3 views
12

Sto usando vim per lo sviluppo di ruby, php e perl. C'è la scorciatoia % per saltare dall'inizio di un blocco (subroutine/funzione/metodo/se) fino alla fine e viceversa. Per me uno % su un tag do/end in ruby ​​non funziona.Come saltare da un punto all'altro del blocco Ruby usando Vim?

Come posso farlo con vim?

+1

% salta alla staffa di corrispondenza o tutore, è per questo che non funziona in Ruby . Ancora una buona domanda, la mia ipotesi sarebbe quella di fare autostop sulle espressioni sintassi/pieghevole, ma non ho alcuna idea ... :) – falstro

risposta

11

matchit plugin consente di ottenere più di parentesi e commenti. Una versione rubino può essere trovata here.

+0

il plugin è ottimo, anche molto utile per i tag HTML. Con do e end ho un problema. Posso saltare dalla fine -> faccio, ma non posso saltare da questa posizione alla fine, perché non è all'inizio della linea, penso. – gustavgans

+6

Si noti che con le versioni più recenti di Vim, matchit è incluso per impostazione predefinita e, per quanto posso dire, ruby-matchit.vim rompe le cose. Non installare nulla. Tutto ciò che vuoi è il seguente nel tuo .vimrc (non è abilitato di default a causa di problemi di compatibilità): 'macro di runtime/matchit.vim' –

+1

Se qualcuno sta usando [Vundle] (https://github.com/gmarik/Vundle. vim), aggiungi semplicemente 'Bundle 'vim-scripts \ matchit.zip'' al tuo .vimrc ed esegui BundleInstall. –

6

con la matchit plugin e questo codice in ~/.vim/ftplugin/ruby.vim ora funziona :)

" Matchit support: 
if exists("loaded_matchit") 
    if !exists("b:match_words") 
    let b:match_ignorecase = 0 
    let b:match_words = 
\ '\%(\%(\%(^\|[;=]\)\s*\)\@<=\%(class\|module\|while\|begin\|until\|for\|if\|unless\|def\|case\)\|\<do\)\>:' . 
\ '\<\%(else\|elsif\|ensure\|rescue\|when\)\>:\%(^\|[^.]\)\@<=\<end\>' 
    endif 
endif 
Problemi correlati