在正常 vim 模式和 NERDTree 内部为不同的操作映射相同的键

Map same key for different actions in normal vim mode and inside NERDTree

我想在正常 vim mod 中将 Alt+F1 映射到 :NERDTreeFocus,在 NERDTree 视图中映射到 :NERDTreeToggle。我试过这个:

map <silent> <M-1> :NERDTreeToggle<CR>
nmap <silent> <M-1> :NERDTreeFocus<CR>

但它不起作用,显然,我不明白绑定在 vim 中是如何工作的。你能帮我解决一下吗?

您在 :map:nmap 之间的区别仅涉及映射适用的 模式 ;您在这里需要的是 NERDTree 用于其用户界面的 scratch 缓冲区 与所有其他缓冲区之间的区别。幸运的是,Vim 允许定义仅适用于当前缓冲区的映射::help :map-local

为了设置它,您需要在活动的 NERDTree 缓冲区内。幸运的是,插件为其暂存缓冲区设置了自定义 filetype,因此 FileType 事件可用于挂钩设置,而无需直接修改插件或所有命令启动它:

:nnoremap <silent> <M-1> :NERDTreeFocus<CR>
:autocmd FileType nerdtree nnoremap <buffer> <silent> <M-1> :NERDTreeToggle<CR>

补充评论

  • You should use :noremap;它使映射不受重新映射和递归的影响。
  • <M-1> 应该由 Alt + 1 触发,而不是 F1(除非你有一个奇怪的键盘设置)