背景:我一直在使用此映射map ,r :! bundle exec ruby %<CR>
来轻松运行我当前正在编辑的测试文件。但是我也这样做:
map ,t :! bundle exec ruby test/integration/some_integration_test.rb<CR>
这样我就可以在处理其他文件时用两个键击运行这个特定的集成测试。它具有硬编码路径,当我移动到应用程序的某个其他区域时,我在上面的命令中键入另一个集成测试文件路径。
如何制作自动创建此类映射的命令?
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
运行之前存储的文件路径