2

背景:現在編集中のテストファイルを簡単に実行するために、このマッピングをmap ,r :! bundle exec ruby %<CR>常に使用しています。しかし、私もそうします:

map ,t :! bundle exec ruby test/integration/some_integration_test.rb<CR>

他のファイルで作業しているときに、この特定の統合テストを2つのキーストロークで実行できるようにします。別の統合テストファイルパスを使用して上記のコマンドを入力したアプリケーションの他の領域に移動すると、パスがハードコードされています。

そのようなマッピングを自動的に作成するコマンドを作成するにはどうすればよいですか?

map ,T :map ,t :! bundle exec ruby %<CR>マッピングの作成中に%が展開されないため、機能しません。したがって、tは常に現在のファイルを実行します(マッピングの作成時に編集していたファイルを実行したい場合)。

[編集]:答えからわずかに調整された解決策:

nnoremap ,r :! bundle exec ruby %<CR>
nnoremap ,T :let g:testfile = expand('%:p')
nnoremap ,t :! bundle exec ruby <C-r><C-r>=g:testfile<CR><CR>
  • ,r常にカーソルの下でファイルを実行します
  • ,T後で実行するために、現在のファイルパスを変数に保存します
  • ,t以前に保存されたファイルパスを実行します
4

2 に答える 2

3

現在のファイル名(現在のディレクトリへの変更の影響を受けないように完全な絶対パスを使用するのが最適です。:p修飾子はそれを行います)を変数に保存し、次の代わりに変数を挿入し%ます<C-r>

:noremap ,r :let g:testfile = expand('%:p')<Bar>! bundle exec ruby %<CR>
:noremap ,t :! bundle exec ruby <C-r><C-r>=g:testfile<CR><CR>

PS:私はを使用:noremapしました。これは、一般的に安全であり、実際に再マッピングを行う必要がない限り、最初の選択肢となるはずだからです。

于 2012-09-25T09:31:39.823 に答える
1
execute ":nnoremap ,t :! bundle exec ruby ".shellescape(expand('%:p'))."<CR>"

,t実行時に現在のファイルが何であるかについてテストを実行するマッピングを作成します。

しかし、それを行うたびに、前のを失います,t。それがあなたのやりたいことかどうかはわかりません。

于 2012-09-25T09:34:05.940 に答える