注册 登录
编程论坛 Linux教室

如何用 vim 生成 zklhp 展示的代码。

pangding 发布于 2012-09-03 01:34, 636 次点击
有关 z版 的 emacs 神技,见此帖:https://bbs.bccn.net/thread-380517-1-1.html

vim 想来也可以完成同样的工作。我提供两种不同风格的方法。

一:
比较容易操作的是用宏记录:
在 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 编辑 ]
7 回复
#2
pangding2012-09-03 01:35
另外我录完屏也不会转 gif。反正 vim 是按键流。一般不需要看屏幕,只需要看指法。
#3
zklhp2012-09-03 08:01
学习
#4
zklhp2012-09-03 08:01
为了实现这个还编程 太复杂啊
#5
madfrogme2012-09-03 08:48
学习第二种方法
试了一下,果然强悍

[ 本帖最后由 madfrogme 于 2012-9-3 10:28 编辑 ]
#6
有容就大2012-09-03 09:11
厉害啊  强烈欣赏 无条件帮顶。
#7
zklhp2012-09-03 20:55
pangding版主上线了速度结题罢。。
#8
pangding2012-09-03 21:30
以下是引用zklhp在2012-9-3 08:01:55的发言:

为了实现这个还编程 太复杂啊

其实一般在 vim 里用冒号命令,使用者一般不会感觉自己是在编程。vim 内置的语言一般不认为是一种编程语言,因为它不够强大。这和 emacs 的 elisp 不能比。
但一般都认为 vi 对文本的处理能力比 emacs 强,所以才被认为是编辑器之神。emacs 主要是有点像操作系统了,能干好多根本不是编辑器的份内事。在这些方面,vi 不如 emacs。
1