如何用 vim 生成 zklhp 展示的代码。
有关 z版 的 emacs 神技,见此帖:https://bbs.bccn.net/thread-380517-1-1.htmlvim 想来也可以完成同样的工作。我提供两种不同风格的方法。
一:
比较容易操作的是用宏记录:
在 bash 里 $vim 回车,进入 vim 之后,按
ia[1] = 0;<esc>
将 a[1] = 0; 这个语句插入缓冲区。并用 <esc> 键退出插入模式。(注意:蓝色字符请统一理解,不要看成 小于号,字母e... 这样的东西。)
之后
qaYp<ctrl-a>q
qa 开始记录键盘宏至寄存器 a,Y 复制整行,p 粘贴至下一行,<ctrl-a>自增离光标最近的数字,q 停止键盘记录。
再之后
997@a
现在已经有两行内容了,以寄存器 a 为内容,执行 997 次宏。以得到一共 999 行。
这就是第一种方法,全部在 insert mode 和 normal mode 下完成。是容易操作、也最方便平时使用的方法。
这个方法的最后一步有点慢,也许要花上零点几秒,并看到屏幕高速向上滚动。因为执行宏的过程 vim 会同步刷屏以更新缓冲区内容。
二:
另一种方法是用冒号命令。也就是 vim 的复杂操作技巧。
冒号命令里有 for 指令。所以这种方法其实就是在编程。只不过用的是 vim 的内置语言。不知道在 z版 眼中算不算作弊。
不过 vim 的内置语言和 emacs lisp 不同,除了写脚本以外,一般也经常在编译的时候动态使用。有点类似 emacs 里的 <A-x> 指令。
具体方法是,进入 vim 之后,直接按冒号
:for i in range(1, 999)
call setline(i, "a[".string(i)."] =0;")
endfor
回车就行了。这个执行过程中不刷屏。如果是 9999 的话,明显优于第一种方法。前者得耗个一两秒,后者还是瞬间。
另外希望 z版 结帖之后也能告诉告诉大家,emacs 里是怎么做到的。至少我不会。
[ 本帖最后由 pangding 于 2012-9-3 01:37 编辑 ]