从 emacs 缓冲区中的每一行中删除最后 n 个字符

Fah*_*tha 5 emacs

使用 Emacs 内置工具,是否有一种好方法可以从 Emacs 缓冲区中的每一行中删除最后 n 个字符(对于 n >= 1)?我想可以定义一个键盘宏来做到这一点,但这不是我在这里的想法。

Stack Overflow 上有一个优雅的解决方案,用于解决如何将字符附加到 emacs 中的每一行的相应问题,即在 Emacs 中将字符附加到每一行 的末尾,但我找不到这个问题的答案。

笔记:

  1. 由于 XEmacs 大多已死(RIP),因此可以假设问题
    仅与 GNU Emacs 有关。

  2. 使用 Unix 流编辑器等可以轻松解决此问题。
    不过,在 Emacs 缓冲区上操作更为灵活。

  3. 我当然可以手动完成此操作,但我已经做出了某种新年
    决议,以更好地利用 Emacs 功能。毕竟,我
    只用了 20 年,对它几乎一无所知。

R P*_*rin 4

您可以使用相同的替换正则表达式方法来删除附加情况,只需在行尾正则表达式元字符前添加任意字符元字符即可:

M-< M-x replace-regex RET .$ RET RET
Run Code Online (Sandbox Code Playgroud)

要替换多个字符,您可以以简单的方式开始.?在正则表达式中添加(一个可选的任意字符):

M-< M-x replace-regex RET .?.$ RET RET
Run Code Online (Sandbox Code Playgroud)

或者,更优雅的是,您可以使用间隔样式表示法来指示n行尾之前的任意字符,在以下示例中,n=2:

M-< M-x replace-regex RET \{,2\}$ RET RET
Run Code Online (Sandbox Code Playgroud)

在 EmacsWiki 的正则表达式下有更多关于正则表达式语法的信息