Me doy cuenta de que esto es muy viejo, pero me encontré con lo mismo tanto en Vim 8.0 como en Neovim. Si ingreso :tag mymethod!
desde la línea de comandos de vim, encuentra la etiqueta relevante, pero si intento <C-]>
con mi cursor sobre el nombre del método, comete un error E426: tag not found: mymethod
(tenga en cuenta la falta de !
en el nombre buscado).
Puede solucionar este problema mediante la adición de !
a la lista de caracteres reconocidos como personajes de palabras clave en la sintaxis de Ruby:
:set iskeyword+=!
Se podría añadir a esta ~/.vim/after/syntax/ruby.vim
aplicarlo en cualquier archivo de Ruby abrir. Sin embargo, no he probado esto, así que no puedo decir si afectará negativamente a cualquier otra cosa. Sé que cambiará el comportamiento de salto de palabras. w
tratará, por ejemplo, el !
como parte de la palabra "pequeña".
Pensándolo bien, definitivamente manipulará mal cosas como !some_test
. Si tuviera que pulsar <C-]>
con el cursor en cualquier lugar, buscaría un método llamado !some_test
, que definitivamente no es lo que desea. Una mejor solución sería escribir una función de envoltura alrededor de la búsqueda de etiquetas para archivos Ruby. De hecho, estoy trabajando en algo para eso, así que publicaré cuando tenga algo tan presentable.
Actualización: He encontrado una solución sorprendentemente simple:
nnoremap <buffer><silent> <C-]> :tag <C-R><C-W><CR>
Por alguna razón, el comportamiento de <C-R><C-W>
en el modo de línea de comandos se diferencia de la de expand('<cword>')
, y podría decirse que a partir de la documentación. Aunque !
no es un 'iskeyword'
carácter, y expand('<cword>')
resultados en mymethod
, <C-R><C-W>
resultados en mymethod!
. Lo mismo se aplica al is_this_your_method?
. Se podría aplicar esta solución, poniendo lo siguiente en ~/.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>
Actualización 2
Resulta que el comportamiento especial de <C-R><C-W>
fue proporcionado por vim-rubí (y se incluye en los archivos de tiempo de ejecución de Vim por defecto) Ese script personaliza <C-R><C-W>
y también agrega un mapeo <Plug><cword>
para identificar correctamente el identificador del cursor Ruby. Sólo encontré con el mal manejo de !
porque había clobbered inadvertidamente las asignaciones ya previstas por vim-rubí cuando se añade lo que me parece ser más una combinación de teclas cómoda:
nnoremap <C-.> <C-]>
Si hubiera hecho nmap
lugar, vim- el mapeo de Ruby podría haber hecho su trabajo. Como alternativa, puede aprovechar lo vim-rubí proporciona mediante la práctica (en un archivo ftplugin rubí):
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>
^] saltos correctamente al método correcto en mi versión de vim. ¿Qué versión de vim y ctags estás usando? Tengo vim-ruby y matchit instalados y habilitados. No estoy seguro si eso hace una diferencia. – rjk
Estoy usando MacVim Snapshot 63, que está basado en Vim 7.3. Yo también tengo ambos complementos. El problema persiste incluso si comienzo vim sin configuración ('mvim -u NINGUNO'). – xoebus