繁体   English   中英

Vim键映射不匹配

[英]Vim key mapping mismatch

我使用vim在ruby和python中编码,我的vimrc有一个设置可以轻松输入断点:

au FileType python  map <silent> <leader>b oimport ipdb; ipdb.set_trace()<esc>
au FileType python  map <silent> <leader>B Oimport ipdb; ipdb.set_trace()<esc>
au FileType ruby    map <silent> <leader>b orequire 'pry'; binding.pry<esc>
au FileType ruby    map <silent> <leader>B Orequire 'pry'; binding.pry<esc>

但是,偶尔我得到错误的命令,例如在ruby文件中的ipdb ,我必须重新启动vim。 可能是什么问题呢?

问题是您在全局定义映射。

解决方案很简单:将<buffer>参数添加到映射中,以使它们成为“缓冲区本地”。

au FileType python  map <buffer> <silent> <leader>b oimport ipdb; ipdb.set_trace()<esc>
au FileType python  map <buffer> <silent> <leader>B Oimport ipdb; ipdb.set_trace()<esc>
au FileType ruby    map <buffer> <silent> <leader>b orequire 'pry'; binding.pry<esc>
au FileType ruby    map <buffer> <silent> <leader>B Orequire 'pry'; binding.pry<esc>

请参阅:help <buffer>

也:

  • 您应该使用:nmap:nnoremap而不是:map 首选:nnoremap
  • 您应该将这些行包装在自动命令组中并重置它们,以防止在重新获取vimrc时自动命令堆积:

     augroup python autocmd! autocmd FileType python nnoremap <buffer> <silent> <leader>b oimport ipdb; ipdb.set_trace()<esc> autocmd FileType python nnoremap <buffer> <silent> <leader>B Oimport ipdb; ipdb.set_trace()<esc> augroup END augroup ruby autocmd! autocmd FileType ruby nnoremap <buffer> <silent> <leader>b orequire 'pry'; binding.pry<esc> autocmd FileType ruby nnoremap <buffer> <silent> <leader>B Orequire 'pry'; binding.pry<esc> augroup END 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM