2012-06-15 48 views
4

假設我們有以下文字:更好的搜索

(print "thIis-is-a-text") 

光標是在「這」這字符之間的「H」和「我」。

在Emacs,如果我鍵入銫CW,搜索文本是 '是',

再次CW是 '是,是',

再次CW是「是-is-A」,

再次

CW是 'IS-IS-A-文本',

再次C-w is'is-is-a-text''...

還有一個emacs插件expand region:「展開區域通過語義單元增加選定區域。只要保持按下鍵直到其選擇你想要什麼「

所以我想讓銫CW更聰明:與拓展區結合

字符‘H’之間光標「我。 「這個詞‘這個’再次,我的目標是:

當我輸入銫CW,單詞‘這個’將是搜索的文本,

再次將是」這 - 是 - 一文字',

再次將「‘這 - 是 - 一文’」,

再次將「打印‘這 - 是 - 一文’」,

再會「(打印「這 - 是-A-文本「)」,

....(行爲就像擴大區域,也許這不是一個很好的例子......)

,因爲我覺得有時候擴大區域是在搜索文本非常有用,我希望有人可以編寫一些代碼來實現這一點,因爲我是emacs和elisp的新手。謝謝,請原諒我的英文破碎! :)

+0

在expand-region的github項目頁面上發出功能請求。這應該是有用的。 –

回答

3

有一個叫thingopt非常簡單的封裝,使用thingatpt做類似的事情,擴大區域。我一直在使用modified version,這增加了isearch的支持。這個問題提醒我叉,並提出拉請求。我在init.el如下:

(define-key isearch-mode-map (kbd "C-S-s") 'upward-isearch-thing) 
(define-key isearch-mode-map (kbd "M-3") 'upward-isearch-thing) 

(global-set-key (kbd "C-S-s") 'upward-mark-thing) 
(global-set-key (kbd "M-3") 'upward-mark-thing) 

(setq upward-mark-thing-list 
     '(email 
     url 
     word 
     symbol 
     string 
     (up-list . *) 
     paragraph 
     )) 

我試圖擴大區域,我想我會更好,但它看起來要複雜得多,而且我要補充ISEARCH在開始使用之前支持。希望有一天我會(或者其他人會)接受它。

+0

我剛剛試過你的東西。它工作正常。是的,既擴大區域和thingopt是偉大的,但擴大區域更爲區域設計。 Thingopt可能在搜索中足夠強大。謝謝,jpkotta。 – Boris

1
(defadvice isearch-yank-word-or-char (before move-to-beginning-of-word) 
    (unless (eq last-command this-command) 
    (goto-char (car (bounds-of-thing-at-point 'word))))) 
(ad-activate 'isearch-yank-word-or-char) 
+0

謝謝你的回答。但似乎只能用於C-s C-w一次(選擇光標下的當前單詞)。當我繼續在C-s之後鍵入C-w時,要搜索的文本看起來不像插件'expand-region'(不嘗試擴展區域)。 – Boris