[elisp-snippet] region的基本操作

基本概念和函数

所谓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-beginningregion-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的起始和结束位置可以作为参数传入一个函数,在函数中可以使用这两个参数。下面的函数就传入了两个参数begend,代表当前选中区域的起始位置和结束位置,如果当前没有选中任何region,将会以当前行的起始位置和结束位置作为begend的默认值。

(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 "" (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的基本概念和常见操作要熟悉,在处理文本的时候才能做到游刃有余。

你可能感兴趣的:([elisp-snippet] region的基本操作)