Vim和GVim:leader键无法使用

19

我安装了一些插件,包括NERDCommenter和NERDTree。但是,我无法正确地为它们设置leader键。当我输入:map时,它们显示默认配置。

v  \c<Space>     <Plug>NERDCommenterToggle
n  \c<Space>     <Plug>NERDCommenterToggle
v  \cc           <Plug>NERDCommenterComment
n  \cc           <Plug>NERDCommenterComment

\c<space> 的作用与按下 c<space> 相同。我尝试在我的主目录下的 .vimrc 中使用以下方式重新映射前导键:

let mapleader = ","

当我重新启动vim并输入:map时,这一变化就会反映出来。

v  ,c<Space>     <Plug>NERDCommenterToggle
n  ,c<Space>     <Plug>NERDCommenterToggle
v  ,cc           <Plug>NERDCommenterComment
n  ,cc           <Plug>NERDCommenterComment

但是,,c<space> 仍然表现得像我按下了 c<space>。发生了什么事情,我该如何解决?

编辑: 在 VIM 中测试了这个问题,结果行为相同。


你需要非常快地按下这些键。set updatetime?的输出是什么?那就是你拥有的毫秒数。 - romainl
updatetime=4000。这是默认的4秒。我不会击打得太慢。 - Eric Hu
2
@balki: http://meta.stackexchange.com/questions/25925/vim-questions-so-or-su - sehe
1
你甚至无法想象我有多感激这个帖子。一万次的感谢!!! - sjas
4个回答

19

在加载任何插件之前,要先定义mapleadermaplocalleader键。

就在你的 .vimrc 文件顶部!


14
映射似乎有些奇怪,我原本预期的不是这样。
v  <Leader>c<Space>     <Plug>NERDCommenterToggle
n  <Leader>c<Space>     <Plug>NERDCommenterToggle
v  <Leader>cc           <Plug>NERDCommenterComment
n  <Leader>cc           <Plug>NERDCommenterComment

为了它们能够正常工作。我怀疑您是在插件加载后设置了mapleader。


2
当调用map/noremap时,<Leader><LocalLeader>会被扩展。如果 OP 在映射设置后更改了 mapleader,则这些更改不会反映在它们中。 - Cat Plus Plus
我在我的~/.vimrc中使用了let mapleader = ","。根据我所了解的,.vimrc会在任何插件之前被加载,而这些插件会定义映射(但我并不完全确定)。 - Eric Hu
4
@EricHu:如果我没记错,插件是在 vimrc 加载时加载的。尝试将 mapleader 设置移到顶部?另请参阅 vimdoc 上的[注意事项]。 - sehe
1
@sehe 呻吟 是的,就是那样。谢谢! - Eric Hu
@EricHu:假设我很高兴你“找到”它了! - sehe
let mapleader = "," 移动到 ~/.vimrc 的顶部对我有用,谢谢! - Yacine Rouizi

14

如果您将超时设置为零,则vim在mapleader之后不会等待按键。

:set timeout timeoutlen=0 ttimeoutlen=0

1
这可能不是大多数人的答案,但可能会对少数人有所帮助...
我正在运行一个debian发行版(在我的情况下是PureOS,尽管具体的版本可能并不完全重要),默认的\前导键被映射为<
对我来说,重新映射键代码是解决方法: sudo setkeycodes 56 43

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