Vimコマンドモードのパーセント拡張


2

Vimでの私の典型的な日常のワークフローには、2つの垂直ペインがあります。左側に製品コード、右側にテストを示します。

言語(およびテストフレームワーク)を頻繁に切り替えるため、セッションごとにテストコードを実行するための新しいマッピングを作成するのが好きです。私がRubyプロジェクトをやっていて、でクラスを運転しているとしましょうlib/importer.rb。付随する仕様はにありspec/lib/importer_spec.rbます。

仕様を実行するためのマッピングを作成するには、仕様を表示するペインに焦点を合わせ、次のように入力します。

:nnoremap -g :!rspec %<cr>

注:リーダーキーとしてハイフン/マイナスを使用します。

これは動作しますが、を押したときに仕様ペインにフォーカスがある場合のみです-g。実稼働ペインにフォーカスがあり、マッピングにヒットすると、rspecは実稼働コードを実行しようとしますが、これは意味がありません。

これを回避するために、スペックファイルへの絶対パスを記述できます。

:nnoremap -g :!rspec spec/lib/importer_spec.rb<cr>

これは機能しますが、書くのは少し面倒です。

昨夜Practical Vimを読んでいると、コマンドモードで%展開を使用できることに気付きました。書き込み%、次にヒットtabすると、パーセントが現在フォーカスされているペインのファイルへの絶対パスに置き換えられます。

これを行う場合:

:!rspec %

…そして、ヒットtab、私はこれを得る:

:!rspec spec/lib/importer_spec.rb

そしてそれは素晴らしいことです!ただし、これを行う場合:

:nnoremap -g :!rspec %

…そして、ヒットtab、私はこれを得る:

:nnoremap -g :!rspec %^I

私はいい人で、税金を払います。なぜこれが私に起こっているのですか?

回答:


5

デフォルトでは、コマンドの完了はマッピングでは認識されません(マクロに記録されます)。あいまいな'wildcharm'オプションで代替キーを定義し、それを使用できます。ただし、現在のファイル名の挿入は、より簡単で簡単な方法で行うことができます。を完了する代わりに%、同等のVimscript式を挿入するだけ<C-r>です:

:nnoremap -g :!rspec <C-r>=expand('%')<cr><cr>

PS:あらゆる種類のファイル名を適切に処理するには、さらに以下を使用しますshellescape()

:nnoremap -g :!rspec <C-r>=shellescape(expand('%'), 1)<cr><cr>

PPS:マッピングを毎回実際に手動で入力するのではなく、ファイルタイププラグインを使用するか:autocmd、テストバッファーに対して自動的に定義することをお勧めします。そのような方法で自動化することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.