VIM禁用插件的插入映射

10

一个插件为我的插入映射添加了一个<leader>is的映射。我有一些想法,可以确定它是哪个插件。但是这并不重要,我不想更改任何外部插件。因此,我想禁用这个映射。我尝试了以下方法:

一个插件为我的插入映射添加了一个<leader>is的映射。我有一些想法,可以确定它是哪个插件。但是这并不重要,我不想更改任何外部插件。因此,我想禁用这个映射。我尝试了以下方法:

imap <leader>is  <nop>

我没有帮忙。

您有什么建议?

顺便提一下,我想问如何在vimrc中禁用所有插件的插入映射?

2个回答

14
要删除插入模式映射,请使用:iunmap命令:
:iunmap <Leader>is

我不知道是否可以进行“批量取消映射”,但至少您可以使用以下命令列出所有活动的插入模式映射:

:imap

或者,甚至更好的是,用
:verbose imap

这还将告诉您在哪里首次定义了映射。


编辑:澄清一下,取消映射需要在插件加载之后完成。为此,在~/.vim/after/plugin/中创建一个包含以下内容的文件(参见@ZyX的答案):

" myafter.vim: will be executed after plugins have been loaded
iunmap <Leader>is

Vim 返回一个错误:没有这样的映射。然而,这个映射仍然在imap列表中。 - user14416
@user14416 请查看 @ZyX 的回答:在你的vimrc中放置“:iunmap ...”没有效果!相反,使用“:verb imap”来识别负责映射的插件,然后为该插件创建一个“after”目录,并添加你的取消映射命令。 - glts
我创建了 after/plugin/<plugin_name>.vim 文件,但仍然没有效果。 - user14416
@user14416 那么映射是从哪里来的呢?是什么插件呢? - glts
插件位置是 plugin/a.vim。我发现 after/plugin/a.vim 没有被加载。 - user14416
@user14416 确认您的after目录确实位于您的Vim主目录$HOME/.vim/:echo $HOME)。 我已经尝试过“a.vim”,它可以正常工作。 - glts

8

如果你在vimrc中插入命令,则在插件定义侵入式映射之前执行,这就是为什么它没有效果的原因。要使其生效,您应该在插件之后运行它,通常可以通过将其放入~/.vim/after/plugin/disable_mappings.vim(除了disable_mappings之外的任何名称都可以)来实现。第二种方法是使用VimEnter事件:

augroup DisableMappings
    autocmd! VimEnter * :inoremap <leader>ic <Nop>
augroup END

要禁用所有映射,请参见:h 'paste':h 'pastetoggle',还有:h :imapclear(尽管后者会删除映射而不是暂时禁用它们)。


当然,在我建议使用inoremap … <Nop>的地方,您也可以使用iunmap。我怎么会忘记这个命令呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接