0

同じサフィックスを持つファイルに異なるマッピングを定義したいと思います。

たとえば、すべてのrubyファイルに対して一般的なマッピングを定義し、rspecファイルに対してのみ異なるマッピングを定義します。

au BufNewFile,BufRead *_spec.rb map <Leader>t :w!<cr>:!rspec %<cr>
au BufNewFile,BufRead *.rb map <Leader>t :w!<cr>:!rspec %:r_spec.rb<cr>

au2番目のソリューションが最初のソリューションを「上書き」するため、上記のソリューションは私のマシンでは機能しません。

このような書き方はできauますか?

更新:バッファを1つだけ開いている場合は、最も具体的な(spec)ものを一般的なもの(rb)の下に配置するだけで機能します。スペックファイルを開くとすぐに、通常のrubyファイルの*.rbマッピングが失われます。

4

2 に答える 2

1

を逆にしautocommandsて追加すると<buffer>、この場合の目的の動作が得られます。つまり、次のようになります。

au BufNewFile,BufRead *.rb      map <buffer> ,t action2
au BufNewFile,BufRead *_spec.rb map <buffer> ,t action1

この順序付けにより、ファイル名ごとの適切なマッピングが実現されます。

*_spec.rbただし、ファイルを開くと、両方の mapコマンドが実行されることに注意してください:action1 action2。これは、特定のコマンドでは望ましくない場合があります。

また、<Leader>カンマ:,に設定した場合、マッピングは次のようになります。

au BufNewFile,BufRead *.rb      map <buffer> <Leader>t action2
au BufNewFile,BufRead *_spec.rb map <buffer> <Leader>t action1
于 2012-07-20T22:36:52.260 に答える
0

最後に、より具体的な方法を実行します。つまり、これら2つのコマンドの順序を逆にします。

au BufNewFile,BufRead *.rb map <buffer> ,t action2
au BufNewFile,BufRead *_spec.rb map <buffer> ,t action1

一方のコマンドはまだもう一方のコマンドをオーバーライドしていますが、この方法で目的の効果が得られます。他のモードでこのマップで問題が発生しないようnmapに、などのより具体的なマップを使用することをお勧めします。nnoremap

于 2012-07-20T22:32:51.830 に答える