[英]With rails.vim, why don't commands work when the active buffer is empty or not a file that's part of a rails project?
[英]File completion when mapping commands in VIM
我经常创建一个临时映射来对特定文件执行某些操作。
典型的例子是这样的:
:map <leader>f :w<cr>:! bundle exec cucumber features/account/sign_in.feature:41<cr>
我希望从当前目录自动完成文件features/account/sign_in.feature
。
这应该只是将当前文件和shell保存在<leader>f
以运行命令。
它允许我轻松处理一段代码而不考虑跳转到特定文件并运行它。
问题是创建这样的绑定是麻烦且容易出错的 。
映射时 VIM不允许填写文件名 。 使用%
也完全不同(我想静态映射到文件)。
这样做的更好方法是什么?
谢谢。
虽然我认为你的问题应该更清楚,这里有一些提示:
:nnoremap <leader>f :w<bar>!exec "bundle exec cucumber " . expand('%') . ":" . line('.')<CR>
将正确保存并在命令中插入当前文件名/行号
此外,您还需要了解autowrite
选项:
:se autowrite
最后,我通常使用makeprg
来达到这种目的:
:let &makeprg="bundle exec cucumber %"
这有一个额外的好处,使用quickfix命令( :copen
, :colder
, :cnewer
)和(给定一个正确的makef
)也跳转到错误行
我不知道答案,但如果我是你,我会使用cabbr:
:cabbr fas features/account/sign_in.features:
或类似的东西。 它不是自动完成的,但确实可以减少你需要的击键次数。
另一种方法是创建一个从用户命令映射的函数,该函数接受创建映射的参数。 如果我没记错,你可以自定义用户命令完成,这样就可以了。
更新:是的,您可以自定义用户命令。 请参阅:help user-command
这样的事情应该让你开始:
command -complete=file_in_path -nargs=1 Map call CreateMap(expand('<args>'))
function CreateMap(filename)
exec 'map <leader>f :w<cr>:! bundle exec cucumber ' . a:filename . ':41<cr>'
endfun
执行此操作后,请确保“路径”设置包括当前目录“。”,或者如果要以递归方式搜索“./**”。 然后你可以像这样使用Map
用户命令:
:Map fea<tab>ac<tab>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.