Vim 如何取消映射';nmap<;沉默>&书信电报;缓冲区>';映射

Vim 如何取消映射';nmap<;沉默>&书信电报;缓冲区>';映射,vim,Vim,这是一个关于如何取消映射密钥绑定的问题。通常,取消映射键绑定并不困难,但在这种情况下我遇到了困难。我试图在:help中找到相关信息,但是keybinding有点复杂——我仍然不理解它——我无法从.vimrc这样的配置文件中取消映射它 用于编辑OCaml源代码的“merlin”包为vim提供了一组配置文件。有一个定义我不想要: nmap <silent><buffer> gd :MerlinLocate<return> 在编辑OCaml文件时,手动在:提示下

这是一个关于如何取消映射密钥绑定的问题。通常,取消映射键绑定并不困难,但在这种情况下我遇到了困难。我试图在
:help
中找到相关信息,但是keybinding有点复杂——我仍然不理解它——我无法从.vimrc这样的配置文件中取消映射它

用于编辑OCaml源代码的“merlin”包为vim提供了一组配置文件。有一个定义我不想要:

nmap <silent><buffer> gd  :MerlinLocate<return>
在编辑OCaml文件时,手动在
提示下,
gd
被取消映射,如我所愿。(我不理解
的意思,但似乎有必要取消密钥绑定的映射。)

但是,如果我将同一行放在.vimrc(或使用
-u
运行的文件)中,
gd
不会取消映射。(将
nunmap
更改为
unmap
执行相同的操作--在
提示符下工作,而不是在启动文件中。)

如何取消映射
gd

(问题是在执行
nunmap
命令时这些键没有映射,因为此时当前缓冲区中没有OCaml源文件吗?不过,我肯定有一些解决方法。)

中的
表示此映射是缓冲区本地映射

由于每次用值
ocaml
触发
FileType
事件时,它都是为每个
ocaml
缓冲区定义的,因此很难全局覆盖它

不过,应该做的是在您自己的
ocaml
ftplugin中覆盖该映射:

" in after/ftplugin/ocaml.vim
nunmap <buffer> gd
/ftplugin/ocaml.vim之后的
”
nunmap gd
但是这都是一个没有意义的问题,因为该映射可以被禁用。
nmap gd:MerlinLocate
中的
意味着该映射是缓冲区本地的

由于每次用值
ocaml
触发
FileType
事件时,它都是为每个
ocaml
缓冲区定义的,因此很难全局覆盖它

不过,应该做的是在您自己的
ocaml
ftplugin中覆盖该映射:

" in after/ftplugin/ocaml.vim
nunmap <buffer> gd
/ftplugin/ocaml.vim之后的
”
nunmap gd

但这都是一个没有实际意义的问题,因为该映射可能会被禁用。

谢谢Romaill。我假设您打算将
nunmap gd
添加到一个新文件.vim/after/ftplugin/ocaml.vim(这是一个好主意——我不知道这个技巧)。然而,当我这样做时,我在该文件的
nunmap
行上得到了“E31:没有这样的映射”。嗯。我想知道这失败的原因是否是因为OCaml安装程序如何加载merlin文件。它没有放在.vim下面。我会努力实现这个想法。(Re“但这都是一个没有意义的问题,因为可以通过一个简单的全局变量禁用该映射”:是的,但我需要其他默认键绑定。)
:scriptnames
显示.vim/after/ftplugin/ocaml.vim在主MacVim.app目录下的ocaml.vim之后运行,但是在~/.opam/4.06.1/share/merlin/vim/autoload/merlin.vim中的merlin配置脚本之前。因此,我需要弄清楚如何在文件运行后运行脚本。或者我应该放弃并注释~/.opam/4.06.1/share/merlin/vim/autoload/merlin.vim中的
gd
定义,然后在每次有新版本的文件时再次修复它。是的,映射是在一个函数中定义的,这使得取消映射有点困难。在我看来,这是一个糟糕的设计。我想你必须在插件中编辑它。谢谢Romaill。我假设您打算将
nunmap gd
添加到一个新文件.vim/after/ftplugin/ocaml.vim(这是一个好主意——我不知道这个技巧)。然而,当我这样做时,我在该文件的
nunmap
行上得到了“E31:没有这样的映射”。嗯。我想知道这失败的原因是否是因为OCaml安装程序如何加载merlin文件。它没有放在.vim下面。我会努力实现这个想法。(Re“但这都是一个没有意义的问题,因为可以通过一个简单的全局变量禁用该映射”:是的,但我需要其他默认键绑定。)
:scriptnames
显示.vim/after/ftplugin/ocaml.vim在主MacVim.app目录下的ocaml.vim之后运行,但是在~/.opam/4.06.1/share/merlin/vim/autoload/merlin.vim中的merlin配置脚本之前。因此,我需要弄清楚如何在文件运行后运行脚本。或者我应该放弃并注释~/.opam/4.06.1/share/merlin/vim/autoload/merlin.vim中的
gd
定义,然后在每次有新版本的文件时再次修复它。是的,映射是在一个函数中定义的,这使得取消映射有点困难。在我看来,这是一个糟糕的设计。我想你必须在插件中编辑它。