将字符附加到Emacs中每行的末尾

Zel*_*luX 45 emacs

假设我有一个包含内容的文本文件

1
123
12
12345
Run Code Online (Sandbox Code Playgroud)

如果我想在每行的开头添加一个'a',我可以简单地使用字符串矩形(Cx rt),但如果我想在每行的末尾添加'a',之后文件应该如何成为

1a
123a
12a
12345a
Run Code Online (Sandbox Code Playgroud)

谢谢.

nel*_*age 62

您可以使用匹配行尾的正replace-regexp$表达式元字符来实现此目的.转到缓冲区的开头,然后执行M-x replace-regexp,并回答$(和您的文本)两个提示.

或者,在emacs中,为您添加的具体示例a:

M-< M-x replace-regexp RET $ RET a RET

  • 或者`CM-%$ RET一个RET`用`query-replace-regexp`更有选择性地做同样的事情 (4认同)
  • 卫生署!好多了. (3认同)
  • @phils你出于某种原因的建议不起作用.这是显而易见的方式 - 但不起作用.亲自尝试一下. (2认同)

Tre*_*son 21

Emacs键盘宏是你的朋友.

C-x ( C-e a C-n C-x )
Run Code Online (Sandbox Code Playgroud)

这只是通过以下方式设置键盘宏:启动键盘宏(C-x (),转到行尾(C-e),插入a,转到下一行(C-n),然后结束宏录制(C-x )).

现在你可以执行它(C-x e),并继续按下e你希望它运行的每一行,或者你可以在一个区域上运行它C-x C-k r.

如果你这么做很多,你可以保存宏,或者你可以编写一个函数.这将是一个这样的功能:

(defun add-string-to-end-of-lines-in-region (str b e)
  "prompt for string, add it to end of lines in the region"
  (interactive "sWhat shall we append? \nr")
  (goto-char e)
  (forward-line -1)
  (while (> (point) b)
    (end-of-line)
    (insert str)
    (forward-line -1)))
Run Code Online (Sandbox Code Playgroud)

  • 我通常通过键入`F3 End a Down F4`然后输入一系列`F4`来创建这样一个宏.我倾向于选择正常的箭头键和Home/End而不是Emacsisms. (3认同)