目录
(以下内容中, 如非特殊说明, m
代表任意小写字母, M
代表任意大写字母, 即把宏录制到这个字母上)
基本使用
加速宏的录制和使用
vim 的宏相当好用, 不过如此好用的东西用起来却挺麻烦的, 回想下使用宏的流程:
qm
进入宏录制- 录制宏内容
q
退出宏录制@m
使用字母指定的宏@@
重复最近使用过宏
挺烦的有木有, 大多数时候宏只是个临时的东西, 常用的更适合写成 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()
现在轻快多了:
Q
进入宏录制- 录制宏内容
Q
退出宏录制 (或直接按M
退出并立刻使用宏)M
使用宏, 继续按M
则继续重复宏
修改宏
qM
可以给已有的宏新增内容let @m="宏内容"
可以直接设定宏的内容, 当然, 你可以先复制出来, 编辑, 然后再修改
技巧收集
生成一串连续内容
偶尔会想要输入一串类似这样的内容:
<node id="1" />
<node id="2" />
<node id="3" />
...
<node id="300" />
做法:
-
复制
<node id="" />
300 遍, 这个很容易, 复制一行以后300p
即可 -
先
let n=1
来设定个起始值 -
录制一个宏
0f"a // 定位到你想要的位置
=n // 插入变量 n 的值 let n=n+1 j // 移动到下一行 -
重复 300 遍即可
300@m
关键点:
<c-r>=
用来插入一段表达式的值 (:h @=
)- 如果要插入一串字母序列, 可以参考
:h nr2char()
和:h char2nr()
转载请注明来自: http://zsaber.com/blog/p/104
既然都来了, 有啥想法顺便留个言呗? (无奈小广告太多, 需审核, 见谅)