vimrc中'inoremap'的含义是什么?

时间:2012-02-10 02:02:51

标签: vim

vimrc示例文件

下面有一行
inoremap Ctrl-u Ctrl-G u Ctrl-u

inoremap的含义是什么?这一行的功能是什么?

3 个答案:

答案 0 :(得分:18)

有关命令为何具有如此奇怪名称的详细信息,请参阅mapnoremap之间的差异this excellent description。真的很高兴知道!

总结那篇文章,这是一个选择引用:

  

*map命令的一个缺点是递归的危险......

     

Vim提供了另一组不会采用映射的映射命令   在他们执行行动时考虑到这一点。

所以noremap来避免像

这样的映射的可怕递归
:nmap dd O<esc>jddk

其中地图右侧的dd递归到地图的左侧定义,而Vim陷入了无限循环!

答案 1 :(得分:14)

vim :help inoremap非常有诗意:

:ino[remap] {lhs} {rhs}         mapmode-i             :ino :inoremap
:ln[oremap] {lhs} {rhs}         mapmode-l             :ln  :lnoremap
:cno[remap] {lhs} {rhs}         mapmode-c             :cno :cnoremap
                    Map the key sequence {lhs} to {rhs} for the modes
                    where the map command applies.  Disallow mapping of
                    {rhs}, to avoid nested and recursive mappings.  Often
                    used to redefine a command.  {not in Vi}

因此,它为 ^ U 创建一些插入模式映射,显示文件名(^G,撤消最近的更改(u),并向上滚动缓冲区半屏(^U)。

我不知道为什么有人会想要这个特定的命令序列,除了演示inoremap功能之外 - ^U指的是命令在创建定义时的含义,而不是回调重新定义的^U映射。

答案 2 :(得分:4)

我也想知道这件事。见http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-Tutorial(Part_1)#Insert_mode_maps

插入模式地图

要映射仅在插入和替换模式下工作的键,请使用&#39; imap&#39;或者&#39; inoremap&#39;命令。

示例:以下命令映射以插入当前缓冲区的目录名:

:inoremap <F2> <C-R>=expand('%:p:h')<CR>

要显示当前定义的插入模式地图,请使用&#39; imap&#39;没有任何参数的命令:

:imap

要从插入模式中删除键盘映射,请使用&#39;:iunmap&#39;命令。例如,以下命令将删除插入模式映射。

:iunmap <F2>

由于可打印键在插入模式下在当前缓冲区中插入字符,因此应使用不可打印的键来创建插入模式映射。不可打印键的一些示例包括功能键,以Ctrl或Alt键为前缀的键。

[剪断]

所以,例如,在我的〜/ .vimrc中我有

inoremap jk <ESC>
inoremap jj <Esc>

在插入模式下按下时,返回普通模式。