📜  vim 中的 map vs noremap (1)

📅  最后修改于: 2023-12-03 15:35:35.866000             🧑  作者: Mango

Vim 中的 map vs noremap

在 Vim 中, mapnoremap 是两个非常常见的命令,用于映射按键到命令中。这个功能主要是为了让你可以自定义一些命令,以方便你的编程。

map

使用 map 命令,可以将一组按键映射到命令。可以使用以下的语法进行映射:

:map {lhs} {rhs}

其中,{lhs} 是你要映射的按键组合(左手边),{rhs} 是你要映射到的命令(右手边)。例如:

:map <leader>y yy

这个命令就将 <leader>y 映射到了 yy 命令,也就是复制当前行。

但是,map 命令有一个问题,就是会递归映射。也就是说,如果你在映射的命令中再次使用了 {lhs} 中的按键组合,那么这个按键组合也会被映射到你的命令中。例如:

:map a b
:map b c

这里,我们将 a 映射到了 b,而 b 又映射到了 c。这样,当你在使用 a 时,实际上会触发 b 的命令,也就是触发了 c 的命令。

noremap

为了解决递归映射的问题,Vim 提供了 noremap 命令。和 map 命令类似,noremap 命令也是用于映射按键到命令中的。但是,它不会递归映射,而是只映射一次。使用以下的语法进行映射:

:noremap {lhs} {rhs}

例如:

:noremap <leader>y yy

这个命令就将 <leader>y 映射到了 yy 命令,和前面的例子一样。

使用 noremap 命令时,你不必担心递归映射带来的副作用。它只会映射一次,不会递归映射。

总结

mapnoremap 命令都是用于映射按键到命令中的,但是它们的映射规则是不同的。map 命令递归映射,可能会带来副作用,而 noremap 命令只映射一次,不会递归映射。在使用这两个命令时,你需要了解它们的映射规则,并根据自己的需要选择使用哪个。