首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在emacs中有一个应用函数到区域行吗?

在emacs中有一个应用函数到区域行吗?
EN

Stack Overflow用户
提问于 2011-06-30 17:45:30
回答 4查看 2.7K关注 0票数 9

我的很多工作包括搜索和删除不必要的代码行。所以我创建了一个宏,然后选择所有行(C-x h),然后运行命令(apply-macro-to-region-lines)。我设法保存了该命令,并将其放在我的.emacs文件中;我将其命名为cut_it_now。但是现在我的函数不再是宏,所以我不能再使用(apply-macro-to-region-lines)函数。你知道在什么地方实现了(apply-function-to-region-lines)吗?

非常感谢,

D

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-30 19:42:50

我同意@Lindydancer的回答,我还想补充说,也许有一种更容易的方法来实现你的目标。例如,内置函数delete-matching-lines。:-)

票数 3
EN

Stack Overflow用户

发布于 2011-06-30 19:38:30

一个简单的解决方案是定义一个宏来调用您的函数,然后使用良好的ol‘apply-macro-to-region-lines

除此之外,我认为你可以用几行elisp编写一个循环,它完全按照你的要求来做。如果您愿意,您甚至可以提示用户输入函数的名称。我认为这对elisp来说是一个很好的练习,如果你想亲自尝试的话,我可以给你一些建议。

票数 4
EN

Stack Overflow用户

发布于 2011-07-01 03:15:52

下面的函数应该可以执行您想要的操作:

代码语言:javascript
运行
复制
(defun apply-function-to-region-lines (fn)
  (interactive "aFunction to apply to lines in region: ")
  (save-excursion
    (goto-char (region-end))
    (let ((end-marker (copy-marker (point-marker)))
          next-line-marker)
      (goto-char (region-beginning))
      (if (not (bolp))
          (forward-line 1))
      (setq next-line-marker (point-marker))
      (while (< next-line-marker end-marker)
        (let ((start nil)
              (end nil))
          (goto-char next-line-marker)
          (save-excursion
            (setq start (point))
            (forward-line 1)
            (set-marker next-line-marker (point))
            (setq end (point)))
          (save-excursion
            (let ((mark-active nil))
              (narrow-to-region start end)
              (funcall fn)
              (widen)))))
      (set-marker end-marker nil)
      (set-marker next-line-marker nil))))

因此,如果您希望对缓冲区中的行应用以下函数:

代码语言:javascript
运行
复制
(defun test()
  (insert "> "))

并且,如果您的缓冲区包含以下内容:

代码语言:javascript
运行
复制
Line 1: blah, blah
Line 2: blah, blah
Line 3: blah, blah
Line 4: blah, blah

如果您选择了一个仅包含第2行和第3行的区域,输入"M-x apply- function -to- region - lines ",并在出现提示时输入"test“作为函数名,您将在缓冲区中得到以下结果:

代码语言:javascript
运行
复制
Line 1: blah, blah
> Line 2: blah, blah
> Line 3: blah, blah
Line 4: blah, blah
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6532898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档