我意识到这是超级老了,但我遇到了同样的事情,同时针对vim 8.0和Neovim。如果我从vim的命令行输入:tag mymethod!
,它会找到相关标记,但如果我尝试使用方法名称上的光标<C-]>
,它会发生错误E426: tag not found: mymethod
(请注意,它搜索的名称中缺少!
)。
您可以通过添加!
以公认的Ruby语法关键字的字符的字符列表解决这个问题:
:set iskeyword+=!
你可以将它添加到~/.vim/after/syntax/ruby.vim
在任何Ruby文件,你打开应用它。我还没有测试过,所以不能说它是否会对其他东西产生不利影响。我知道这会改变跳字的行为。例如,w
将作为“小”字的一部分对待!
。
关于第二个想法,肯定会错误地处理之类的东西!some_test
。如果你打<C-]>
光标在任何地方出现,它会搜索名为!some_test
方法,这绝对不是你想要的。更好的解决方案是在Ruby文件的标签查找周围编写一个包装函数。实际上我正在为此做些工作,所以我会在我有一些可以表达的东西时发布。
更新:从文档
nnoremap <buffer><silent> <C-]> :tag <C-R><C-W><CR>
出于某种原因,的<C-R><C-W>
在命令行模式下从的expand('<cword>')
的行为不同,可以说是:我发现了一个令人惊讶的简单的解决方法。尽管!
不是'iskeyword'
性格,expand('<cword>')
结果mymethod
,<C-R><C-W>
结果mymethod!
。 is_this_your_method?
也适用。你可以通过将按照~/.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>
更新2
原来的<C-R><C-W>
的特殊行为是由VIM-红宝石(默认提供并列入Vim的运行时文件)。该脚本自定义<C-R><C-W>
并且还添加了一个<Plug><cword>
映射来正确标识Ruby游标标识符。我只跑进!
处理不当,因为我加入的时候我觉得更舒适的键绑定在不经意间遭受重挫已经VIM-红宝石提供的映射:
nnoremap <C-.> <C-]>
如果我做nmap
相反,vim-红宝石的映射本可以完成它的工作。或者,您可以利用什么VIM-Ruby提供这样做(在Ruby文件类型插件文件):
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>
^]正确跳转到我的版本的vim的正确方法。你使用的是什么版本的vim和ctags?我确实安装并启用了vim-ruby和matchit。不知道这是否有所作为。 – rjk
我使用的是基于Vim 7.3构建的MacVim Snapshot 63。我也有这两个插件。即使我没有配置启动vim('mvim -u NONE'),问题依然存在。 – xoebus