emacs中区域中的每一行是否都有应用命令?

emacs中区域中的每一行是否都有应用命令?,emacs,elisp,Emacs,Elisp,我有一堆链接保存在orgmode文件中,比如 http://www.stackoverflow.com http://www.google.com http://www.github.com 我可以通过将光标放在链接上并执行C-C-o来打开每个链接,它会方便地弹出我的默认浏览器并在选项卡中打开该链接 现在假设我有20个这样的链接。有没有一种方便的方法可以在不记录显式宏的情况下将这样的函数应用于选定区域内的每一行 我会想象它看起来像 Select region M-x foreach-in-re

我有一堆链接保存在orgmode文件中,比如

http://www.stackoverflow.com
http://www.google.com
http://www.github.com
我可以通过将光标放在链接上并执行
C-C-o
来打开每个链接,它会方便地弹出我的默认浏览器并在选项卡中打开该链接

现在假设我有20个这样的链接。有没有一种方便的方法可以在不记录显式宏的情况下将这样的函数应用于选定区域内的每一行

我会想象它看起来像

Select region
M-x foreach-in-region
Keystrokes to apply to each line: C-c C-o
with cursor on first line of link
F3 # to start record macro
C-c C-o 
down arrow
F4
Select region (omitting the first line, since that's now already opened in my browser)
C-x C-k r
这只是针对已经定义的函数。我想没有的路会是这样的

Select region
M-x foreach-in-region
Keystrokes to apply to each line: C-c C-o
with cursor on first line of link
F3 # to start record macro
C-c C-o 
down arrow
F4
Select region (omitting the first line, since that's now already opened in my browser)
C-x C-k r
这是否存在?如果没有,我将如何lisp这个?

(定义行(有趣和可选的开始-结束)
“自始至终对每行的文本调用FUN函数。”
(互动
(let((实习医生(填写“职能:”obarray'functionp t)))
(如果(使用-region-p)
(列表fn(区域开始)(区域结束))
(列表fn(最小点)(最大点(())))
(省去远足
(转到字符开始)
(同时(<(点)结束)
(funcall fun(缓冲子字符串(行开始位置)(行结束位置)))
(前线1)

评论后更新--

现在听起来您不想输入函数名,而是想点击一个键,并将绑定到该键的命令应用于区域(或缓冲区)中的每一行

下面这样的东西可以做到这一点。但是,请注意,命令通常具有特定的行为wrt行。例如,如果要按键
C-k
kill lines
),则它在杀死每一行后都会向前移动。因为
do-lines
不知道您将调用哪种类型的函数(命令),所以每次调用后它都会前进到下一行。对于像
kill lines
这样的命令,这样做是错误的:它将前进两行,而不是一行,从而跳过行。注意,请注意,
do行
的代码无法补偿它调用的特定函数可能会做的与您期望的不一致的事情。相反,它言行一致

(定义do行(命令和可选开始-结束)
“自始至终对每行的文本调用命令。”
(互动
(let*((键(读取键序列向量“点击键序列:”))
(cmd(查找键全局映射键t)))
(当(numberp cmd)(错误“不是有效的键序列”))
(除非是(commandp cmd)(错误“未定义键“%s”(键说明键)))
(如果(使用-region-p)
(列表命令(区域开始)(区域结束))
(列表命令(最小点)(最大点(())))
(setq开始(复制标记开始)
结束(复制标记结束))
(省去远足
(转到字符开始)
(同时(<(点)结束)
(funcall命令(缓冲子字符串(行开始位置)(行结束位置)))
(前线1)

您应该记录一行的宏,然后使用
将宏应用于区域行
对区域中的所有行执行宏。C-xc-kr


或者,您可以使用多个游标在每一行上创建一个游标,并使用C-C-o打开所有游标<代码>多个游标如果您给它一个机会,它将随着时间的推移更好地改变您的使用模式。

在某些情况下,您可以使用
C-x z
再加上更多的“z”。我试着对区域中的所有行进行注释,它在我的用例中运行得很好

命令C-x z(repeat)提供了另一种重复Emacs的方法 多次指挥

若要多次重复该命令,请键入其他z:每个z重复该命令一次


当我在我的选择上运行这个时,我得到“C-C-o”并没有定义,尽管是为一行定义的。不知道你的意思。什么是C-C-o?你在哪里定义它,你期望它做什么?当您调用
do line
(无论您如何调用它-使用键或
M-x
)时,它会提示您将函数应用于每一行。按照现在的定义,您需要给它一个函数名,而不仅仅是按一个键。在我的例子中,我想调用的函数不带参数,因此我将funcall行更改为(funcall命令)或(funcall fun),具体取决于您使用的版本。工作得很有魅力!
C-C-o
是多个游标中的默认键绑定吗?最好将defun命名为imo。