如何在Vim中为特定文件名设置快捷方式?

时间:2018-10-18 18:19:18

标签: 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

但是没有用。 如果没有条件,快捷键当然是有效的。

1 个答案:

答案 0 :(得分:2)

您需要做两件事:

  • 通过添加<PackageReference/>
  • 使用缓冲区本地映射
  • 可能仅通过<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

另一种选择是像这样将这些映射放入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