Emacs复制正则表达式

时间:2010-02-02 11:49:07

标签: emacs

我有一个文本文件。 Emacs可以根据正则表达式选择文本并将其置于kill-ring中,这样我就可以将其复制到其他地方了吗?有什么像regex-kill-ring-save?

3 个答案:

答案 0 :(得分:3)

受到已经给出的评论的启发(Charles的答案不能像我想要的那样工作),我在isearch / isearch-regexp模式映射中添加了一个新函数,它只将匹配的字符串放入kill ring(而查尔斯提案从匹配字符串的当前点到结尾处杀死:

(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启用)的好处是,您可以看到搜索字符串在增长,您可以使用{{{ 1}}只要您满意(并使用M-w返回到之前的位置)。

这适用于Emacs 23.1。不知道它是否适用于所有情况。无论如何,我希望你发现它很有用:)

更新:浏览emacswiki我偶然发现了KillISearchMatch,这或多或少相同(加上一些提示......)。

干杯, 丹尼尔

答案 1 :(得分:1)

我不确定是否已经有这样的功能,但你可以用键盘宏做到这一点:

  1. 开始录制kbd宏:C-x (
  2. 使用search-forward-regexp
  3. 搜索您的正则表达式
  4. 使用各种emacs导航命令移动到匹配的开头(您要杀死的文本),例如: searchbackward-word等。
  5. 马克:C-spc
  6. 移至比赛结束
  7. 杀死文字:C-w
  8. 然后,您可以使用M-x name-last-kbd-macro命名键盘宏,以便您可以使用名称而不是C-x e执行宏。

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

    More about emacs keyboard macros

答案 2 :(得分:0)

Isearch+已经这样做了。它可选地设置搜索目标周围的区域。您可以在Isearch期间随时使用 C-SPC 进行切换。