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

如何告诉emacs将某个表达式从x行插入y行,emacs,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]= ; 向量的各个值当然必须手动输入,但这将节

在我的一些编程中,我经常不得不手动输入长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[]的大量时间

您可以使用键盘宏执行此操作,但如果您经常需要,则最好使用一个函数,该函数可以使用M-x调用,并要求插入字符串、序列的起始编号和结束编号:

(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)))

可以使用键盘宏执行此操作,但如果经常需要,则最好使用一个函数,该函数可以使用M-x调用,并要求插入字符串、序列的起始编号和结束编号:

(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)))
是 更简单的方法

C-xmyvec[C-xC-kC-i] = ;RETC-x

C-x启动宏定义 C-xC-kC-i 插入并递增计数器 C-x结束宏 释义 然后 M-3M-9C-xe

M-3M-9是一条捷径 C-u39,用于将39作为 论点 C-xe执行最后一个宏 记录 因此,两者的组合执行宏39次

你也可以看看你是如何处理它们的。

是 更简单的方法

C-xmyvec[C-xC-kC-i] = ;RETC-x

C-x启动宏定义 C-xC-kC-i 插入并递增计数器 C-x结束宏 释义 然后 M-3M-9C-xe

M-3M-9是一条捷径 C-u39,用于将39作为 论点 C-xe执行最后一个宏 记录 因此,两者的组合执行宏39次

您还可以查看如何录制它们和它们。

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

现在,你可以简单地说C-u29和C-xe。它将运行宏29次,您点击F3的位置将被宏计数器填充,从而为您提供增量

这听起来比Tom建议的编写函数更复杂,但我建议您尝试掌握键盘宏。一旦你适应了他们,他们可以减少的工作量真是难以置信

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

现在,你可以简单地说C-u29和C-xe。它将运行宏29次,您点击F3的位置将被宏计数器填充,从而为您提供增量


这听起来比Tom建议的编写函数更复杂,但我建议您尝试掌握键盘宏。一旦你适应了他们,他们可以减少的工作量真是难以置信

尝试以下顺序Emacs golf score=17:


myvec[]SPC=SPC;C-jM-30

尝试以下顺序Emacs高尔夫得分=17:


myvec[]SPC=SPC;C-jM-30

另一种方法是使用regex搜索和替换

首先,键入myVec[]=

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

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


这是Emacs真正的魔力——你有一大堆强大的工具,这意味着永远有不止一种方法可以做到这一点。

另一种方法是使用regex搜索和替换

首先,键入myVec[]=

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

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


这是Emacs真正的魔力——你有一大堆强大的工具,这意味着永远有不止一种方法可以做到这一点。

有趣:扮演双重角色。有趣:扮演双重角色。很好,我不知道这个功能。如果能以某种方式指定序列起始号会更好,尽管我知道这是不可能的,因为这不是该功能的预期用途。很好,我不知道这个功能。如果可以以某种方式指定序列起始号,那就更好了,尽管我知道这是不可能的,因为这不是该功能的预期用途。顺便说一句,如果文件中有这些值,则不需要手动输入它们。您可以将它们提取到一个列表中,然后添加周围的其余代码,或者使用键盘宏,您可以查找、复制和粘贴值作为宏定义的一部分。顺便说一句,如果文件中有这些值,您可能不需要手动输入它们。您可以将它们提取到列表中,然后 它们添加周围的其余代码,或者使用键盘宏,您可以在宏定义中查找、复制和粘贴值。