vim - 如何在vim中为特定文件名设置快捷方式?
问题描述
在我的 .vimrc 我有
" Rspec Shortcuts
nnoremap <leader>t :!clear; bundle exec rspec % --fail-fast<cr>
" Minitest Shortcuts
nnoremap <leader>t :!clear; bundle exec ruby -w -Itest %<cr>
我想让这些快捷方式以文件名为条件。
我试过这样设置条件:
if @% =~ '*_spec.rb'
nnoremap <leader>t :!clear; bundle exec rspec % --fail-fast<cr>
endif
if @% =~ '*_test.rb'
nnoremap <leader>t :!clear; bundle exec ruby -w -Itest %<cr>
endif
但它没有用。如果没有条件,快捷方式当然可以工作。
解决方案
你需要做两件事:
- 通过添加使用缓冲区本地映射
<buffer>
- 仅在特定文件名上设置这些映射,可能通过
:autocmd
映射将如下所示:
nnoremap <buffer> <leader>t :!clear; bundle exec rspec % --fail-fast<cr>
nnoremap <buffer> <leader>t :!clear; bundle exec ruby -w -Itest %<cr>
现在您需要为特定FileType
的 's 或文件名加载这些映射:
augroup RubyTestMappings
autocmd!
autocmd BufNewFile,BufRead *_spec.rb nnoremap <buffer> <leader>t :!clear; bundle exec rspec % --fail-fast<cr>
autocmd BufNewFile,BufRead *_test.rb nnoremap <buffer> <leader>t :!clear; bundle exec ruby -w -Itest %<cr>
augroup END
另一种选择是将这些映射放入~/.vim/after/ftplugin/ruby.vim
如下:
if @% =~ '*_spec.rb'
nnoremap <buffer> <leader>t :!clear; bundle exec rspec % --fail-fast<cr>
endif
if @% =~ '*_test.rb'
nnoremap <buffer> <leader>t :!clear; bundle exec ruby -w -Itest %<cr>
endif
如需更多帮助,请参阅:
:h :map-local
:h :autocmd
:h BufNewFile
:h BufRead
推荐阅读
- python - 在排序一个列表期间将不同列表中的相关元素保持在一起
- c# - 如何对通用列表对象进行排序
- javascript - 向和从 js 服务器发送数据的基本方法?
- json - 使用 Pyspark 处理 JSON 结构
- amazon-web-services - 为什么角色假设应该在 lambda 内部完成?
- html - 如何将数值绑定到 CSS 以创建时间线?
- docker - 如何为 docker compose 环境变量设置运行时变量
- javascript - 仅在 Javascript 中具有不同段落的动态 Div
- tsql - 表格模型中的测量列未在浏览器中显示正确的值
- javascript - 调用此函数时如何获取返回值?