如何在Emacs Lisp中访问当前区域的内容?

如何在Emacs Lisp中访问当前区域的内容?,emacs,lisp,region,Emacs,Lisp,Region,我想在函数中以字符串的形式访问当前区域的内容。例如: (concat "stringa" (get-region-as-string) "stringb") 谢谢 Ed与区域开始和区域结束一起可以实现这一点。正如starblue所说,(缓冲子字符串(标记)(点))返回区域的内容(如果设置了标记)。如果不需要,可以使用'buffer-substring-no-properties变量 但是,如果您正在编写一个交互式命令,那么有一种更好的方法可以使用(interactive“r”)表单获取区域的端

我想在函数中以字符串的形式访问当前区域的内容。例如:

(concat "stringa" (get-region-as-string) "stringb")
谢谢

Ed

区域开始
区域结束
一起可以实现这一点。

正如starblue所说,
(缓冲子字符串(标记)(点))
返回区域的内容(如果设置了标记)。如果不需要,可以使用
'buffer-substring-no-properties
变量

但是,如果您正在编写一个交互式命令,那么有一种更好的方法可以使用
(interactive“r”)
表单获取区域的端点。下面是一个来自
simple.el
的示例:

(defun count-lines-region (start end) "Print number of lines and characters in the region." (interactive "r") (message "Region has %d lines, %d characters" (count-lines start end) (- end start))) (取消计数行区域(开始-结束) “打印区域中的行数和字符数。” (交互式“r”) (消息“区域有%d行,%d个字符” (计数行开始-结束)(-end start))) 从Lisp代码调用时,
(交互式…
表单被忽略,因此您可以使用此函数通过传递适当的参数来计算缓冲区任何部分中的行数,而不仅仅是区域中的行数:例如,
(count lines region(point min)(point max))
来计算缓冲区狭窄部分中的行数。但是当以交互方式调用时,将计算
(interactive…
表单,
“r”
代码提供点和标记,作为两个数字参数,最小的第一个


请参阅Emacs Lisp手册的章节和。

如果要将Lisp代码中的区域内容复制到用户可访问的数据结构,如kill ring、X剪贴板或register,Emacs Lisp手册建议使用,而不是简单地使用
缓冲区子字符串。在复制之前,该函数应用名为的列表变量中的筛选函数。功能很好。

太好了,谢谢。我自己肯定不会发现的。