使用emacs24
我想在接下来的五行开头添加例如#
。
所以有这个:
Line1
line2
line3
得到这个:
#Line1
#line2
#line3
表示我指定的行数。我怎样才能做到这一点?谢谢!
答案 0 :(得分:4)
虽然Emacs中可能有内置功能,但你可以编写一些Lisp来完成它,我通常会使用“矩形编辑”功能来完成这项工作。想象一下,缓冲区包含以下内容,.
表示点(光标所在的位置)
.Line1
line2
line3
设置标记
按C-n
两次。这是缓冲区的状态:
Line1
line2
.line3
按C-x r t
。
输入#
。
按enter键。
我会发现这比输入重复命令的次数值更自然,因为您可以直观地选择要编辑的行。 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>
答案 1 :(得分:2)
另一种方法是使用宏来完成这样的重复工作。 Here是一个描述如何在Emacs中使用宏的页面。如果您不熟悉它,可以查看它。
在您的情况下,以下键可以使用:
基本上,步骤2-5将记录一个宏,它将在开头添加一个#,然后移动到下一行的开头。步骤6-7将执行宏10次(当然,您可以将其更改为任意数字)。我想这将是很多按键,新手可能不喜欢它。也许其他人有更好的解决方案。
答案 2 :(得分:1)
Line1
line2
line3
我写了以下代码:
您首先给出一个数字参数(您想要执行此操作的次数),例如M-3
(按住alt,按3),执行以下3次
使用密钥,如下面的建议(f8),或使用M-x prompt-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
答案 3 :(得分:1)
为什么不只是query-replace-regexp
或replace-regexp
?例如。选择区域并执行 CM - % ^ RET # RET !
答案 4 :(得分:0)
试试M-x string-insert-rectangle
。此命令在矩形的每一行上插入一个字符串。
答案 5 :(得分:0)
虽然comment-region
在这个具体示例中表现良好,但请查看multiple-cursors
包,这是一种非常强大的方式来执行此类操作。
您可以反复点击C->
,直到每行开头有一个光标,然后点击#
并完成(C-g
以删除额外的游标。)
这是C-x r t
的一种更具互动性的形式,也适用于非矩形区域(例如C-s
之后。)