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

时间:2017-07-14 03:24:26

标签: elisp

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

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

1 个答案:

答案 0 :(得分:1)

此处'功能import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core'; import { CommonModule } from '@angular/common'; import { TitleComponent } from './title.component'; import { UserService } from './user.service'; import { UserServiceConfig } from './user.service'; @NgModule({ imports: [ CommonModule ], declarations: [ TitleComponent ], exports: [ TitleComponent ], providers: [ UserService ] }) export class CoreModule { constructor (@Optional() @SkipSelf() parentModule: CoreModule) { if (parentModule) { throw new Error( 'CoreModule is already loaded. Import it in the AppModule only'); } } static forRoot(config: UserServiceConfig): ModuleWithProviders { return { ngModule: CoreModule, providers: [ {provide: UserServiceConfig, useValue: config } ] }; } } copy-to-buffer类似,不同之处在于它适用于行号而非点数,与copy-lines-from-buffer不同,它不会删除当前目标缓冲区的内容:

copy-to-buffer

(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)))))) 函数将缓冲区或缓冲区名称作为其第一个参数,将起始行号作为其第二个参数,将结束行号作为其第三个参数。它创建一个本地帮助函数copy-lines-from-buffer,它返回当前缓冲区的行f开头的点,并调用n两次,当前缓冲区设置为f创建一个由所需缓冲区内容的起点和终点组成的列表。然后,它使用bufferapply调用insert-buffer-substring,并将缓冲区内容的起点和终点作为参数。

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