我意識到這是超級老了,但我遇到了同樣的事情,同時針對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