Emacs

2008-10-14 30 views
37
'da işaretli (seçili) metin aranıyor

Kod ve diğer metin dosyalarını görüntülemek ve düzenlemek için emacs kullanıyorum. Mevcut tamponda işaretlenmiş metin için ileriye veya geriye doğru arama yapmanın bir yolu olup olmadığını öğrenmek istedim. Not Defteri'nde veya wordpadde yapabileceğim şeye benzer. İçerisinde olduğu gibi, bazı metni arabellekte işaretleyebilir, C-s veya C-r yapabilir ve işaretli metnin tamamını, tüm arama metnini yazmadan arayabilir miyim? Emacs

, teşekkür ederiz

Rohit

cevap

30

Evet. M-W (seçili metnin bir kopyasını almak için) C-s <RET> C-y <RET>. Ardından, gerektiği şekilde C-s'u tekrarlayın. C-r için benzer şekilde.

@
+0

Sevindim. Bu arada, kılavuzun ilgili bölümü "20.1 Artan Arama Temelleri" dir. Ch idm emacs g Temel Arama http://www.manpagez.com/info/emacs/emacs_95.php –

+0

Zaten böyle yaptım ... Tek bir yerleşik komut olmadığını biraz şaşırdım bunun için. – fbmd

+8

Bu, işaretli metnin nasıl aranacağını açıklamıyor. Bu, kopyalanan metnin nasıl aranacağını açıklar. – Jackson

81
@

@Alex tırnakları.

Geçerli işaretlemeden sonra sözcüğü aramak için sık kullandığım bir diğer seçenek C-s C-w. C-w numarasına vurmak, aramayı art arda ek kelimelerle artırır (ör. Geçerli işaretin ardından 3 kelimeyi C-s C-w C-w C-w arar).

C-s C-y, C-s C-M-y işaretinden sonraki satırı arar ve C-s C-M-y satırın geri kalanını arar. Bunlar aynı şekilde tekrarlanabilir. ağırlık Cı - - sM - y

+1

Gerçekten kullanışlı bir ipucudur. – Rohit

+0

Benzer şekilde, "C-r C-w", işaretinden sonraki kelime için geriye doğru ("r" = geri) arar. Ve “C-r C-w C-w”, işaretinden sonra iki kelime için geriye doğru arar. – dougkramer

+2

Bu kabul edilen cevap olmalı. –

6

yapmak için kısa tuş sırası M olup.

+0

Tüm büyük harfli metinleri vurgulasanız bile, bu sözcüğün küçük harfleri için bu aramaları dikkate almaya değer. – maxywb

+0

Bu, bir komut değil, bir komuttur, başka bir deyişle, bunu geçersiz kılan herhangi bir ortamda anlamsızdır. Bize hangi komuttan bahsetmeye çalıştığınızı anlamak için bizi vahşi bir kaz avına gönderiyor. –

12

Daha sonra oluşumları bulmak için bir ardışık Cs daha sonra yazmak zorunda sorunu yok aşağıdakileri kullanıyorum:

(defun search-selection (beg end) 
     "search for selected text" 
     (interactive "r") 
     (kill-ring-save beg end) 
     (isearch-mode t nil nil nil) 
     (isearch-yank-pop) 
    ) 
    (define-key global-map (kbd "<C-f3>") 'search-selection) 

önceki kodun dezavantajı seçili metin kopyalanır olduğunu Esnetmek. Aşağıdaki kod bu sorun yok:

(defun search-selection (beg end) 
     "search for selected text" 
     (interactive "r") 
     (let (
      (selection (buffer-substring-no-properties beg end)) 
      ) 
     (deactivate-mark) 
     (isearch-mode t nil nil nil) 
     (isearch-yank-string selection) 
    ) 
    ) 
    (define-key global-map (kbd "<C-f3>") 'search-selection) 
3

Diğer cevaplar kopyalanan metin veya nasıl noktada kelimeyi aramak için aramak için nasıl açıklar. Ancak bunların hiçbiri aslında "işaretli metni nasıl arayacağınızı" açıklar.

anda seçili metin bir iSearch için kullanılan metin olacak şekilde aşağıdaki kanca ekleme yapacaktır:

(defun jrh-isearch-with-region() 
    "Use region as the isearch text." 
    (when mark-active 
    (let ((region (funcall region-extract-function nil))) 
     (deactivate-mark) 
     (isearch-push-state) 
     (isearch-yank-string region)))) 

(add-hook 'isearch-mode-hook #'jrh-isearch-with-region) 

İpucu: güzel expand-region ile bu çift.

3

Bunun için harika bir işlev var: isearch-forward-symbol-at-point.Bu, noktanızın bulunduğu kelimenin tüm oluşumlarını vurgular - noktanın sözcüğün başına yerleştirilmesine gerek yoktur. Ardından C-s veya C-r ile bir sonraki veya bir önceki sayfaya geçebilirsiniz.

Tam bir eşleşme olduğunu unutmayın: hi numaralı telefondan kullanıyorsanız, örneğin chill eşleşmeyecektir.

Init dosyasında command-f (Mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point) için eşlenmiş durumdayım.

+0

Bu, (neredeyse) sorunun tam olarak ne istediğini yapar. Tek fark, "isearch-forward-symbol-at-point" kelimesinin otomatik olarak metni noktayı seçmesidir. Bir kelimeyi düşündüğünüz, Emacs'in bir kelimeyi gördüğü şeyden farklıysa, bu sorun yaratabilir. Yine de kullanışlı. GNU Emacs 24.5.1'deki varsayılan bağ, 'M-s'dir. –