Mi rendo conto che questo è super-vecchio, ma mi sono imbattuto nella stessa cosa sia in Vim 8.0 che in Neovim. Se inserisco :tag mymethod!
dalla riga di comando di vim, trova il tag pertinente, ma se provo <C-]>
con il mio cursore sul nome del metodo, esso errori E426: tag not found: mymethod
(notare la mancanza di !
nel nome cercato).
È possibile risolvere questo con l'aggiunta di !
all'elenco dei caratteri riconosciuti come caratteri di parole chiave nella sintassi di Ruby:
:set iskeyword+=!
Si potrebbe aggiungere che questo ~/.vim/after/syntax/ruby.vim
applicarla in qualsiasi file Rubino si apre. Non ho ancora provato questo, quindi non posso dire se influenzerà negativamente qualcos'altro. So che cambierà il comportamento del salto di parole. w
, ad esempio, considererà lo !
come parte della parola "piccola".
Ripensandoci, sicuramente manterrà le cose come !some_test
. Se dovessi colpire <C-]>
con il cursore in qualsiasi punto, cercherà un metodo denominato !some_test
, che non è sicuramente quello che desideri. Una soluzione migliore sarebbe scrivere una funzione wrapper attorno alla ricerca dei tag per i file Ruby. In realtà sto lavorando a qualcosa per questo, quindi posterò quando ho qualcosa di presentabile.
Aggiornamento: Ho trovato sorprendentemente semplice soluzione:
nnoremap <buffer><silent> <C-]> :tag <C-R><C-W><CR>
Per qualche ragione, il comportamento di <C-R><C-W>
in modalità riga di comando differisce da quella di expand('<cword>')
, e probabilmente dalla documentazione. Anche se !
non è un 'iskeyword'
carattere e expand('<cword>')
risultati in mymethod
, <C-R><C-W>
risultati in mymethod!
. Lo stesso vale per is_this_your_method?
. Si potrebbe applicare questa soluzione mettendo quanto segue in ~/.vim/ftplugin/ruby.vim
:
nnoremap <buffer><silent> <C-]> :tag <C-R><C-W><CR>
nnoremap <buffer><silent> g] :tselect <C-R><C-W><CR>
nnoremap <buffer><silent> g<C-]> :tjump <C-R><C-W><CR>
Update 2
Si scopre il comportamento speciale di <C-R><C-W>
è stato fornito da vim-ruby (e inclusa nel file di runtime di Vim per default). Questo script personalizza <C-R><C-W>
e aggiunge anche un mapping <Plug><cword>
per identificare correttamente l'identificatore del cursore Ruby. Mi sono imbattuto nella cattiva gestione di !
solo perché avevo inavvertitamente colpita le mappature già forniti da vim-ruby quando si aggiunge quello che trovo ad essere più una combinazione di tasti comodo:
nnoremap <C-.> <C-]>
Se avessi fatto nmap
invece, vim- la mappatura di Ruby avrebbe potuto fare il suo lavoro. In alternativa, si potrebbe sfruttare ciò che vim-ruby fornisce facendo (in un file ftplugin rubino):
nnoremap <buffer><silent> <C-]> :<C-U>exe v:count1."tag <Plug><cword>"<CR>
nnoremap <buffer><silent> g] :<C-U>tselect <Plug><cword><CR>
nnoremap <buffer><silent> g<C-]> :<C-U>tjump <Plug><cword><CR>
^] salti correttamente il metodo giusto nella mia versione di vim. Quale versione di vim e ctags stai usando? Ho vim-ruby e matchit installati e abilitati. Non sono sicuro che questo faccia la differenza. – rjk
Sto usando MacVim Snapshot 63 che è costruito su Vim 7.3. Anch'io ho entrambi questi plugin. Il problema persiste anche se avvii vim senza configurazione ('mvim -u NONE'). – xoebus