在VIM中将<space>映射到<leader>

时间:2019-02-20 13:45:52

标签: vim

我想在VIM 7.4中将<space>键映射到<leader>(当前是这里的\键)。

我还希望能够同时使用<space>\键作为引导键。

如果可能的话,很高兴在我键入/字符时出现在右下角(而不是像<20>这样的时髦东西,但是我可以不用它。

/ p>

我试图

nmap <space> <bslash>

这仅适用于简单的<leader>keys命令,但是<leader><leader>key命令(如 easymotion 映射)无效。

我也尝试过

let mapleader = " "
nmap <bslash> <space>

但与上述问题类似,<bslash>键对<leader><leader>key命令不再起作用。

我已经在这些相关的问题/维基页面上尝试了很多东西:

1 个答案:

答案 0 :(得分:1)

我看不到您的.vimrc,所以我不能保证这是问题所在,但是我敢打赌,问题来自使用nnoremap。以下对我有用:

let mapleader =" "
nmap <leader>i iHello World<esc>
nmap <bslash> <space>

我可以使用<space>i<bslash>i,并且它们都运行iHello World<esc>映射。但这:

let mapleader =" "
nnoremap <leader>i iHello World<esc>
nnoremap <bslash> <space>

不起作用。 <space>i运行该映射,但是<bslash>i不运行该映射,这正是所期望的,因为nnoremap用于避免嵌套/递归映射。因此,一种可行的解决方案是在各处使用nmap。我绝对不建议这样做,因为您可能最终会陷入地图循环。该解决方案应该更好地工作:

let mapleader =" "
nnoremap <leader>i iHello World<esc>
nmap <expr> <bslash> mapleader

请注意,如果更改mapleader设置,则该设置将中断,因为:h mapleader说:

Note that the value of "mapleader" is used at the moment the mapping is
defined.  Changing "mapleader" after that has no effect for already defined
mappings.