2010-02-02 47 views
6

我有一个文本文件。 Emacs可以根据正则表达式选择文本并将其放入杀死环中,以便我可以将它复制到其他地方?像正则表达式杀死戒指保存?Emacs复制正则表达式

回答

3

由已给予意见的启发(查尔斯回答没有工作,我希望它),我添加了一个新功能到ISEARCH/ISEARCH,正则表达式模式地图这使只有匹配的字符串进去杀环(而查尔斯建议从目前的点杀,结束匹配字符串):

(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,正则表达式的方法(你可以使用分别C-sC-M-s启用)的好处是,你可以看到你的搜索字符串增长,你可以复制只要你满意,你就可以用M-w(并回到你之前使用C-u C-Space的地方)。

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

UPDATE:通过我绊了KillISearchMatch这表明或多或少相同(加上一些更多的技巧......)的emacswiki去。

干杯, 丹尼尔

+0

谢谢,这正是我想要的,但由于我在LISP上吮吸而无法做到。 – 2010-02-03 11:21:11

1

我不知道是否有这样的功能了,但你可以用一个键盘宏做:

  1. 开始录制骨节病宏:C-x (
  2. 搜索与search-forward-regexp您的正则表达式
  3. 使用各种emacs导航命令移动到匹配的开始位置(您想要杀死的文本),例如searchbackward-word
  4. 马克:C-spc
  5. 移动到你的比赛结束
  6. 杀死文本:C-w

然后,您可以用命名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

0

Isearch+已经做了这个。它可以选择设置搜索目标周围的区域。您可以在Isearch的任何时间使用C-SPC切换此项。