我想使用elisp从缓冲区复制行。例如:将100到200文本的行复制到另一个缓冲区。
我应该选择区域(转到行)然后复制它吗?就像我们用键盘做的一样?有些帖子说不要在elisp代码中使用goto-line。我不知道这样做的有效方法。
答案 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
创建一个由所需缓冲区内容的起点和终点组成的列表。然后,它使用buffer
以apply
调用insert-buffer-substring
,并将缓冲区内容的起点和终点作为参数。
从缓冲区中要插入内容的位置调用buffer
。起始行的内容包含在复制的内容中,但不包括结束行的内容。