私はこれが超古かったことを実感しましたが、Vim 8.0とNeovimの両方で同じことに遭遇しました。 vimのコマンドラインから:tag mymethod!
と入力すると、関連するタグが見つかるが、メソッド名にカーソルを合わせて<C-]>
と入力すると、エラーE426: tag not found: mymethod
(検索した名前には!
がないことに注意)。
あなたはRubyの構文でキーワード文字として認識された文字のリストに!
を追加することによってこの問題を解決することができます
:set iskeyword+=!
あなたが開いているあなたのファイル任意のRubyでそれを適用する~/.vim/after/syntax/ruby.vim
にこれを追加することができます。私はこれをテストしていないので、他に悪影響を与えるかどうかは言えません。私はそれが単語ジャンプの行動を変えることを知っている。 w
は、例えば、「小さな」単語の一部として!
を扱います。
2番目の考えでは、それは間違いなく!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-、代わりにnmap
を行わたい場合
nnoremap <C-.> <C-]>
:私はより快適なキーバインドであることがわかりました何を追加するとき、私は不注意すでにVIM-ルビーが提供するマッピングを上書きさていたので、私は唯一の!
の取扱いミスに走りましたルビーのマッピングがその仕事をしていた可能性があります。 VIM-ルビーは(ファイルftpluginルビーで)実行して提供するものまたは、あなたが活用できます。
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