基本概念和函数
所谓region
,就是指选中的文本区域,可以对这个文本区域进行复制、粘贴、获取文本区域的内容等操作。常用的函数有这几个:
-
use-region-p
:判断当前是否选中了一个region,返回一个布尔型返回值。用法示例:
(defun my-test-region1 ()
"Test region active or not."
(interactive)
(if (use-region-p)
(message "select a region!")
(message "NOT select a region!")))
在没有选中任何文本的时候,执行M-x my-test-region1
,输出:NOT select a region!
,当选中了一个文本区域后,再执行M-x my-test-region1
,输出:select a region!
。
-
region-beginning
和region-end
:分别返回当前region的起始和结束位置。用法示例:
(defun my-test-region2 ()
"Get region beginning and end."
(interactive)
(if (use-region-p)
(message "region text is: %s" (buffer-substring-no-properties (region-beginning) (region-end)))))
比如当前选中了一个region区域,其文本内容为abc123
,那么当执行M-x my-test-region2
后,输出:region text is: abc123
。
和interactive
的搭配使用
region的起始和结束位置可以作为参数传入一个函数,在函数中可以使用这两个参数。下面的函数就传入了两个参数beg
和end
,代表当前选中区域的起始位置和结束位置,如果当前没有选中任何region,将会以当前行的起始位置和结束位置作为beg
和end
的默认值。
(defun my-test-region3 (beg end)
"Test region beginning and end as parameter."
(interactive
(if (use-region-p)
(list (region-beginning) (region-end))
(list (line-beginning-position) (line-end-position))))
(message "comment current region or line is: %s" (format "<!-- %s -->" (buffer-substring-no-properties beg end))))
假设当前行的内容为:abc123
,没有选中任何region,此时执行:M-x my-test-region3
,输出为:comment current region or line is:
。假设当前选中的region区域内容为:hello
,此时执行:M-x my-test-region3
,输出为:comment current region or line is:
。
总结
region是一个指代被选中的文本区域的概念,很多对文本的操作都是基于region的,所以reigon的基本概念和常见操作要熟悉,在处理文本的时候才能做到游刃有余。