42 emacs
我正在阅读这篇关于如何创建vi宏的文章: vi序列宏,我看到了一个有用的宏来在缓冲区中创建一个序列.
1.
2.
...
100.
在vi中,诀窍是可以在一个数字上点击ctrl-a并且它会添加一个,所以这使得宏变得容易.我希望能够在emacs中做同样的事情.
sco*_*zer 63
如果您使用的是Emacs 23(可能是22?),请使用默认情况下kmacro-insert-counter绑定的Emacs C-x C-k TAB.所以对于你的例子,你会这样做:
C-x ( C-x C-k TAB . RET C-x )
所以启动宏,插入计数器后跟'.',换行符,结束宏.然后C-x e e e e e e e等等或者M-1 0 0 C-x e得到100个.
编辑:
忘了提你也可以将计数器设置为初始值.例如从1开始而不是0开始M-1 C-x C-k C-c.
如果您不希望计数器在特定点递增,请在其前面加上C-u.当然,键击在这一点上变得有点荒谬,所以我通常将一个键绑定到插入但不增加.
hua*_*uan 54
那些觉得有太多难以记住的技巧的人可能会发现获得一些更有利可图的elisp:
M-: (dotimes (i 20) (insert (format "%2d.\n" (1+ i))))
jlf*_*jlf 18
Emacs 23在replace-regexp的替换文本中支持elisp片段.
我经常定义遵循这种模式的键盘宏:
\([0-9]+\)以捕获一组一个或多个数字\,(1+ \#1),其中,表示要替换的elisp表单如下,1+是增量函数,并且\#1是第一个捕获的匹配文本,被解释为数字.在花了一分钟来定义键盘宏之后,这使我几乎可以方便地剪切和粘贴以生成大量几乎完全相同的代码块,例如case语句.
请注意,此技术可以很容易地适应例如双数(\,(* 2 \#1))或其他.你甚至可以用它使用的组合来替代下一个元素以任意顺序'position和'nth,但我不会去,现在:).
thd*_*dox 11
自从Emacs发布24.3版(我实际上从版本24.0开始就相信)以来,按键序列已经简化:
<F3> <F3> . <ENTER> <F4>
然后重复<F4>键将重复宏.
诀窍在于,在启动宏之后<F3>,第二次<F3>按键会将键盘宏计数器的当前值插入缓冲区,并将计数器递增1.
其他技巧:
<F3> C-u 2 <F3> . <ENTER> <F4> 将以+2(而不是+1)递增C-u 100 <F3> <F3> . <ENTER> C-u 50 <F4> 将从100开始并在149完成C-x C-k C-f %03d <ENTER> <F3> <F3> . <ENTER> <F4> 将填充零像"000"来源:Emacs手册中的键盘宏计数器部分.