我使用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>
但是,偶尔我会得到错误的命令,例如ipdb在ruby文件中,我必须重新启动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