首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs使用正则表达式复制

Emacs使用正则表达式复制
EN

Stack Overflow用户
提问于 2010-02-02 19:49:07
回答 3查看 2.3K关注 0票数 7

我有一个文本文件。Emacs是否可以根据正则表达式选择文本并将其放入kill-ring中,这样我就可以将其复制到其他地方?像regex-kill-ring-save这样的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-02 21:36:04

受到已经给出的注释的启发( Charles的答案并不像我想要的那样工作),我在isearch/isearch-regexp模式映射中添加了一个新函数,它只将匹配的字符串放入kill环(而Charles proposal从当前点到匹配字符串的末尾都会删除):

代码语言:javascript
复制
(defun hack-isearch-kill ()
   "Push current matching string into kill ring."
   (interactive)
   (kill-new (buffer-substring (point) isearch-other-end))
   (isearch-done))

(define-key isearch-mode-map (kbd "M-w") 'hack-isearch-kill)

关于isearch/isearch-regexp方法(可以分别用C-sC-M-s启用)的好处是,您可以看到搜索字符串不断增长,并且只要您满意,就可以用M-w复制它(然后返回到以前使用C-u C-Space的地方)。

这对我的Emacs 23.1很有效。不知道它是否在所有情况下都能正常工作。无论如何,我希望它对您有用:)

更新:通过emacswiki时,我偶然发现了KillISearchMatch,它暗示着或多或少是相同的(加上一些更多的提示...)。

干杯,丹尼尔

票数 5
EN

Stack Overflow用户

发布于 2010-02-02 20:16:40

我不确定是否已经有这样的函数了,但是你可以用键盘宏来做什么:

使用search-forward-regexp

  • Move开始为您的正则表达式录制C-x (

  • Search:C-spc

  • Move到匹配的开头(您要删除的文本),并使用各种emacs导航命令,例如searchbackward-word等。

  • Mark:emacs to the end of your match

  • 终止文本:emacs

然后,可以使用M-x name-last-kbd-macro命名键盘宏,以便可以使用名称而不是C-x e来执行宏。

如果要保存宏以供将来的会话使用,可以使用M-x insert-kbd-macro打开.emacs并将宏插入缓冲区。然后,您可以将密钥绑定到宏,就像将密钥绑定到正常的emacs函数一样,例如(global-set-key "\C-c m" 'funky-macro-macro)

More about emacs keyboard macros

票数 2
EN

Stack Overflow用户

发布于 2011-08-22 06:08:51

已经做到了这一点。它可以选择设置搜索目标周围的区域。您可以在Isearch过程中随时使用C-SPC C-SPCM-= C-SPC来切换此选项。

isearchp-deactivate-region-flag是在isearch+.el中定义的变量。

它的值是t

文档:

非nil表示isearching停用该区域。

另请参阅选项isearchp-restrict-to-region-flag。您可以在Isearch过程中使用M-= C-SPC切换此选项。

您可以自定义此变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2183726

复制
相关文章

相似问题

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