如何告诉emacs将某些表达式从第x行插入到第y行

时间:2011-12-25 17:40:14

标签: emacs

在我的一些编程中,最近,我经常不得不手动输入长std::vector的值。所以对于大小为30的向量,我必须继续输入

myvec[0]=1.0;
myvec[1]=4.6;
myvec[2]=6.7;
myvec[3]=7.8;
.
.
myvec[29]=87;

我使用Emacs作为文本编辑器。是否有可能在Emacs中以某种方式指定从第30行到第59行插入行

myvec[0]= ;
myvec[1]= ;
myvec[2]= ;
.
.
myvec[29]= ;  

当然,必须手动输入向量的各个值,但它会一次又一次地为我节省大量的输入或复制/粘贴myvec[]

5 个答案:

答案 0 :(得分:6)

Keyboard Macros是 更简单的方法。

CX myvec[ CX CK {{ 1}} RET CX

  • C-x 启动宏定义
  • C-X C-K C-1 插入并递增计数器
  • C-x 结束宏 定义

然后 M-3 M-9 C-X 电子

  • M-3 M-9 是捷径 C-u ] = ;并用于发送39 参数
  • C-x e 执行最后一个宏 记录

因此两者的组合执行宏观39次。

您还可以查看the manual,了解save他们和edit他们的身份。

答案 1 :(得分:4)

尝试此序列(Emacs高尔夫得分= 17):

< F3> ý v 电子 Ç [ < F3> ] SPC = SPC ; CJ M-3 0 < F4>

答案 2 :(得分:2)

您可以使用键盘宏执行此操作,但是如果您经常需要这样做,那么您最好使用可以使用Mx调用的函数,并要求插入字符串,序列的起始编号和结束号:

(defun my-insert-numbered-template (string start end)
  (interactive "sString (use %%s as a placeholder for the number) : \nnSequence start: \nnSequence end: ")
  (while (<= start end)
    (insert (format string start) "\n")
    (incf start)))

答案 3 :(得分:2)

C-x 开始录制键盘宏。 然后输入myvec[ F3 ] ; RET 然后 Cx 完成定义你的宏。

现在,你可以简单地说 C-u 29 C-x e 。它会运行宏29次,并且你点击 F3 的位置将被宏计数器填入,给你增量。

这听起来比写汤姆建议的功能更复杂,但我建议你尝试掌握键盘宏。一旦你对它们感到满意,它们可以削减的工作量确实令人难以置信。

答案 4 :(得分:1)

另一种方法是使用正则表达式搜索和替换。

首先,输入myVec[]=;<ret>

接下来,复制整个区域,包括换行符。然后根据需要将其粘贴多次。现在你有一堆myVec[]=;行。

现在选择myVec的整个区域并执行M-x replace-regexp ] \#],这将为您编号。

这是Emacs真正的神奇之处 - 你有很多强大的工具,这意味着总有不止一种方法可以做到。