2010-02-02 52 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切換此項。