vim 宏的使用技巧收集

By | 2016-03-31

(以下内容中, 如非特殊说明, m 代表任意小写字母, M 代表任意大写字母, 即把宏录制到这个字母上)

基本使用

加速宏的录制和使用

vim 的宏相当好用, 不过如此好用的东西用起来却挺麻烦的, 回想下使用宏的流程:

  1. qm 进入宏录制
  2. 录制宏内容
  3. q 退出宏录制
  4. @m 使用字母指定的宏
  5. @@ 重复最近使用过宏

挺烦的有木有, 大多数时候宏只是个临时的东西, 常用的更适合写成 function, 完全没必要用到 26 个字母

于是我们来简化一下吧:

function! ZF_Setting_VimMacroMap()
    nnoremap Q :call ZF_Setting_VimMacroBegin()<cr>
    nmap M @m
endfunction
function! ZF_Setting_VimMacroBegin()
    nnoremap Q q:call ZF_Setting_VimMacroEnd()<cr>
    nnoremap M q:call ZF_Setting_VimMacroEnd()<cr>@m
    normal! qm
endfunction
function! ZF_Setting_VimMacroEnd()
    call ZF_Setting_VimMacroMap()
    echo 'macro recorded, use M in normal mode to repeat'
endfunction
call ZF_Setting_VimMacroMap()

现在轻快多了:

  1. Q 进入宏录制
  2. 录制宏内容
  3. Q 退出宏录制 (或直接按 M 退出并立刻使用宏)
  4. M 使用宏, 继续按 M 则继续重复宏

修改宏

  • qM 可以给已有的宏新增内容
  • let @m="宏内容" 可以直接设定宏的内容, 当然, 你可以先复制出来, 编辑, 然后再修改

技巧收集

生成一串连续内容

偶尔会想要输入一串类似这样的内容:

<node id="1" />
<node id="2" />
<node id="3" />
...
<node id="300" />

做法:

  1. 复制 <node id="" /> 300 遍, 这个很容易, 复制一行以后 300p 即可

  2. let n=1 来设定个起始值

  3. 录制一个宏

    0f"a                // 定位到你想要的位置
    =n         // 插入变量 n 的值
    let n=n+1
    j                   // 移动到下一行
  4. 重复 300 遍即可 300@m

关键点:

  • <c-r>= 用来插入一段表达式的值 (:h @=)
  • 如果要插入一串字母序列, 可以参考 :h nr2char():h char2nr()

转载请注明来自: http://zsaber.com/blog/p/104

既然都来了, 有啥想法顺便留个言呗? (无奈小广告太多, 需审核, 见谅)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注