我想以函数中的字符串形式访问当前区域的内容。例如:
(concat "stringa" (get-region-as-string) "stringb")
由于
版
答案 0 :(得分:69)
正如starblue所说,如果设置了标记,(buffer-substring (mark) (point))
将返回该区域的内容。如果您不想使用string properties,则可以使用'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)))
从Lisp代码调用时,忽略(interactive ...)
形式,因此您可以使用此函数通过传递计算缓冲区的任何部分中的行,而不仅仅是区域适当的参数:例如,(count-lines-region (point-min) (point-max))
来计算缓冲区缩小部分中的行。但是,当以交互方式调用时,(interactive ...)
形式被评估,"r"
代码提供点和标记,作为两个数字参数,最小的第一个。
请参阅Emacs Lisp手册,21.2.1 Using Interactive和21.2.2 Code Characters for interactive部分。
答案 1 :(得分:56)
buffer-substring
以及region-beginning
和region-end
可以做到这一点。
答案 2 :(得分:5)
如果要将Lisp代码中的区域内容复制到用户可访问的数据结构(如kill-ring,X剪贴板或寄存器),Emacs Lisp手册建议使用filter-buffer-substring
而不是buffer-substring
。在复制之前,该函数应用名为filter-buffer-substring-functions
的列表变量中的过滤函数。该函数为added in version 22.3。