elisp-如何有效地从缓冲区复制行

elisp-如何有效地从缓冲区复制行,elisp,Elisp,我想使用elisp从缓冲区复制行。例如:将第100到200行文本复制到另一个缓冲区 我应该选择区域(转到行)然后复制它吗?就像我们用键盘做的一样?一些帖子说不要在elisp代码中使用goto行。我不知道什么是有效的方法。这里有一个函数从缓冲区复制行,它与类似,只是它使用行号而不是点,与复制到缓冲区不同,它不会擦除目标缓冲区的当前内容: (defun copy-lines-from-buffer (buffer start-line end-line) "Copy the text from

我想使用elisp从缓冲区复制行。例如:将第100到200行文本复制到另一个缓冲区


我应该选择区域(转到行)然后复制它吗?就像我们用键盘做的一样?一些帖子说不要在elisp代码中使用goto行。我不知道什么是有效的方法。

这里有一个函数
从缓冲区复制行
,它与类似,只是它使用行号而不是点,与
复制到缓冲区
不同,它不会擦除目标缓冲区的当前内容:

(defun copy-lines-from-buffer (buffer start-line end-line)
  "Copy the text from START-LINE to END-LINE from BUFFER.
Insert it into the current buffer."
  (interactive "*bSource buffer: \nnStart line: \nnEnd line: ")
  (let ((f #'(lambda (n) (goto-char (point-min))
               (forward-line n)
               (point))))
    (apply 'insert-buffer-substring buffer
           (with-current-buffer buffer
             (list (funcall f start-line) (funcall f end-line))))))
从缓冲区复制行
函数将缓冲区或缓冲区名称作为其第一个参数,起始行号作为其第二个参数,结束行号作为其第三个参数。它创建一个本地助手函数
f
,该函数返回当前缓冲区行
n
开头的点,并在当前缓冲区设置为
buffer
时调用
f
两次,以创建一个由所需缓冲区内容的起点和终点组成的列表。然后使用
apply
调用
insert buffer substring
,使用
buffer
和缓冲区内容的起点和终点作为参数


从缓冲区中要插入内容的点调用
从缓冲区复制行。复制的内容包括起始行的内容,但不包括结束行的内容。

太好了,这正是我想要的!