Using emacs24
I'd like to attach for example #
at the beginning of the next five lines.
So having this:
Line1
line2
line3
get this:
#Line1
#line2
#line3
for the number of lines that I specify. How can I do that? Thanks!
虽然 Emacs 中可能有一些内置的东西可以做到这一点,而且你当然可以编写一些 Lisp 来完成它,但我通常会使用“矩形编辑”功能来完成它。想象一下缓冲区包含以下内容,.
代表点(光标所在的位置)
.Line1
line2
line3
设置标记
按C-n
两次。这是现在缓冲区的状态:
Line1
line2
.line3
按C-x r t
。
键入#
。
按回车。
我会发现这比输入重复命令的次数值要自然得多,因为您可以直观地选择要编辑的行。YMMV
编辑
下面是如何使用一点 Emacs Lisp 来做到这一点。请注意,虽然我已经使用 Emacs 几年了,但我最近才开始学习如何实际使用 Emacs Lisp,所以这段代码可能不是那么好!它确实完成了工作。
(defun insert-n-times (s n)
(interactive "Mstring:\nNtimes:")
(while (> n 0)
(insert s)
(goto-char (- (point) 1))
(next-line)
(setq n (- n 1))))
通过执行以下操作来使用它:M-x insert-n-times RET <type a string> RET <type a number>
另一种方法是使用宏来完成此类重复性工作。这是一个描述如何在 Emacs 中使用宏的页面。如果你不熟悉它,你可以看看它。
在您的情况下,以下键将起作用:
基本上,步骤 2-5 将录制一个宏,该宏将在开头添加一个 #,然后移至下一行的开头。步骤 6-7 将执行宏 10 次(当然,您可以将其更改为任意数量)。我想这将是相当多的击键和新手可能不喜欢它。也许其他人有更好的解决方案。
为什么不只是query-replace-regexp
or replace-regexp
?例如选择区域并执行C-M-%^RET#RET!
Line1
line2
line3
我写了以下代码:
您首先给出一个数字参数(您想要执行此操作的次数),例如M-3
(按住 alt,点击 3),执行以下 3 次
要么使用一个键,就像下面的建议 (f8),要么使用 Mxprompt-for-insert
它会要求您输入一个字符串。例如“foo”并点击返回按钮。
然后它会按照你的要求去做。
(defun prompt-for-insert (val)
(interactive "P")
(let ((astring (read-string "What do you want to insert?"))
(value val))
(while (> value 0)
(insert astring)
(move-beginning-of-line 2)
(decf value)))
)
(global-set-key [f8] 'prompt-for-insert)
整个序列将是:
M-3 [f8] foo RET
导致:
fooLine1
fooline2
fooline3
虽然comment-region
在这个特定示例中很好,但请查看该multiple-cursors
包以了解通常执行此类操作的非常强大的方法。
您可以C->
反复点击,直到每行开头都有一个光标,然后点击#
完成(C-g
以摆脱多余的光标。)
它是一种更具交互性的形式,C-x r t
并且也适用于非矩形区域(C-s
例如在之后)。
试试M-x string-insert-rectangle
。此命令在矩形的每一行上插入一个字符串。