题
我想以函数中的字符串形式访问当前区域的内容。例如:
(concat "stringa" (get-region-as-string) "stringb")
由于
版
解决方案
buffer-substring
与 region-beginning
和 region-end
一起可以做到这一点。
其他提示
正如starblue所说,如果设置了标记,(buffer-substring(mark)(point))
将返回该区域的内容。如果您不想字符串属性,您可以使用'buffer-substring-no-properties
变体。
但是,如果您正在编写交互式命令,那么使用表单(交互式“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)))
从Lisp代码调用时,(interactive ...)
表单被忽略,因此您可以使用此函数来计算缓冲区任何部分中的行通过传递适当的参数,而不仅仅是区域:例如,(count-lines-region(point-min)(point-max))
来计算缓冲区变窄部分中的行。但是,当以交互方式调用时,将评估(interactive ...)
表单," r"
代码提供点和标记,作为两个数字参数,最小第一
参见Emacs Lisp手册, 21.2.1使用交互式和 21.2.2交互式代码字符。
如果要将Lisp代码中的区域内容复制到用户可访问的数据结构(如kill-ring,X剪贴板或寄存器),Emacs Lisp手册建议使用 filter-buffer-substring
而不是简单<代码>缓冲子代码>。在复制之前,该函数应用名为 <代码>滤波器缓冲 - 子串函数代码> 。该功能是在22.3版中添加。
不隶属于 StackOverflow