如何修改vim插件默认映射?

:map<space>x输出如下:n<Space>x*@:ToggleCheckbox<CR>我想取消这个bullets.vim插件的映射,用这个键来干别的事,请问要怎么... :map <space>x 输出如下:
n <Space>x *@:ToggleCheckbox<CR>

我想取消这个bullets.vim插件的映射,用这个键来干别的事,请问要怎么做呢?
展开
 我来答
hqxz556
2020-03-15 · TA获得超过2831个赞
知道大有可为答主
回答量:1686
采纳率:93%
帮助的人:577万
展开全部

一般情况下,你只要在 vimrc 里按你自己喜欢的方法定义 <space>x 这个映射就行了。因为 vimrc 最先加载,因此定义的映射也最早生效。其它插件在定义映射的时候,习惯上会用 :map <unique> 来避免覆盖已有映射,所以你不用担心自己定义的映射会被覆盖。

-----------------------------

正确编写的插件,上面的方法肯定奏效,一定要先试试看。

还有一些插件,提供了一些可以定义的选项来改变插件的行为,这就只能看插件的帮助文档(通常是英文的)来确定是不是有相关的选项了。但习惯上插件还是不能覆盖已有的映射。

再不行的话,最简单的建议就是不要用这个插件了。如果确实想用,可以看下面的做法,稍有些长。因为这一定程度上是在挽救别人插件的错误。

-----------------------------

你定义在 vimrc 里的映射如果被覆盖,说明插件没有遵循 vim 插件的一般原则。这时,除非你能比插件更晚定义映射,不然没有办法阻止插件覆盖你的定义。

  • 分两种情况,如果这个有问题的插件是一般插件(即是定义在 plugin 下),那么你可以在 vimrc 里加一个自动命令:

au VimEnter * :map <space>x  <something-you-want-to-do>

    VimEnter 这个事件是在 vim 完成启动后触发的,这时所有插件已经加载完毕。因此这时定义的映射,可以覆盖已有的定义。当然上面代码里 <something-you-want-to-do> 的地方要换成实际的定义。

  • 另一种插件是文件类型插件(定义在 ftplugin下),这些插件根据你编辑的文件按需加载,比如你编辑 file.c 时会加载对应 c 语言的插件,编辑 file.py 时会加载对应 python 的插件等等。这些插件在用的时候加载,因此加载的时机是不确定的。这时如果你想覆盖 c 语言插件定义的内容,需要在 after/c.vim 里加入你要定义的内容(如果没有这个文件你自己创建就好)。after 下的脚本会在其它相关的脚本加载之后再加载,所以可以覆盖已有的内容。c.vim 就用来覆盖 c 语言相关的内容。

    但这也不保证成功,因为现在的插件一般可以用 autoload 的机制来延迟加载。这时你没有办法预知代码何时会运行。习惯上不能在 autoload 中定义映射就有这个考虑。

  • 最后的办法,是找到定义映射的那个插件,然后手动改掉相关的定义。但这种做法有不确定性,比如乱改别人的代码可能会导致插件崩溃。像你这种只改个映射可能还好。最重要的是,作者可能不知道这个 bug,将来更新插件什么的,你改的东西又没了,还得再改一遍。因此改别人的代码是下策。


好在你知道这个映射是 bullets.vim 定义的,看名字可能是个普通插件,所以如果 vimrc 的方法不行,优先采用自动命令的方法试一试。

------------------------------------

顺带提一下,取消这个键映射后,你可以执行

:ToggleCheckbox

来完成这个映射本来的功能。


如果这个功能你觉得很常用,只是不习惯用默认的映射,可以在 vimrc 里加上:

nnoremap <key-sequence>  :ToggleCheckbox<CR>

<key-sequence> 那里换成你自己希望的键序列。


如果还有其它疑惑欢迎追问。

更多追问追答
追问
说得很全面了,但是仍有点疑问,难道不是后加载的插件定义的映射会覆盖vimrc的映射吗?还是说vim识别到按键已被映射,所以插件映射配置不会生效?
追答
编写插件通常遵循的约定是:如果默认使用的按键已被映射,就不应覆盖。所以正常情况,你只要保证自己能最早定义就行了(写在 vimrc 里就能保证)。这个约定不是强制的,所以如果插件有特殊目的,或者写插件的人不知道这个约定,那么的确是后定义的覆盖前面的。
来自:求助得到的回答
百度网友023b1c3
科技发烧友

2020-03-15 · 智能家居/数码/手机/智能家电产品都懂点
知道小有建树答主
回答量:1086
采纳率:84%
帮助的人:287万
展开全部
你好,
先进入vim,然后输入:
:unmap <space>x

上面命令是解除"<space>x"映射
然后应该就可以重新使用map进行你自定义的映射了.
你先看一下行吗, 如果行的话,可以将上面解除绑定及自定义映射写入~/.vimrc文件,就不用每次打开vim都重新设置了.
希望对你有帮助,上面的描述我没有去试,你看看行吗?不行的话追问,咱一起研究研究
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式