如何在elisp中逐个字符地处理缓冲区?

sil*_*ons 3 emacs elisp

我正在尝试编写一些elisp来处理当前缓冲区中的每个字符(我知道这会有点慢,但认为这是最好的方法).我不想使用正则表达式.这该怎么做?

该函数buffer-string将当前缓冲区作为字符串返回.使用它可以迭代并引用/设置每个字符.我无法弄清楚如何将结果放回缓冲区.
有人可以给出一个只是迭代每个字符的例子,以一种简单的方式改变它,并将结果放回缓冲区吗?

lun*_*orn 6

使用while循环并forward-char迭代缓冲区中的所有字符:

(goto-char (point-min))
(while (not (eobp))
  (let* ((current-character (char-after))
         (new-character (do-something current-character)))
    (delete-char 1)
    (insert-char new-character))
  (forward-char 1))
Run Code Online (Sandbox Code Playgroud)

只要eobp未到达缓冲区()的末尾,循环就一次向前移动一个字符.

char-after为您提供当前位置的角色.该delete-char/ insert-char电话换旧符用新的,从处理旧符的结果.

要用多个字符替换旧字符,即字符串,只需insert-char使用insert. 在新插入的字符之后insert放置该点,因此循环将继续使用下一个未处理的字符.