我可以在VIM中使用空格键作为"mapleader"吗?

106

9
太棒了!刚看了相同的博客文章,在尝试 <SPACE> 后发现了这个... 我发现在 MacVim 中,这并没有从空格键中移除“向前移动一个字符”的映射,所以对于那些通过 Google 查找此问题的人 - 在“let mapleader...”之前添加“nnoremap <SPACE> <Nop>”,这对我有用。 - okonomichiyaki
我使用 let mapleader = " "。你也可以尝试 let mapleader = "\<Space>" - tmillr
5个回答

151

可以尝试以下方法:

let mapleader=" "

同时要记得在此之前写入以下代码,以确保空格键没有被预先映射:

nnoremap <SPACE> <Nop>

23
如上面的spacemanaki在问题中所评论的,需要使用nnoremap <SPACE> <Nop>才能使它起作用。 - Sasha
1
@Sasha:真的吗?你能解释一下为什么吗?如果是真的,也许你应该编辑一下问题。 - greg0ire
5
如果没有Sasha的映射,按下<Space>键不会像其他键一样作为地图前缀。在正常模式下,<Space>被映射为<right>。只需连续按几次<space>,就会出现不希望看到的行为,可以通过nnoremap <Space> <nop>来修复它。 - freeo
3
补充一下这个答案,注意mapleader的值只对在设定mapleader之后发生的映射有影响。请参考:help leader - evnu
1
我不得不保存并关闭rc文件。我使用了:source%,但空格重映射没有起作用。 - Jonathan Morales Vélez

81

Mapleader是Vim的字符串变量。如果要将space用作leader,必须转义特殊字符。

let mapleader="\<Space>"

更多信息请参见:

http://vimdoc.sourceforge.net/htmldoc/eval.html#expr-quote

编辑:

这在我的Vim版本中已经不再有效了。即使按照评论中的建议通过运行nnoremap <SPACE> <Nop>来取消正常模式下的空格键映射。

最终我采用了下面答案中给出的解决方案。

map <Space> <Leader>

1
另外,请确保使用双引号 "\<Space>" 而不是单引号 '\<Space>' - crlane
2
我更喜欢这个答案。 - Sang Dang
1
在 nvim 中,let mapleader = "\<Space>" 对我有效,但在 vim 中无效。map <Space> <Leader> 在 vim 中也对我无效。 - Günter Zöchbauer
1
noremap <Space> <Nop> map <Space> <Leader> 在 Vim 中生效。 - Günter Zöchbauer
1
我必须在Neovim上删除=周围的空格才能使我的工作正常。 - Nikhil CSB
1
我的Vim版本 - 你能说一下是哪个版本吗? - icc97

22

上述解决方案很好,但是底部右侧命令角没有任何显示。如果您无论如何都不需要使用\键,则可以尝试使用map <SPACE> <leader>\将显示在命令角中。此外,您不必像上面的评论建议那样先取消映射空格。


3
这会导致 NERD Commenter 失效。至少在 Vim 8 和 Neovim 中,如果开启了 showcmd,则空格会显示为 <20>,因此我猜想在新的 Vim 版本中,这个答案已经过时了。 - user31389
1
我想在这里补充一点,如果你已经习惯了默认的 leader,但想要使用 space 键以提高效率,那么这也是最好的解决方案。"\r" 仍然深入到我的肌肉记忆中,用于打开 Nerd Tree 和使用 cscope,所以即使将 space 映射到 leader 上,它仍然可以正常工作(虽然我不觉得需要使用 Nerd Commenter)。 - DrEsperanto
哇!我一直在使用逗号作为 leader,从不知道反斜杠空格会出现在右下角... 嗯,我想逗号也会出现,但以前从未注意过。 - icc97

4

如果您正在使用neovim和lua配置,您可以尝试以下方法:

-- map leader to <Space>
vim.keymap.set("n", " ", "<Nop>", { silent = true, remap = false })
vim.g.mapleader = " "

0

nnoremap <space> <Nop>
nnoremap <nowait> <space> /

nnoremap <空格> <Nop>
nnoremap <nowait> <空格> /


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