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

50

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

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

感谢

Ed

3个回答

82
正如starblue所说,如果标记被设置,(buffer-substring (mark) (point))返回区域的内容。如果不想要字符串属性,可以使用'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节 使用交互式21.2.2节 交互式代码字符

68

buffer-substringregion-beginningregion-end一起使用可以实现该功能。


太好了,谢谢。我肯定自己找不到那个。 - Singletoned

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接