vim - 同一行映射失败的多个命令

时间:2018-01-15 05:29:21

标签: vim

我对vim / gvim很新。这是我第一次尝试修改〜/ .vimrc文件。 我试图将F11映射到多个命令。 我正在尝试的是

    inoremap jj <ESC>
    map <F11> h e a , jj && l && x

虽然手动输入h e a , jj l x对我有用,但使用F11键却不行。 我想要实现的是 -

1. get to the end of the current word
2. append ','
3. move right one place and delete that space between ',' and the start of next word.

我不明白我的映射有什么问题。 请帮帮我。

1 个答案:

答案 0 :(得分:4)

首先,让我们构建一个适当的宏

表示
  
      
  1. 到达当前单词的末尾
  2.   
e
  
      
  1. 追加','
  2.   
ea,<Esc>
  
      
  1. 向右移动一个地方......
  2.   
ea,<Esc>l
  

...并删除','和下一个单词开头之间的空格。

ea,<Esc>lx

其次,让我们在正确的非递归映射的右侧使用它:

nnoremap <F11> ea,<Esc>lx

值得注意的是:

  • <Space>是合法的普通模式命令,因此宏中的任何<Space>都被解释为“将光标向右移动一个单元格”,请参阅:help l

  • &也是合法的正常模式命令,请参阅:help &

  • 在宏中,每个字符都有意义,因此h e a , jj && l && x被解释为:

    1. 将光标向左移动一个单元格,
    2. 将光标向右移动一个单元格,
    3. 将光标移动到当前单词的末尾
    4. 将光标向右移动一个单元格,
    5. 附加空格,逗号,空格
    6. 将光标向右移动一个单元格,
    7. 重复最后一次替换,
    8. 重复最后一次替换,
    9. 将光标向右移动一个单元格,
    10. 将光标向右移动一个单元格,
    11. 将光标向右移动一个单元格,
    12. 重复最后一次替换,
    13. 重复最后一次替换,
    14. 将光标向右移动一个单元格,
    15. 剪切光标下的字符。
  • 您的jj插入模式映射在普通<Esc>上提供零值,因此没有理由在任何映射中使用它。

  • 您的映射因此变为非递归映射,因此nmap变为nnoremap