我想为具有相同后缀的文件定义不同的映射。
E.g。为所有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>
上述解决方案在我的机器上不起作用,因为第二个au
“覆盖”了第一个。
是否可以编写此类au
?
更新:如果我只打开了一个缓冲区,只需将最具体(规格)的一个放在通用的(rb)下即可。只要打开spec文件,常规ruby文件就会丢失* .rb映射。
答案 0 :(得分:1)
在这种情况下,反转autocommands
并添加<buffer>
可以获得所需的行为,即:
au BufNewFile,BufRead *.rb map <buffer> ,t action2
au BufNewFile,BufRead *_spec.rb map <buffer> ,t action1
此排序将实现正确的每文件名映射。
但是您应该注意,在打开*_spec.rb
个文件时,两个 map
命令都会运行:action1
和 {{1 }}。对于某些命令,这可能是不可取的。
另外,如果您将action2
设置为逗号:,,那么您的映射应如下所示:
<Leader>
答案 1 :(得分:0)
最后一个更具体。换句话说,颠倒这两个命令的顺序。
au BufNewFile,BufRead *.rb map <buffer> ,t action2
au BufNewFile,BufRead *_spec.rb map <buffer> ,t action1
一个命令仍然覆盖另一个命令,但这样可以达到你想要的效果。请注意,您可能希望使用更具体的地图,例如nmap
,或者更好的nnoremap
,这样您就不会在其他模式下遇到此地图的问题。