2010-02-02 8 views
6

Ho un file di testo. Emacs può selezionare il testo in base alla regex e metterlo in kill-ring, così posso copiarlo da qualche altra parte? Qualcosa come regex-kill-ring-save?Emacs copia con regex

risposta

3

ispirato ai commenti già dato (la risposta Charles non funziona come vorrei esso), ho aggiunto una nuova funzione alla mappa modalità isearch/isearch-regexp che mette solo la stringa corrispondente sul ring kill (considerando che la proposta Charles uccide dal punto corrente al fine di abbinare stringa):

(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) 

la cosa bella del/approccio isearch-regexp isearch (che è possibile attivare con rispettivamente C-s e C-M-s) è che puoi vedere crescere la stringa di ricerca e puoi copiare con M-w non appena si è soddisfatti (e tornare a dove sei stato prima con C-u C-Space).

Questo funziona per me con Emacs 23.1. Non so se funzionerà in tutte le situazioni. Comunque spero vi sia utile :)

UPDATE: passare attraverso l'emacswiki mi sono imbattuto nel corso KillISearchMatch che suggerisce più o meno gli stessi (più alcuni ulteriori suggerimenti ...).

Cheers, Daniel

+0

Grazie, è proprio quello che volevo, ma non riuscivo a fare da quando succhio a LISP. –

1

non sono sicuro se c'è una tale funzione già, ma cosa si può fare con una macro della tastiera:

  1. Avviare la registrazione di una macro kbd: C-x (
  2. Ricerca per la vostra espressione regolare con search-forward-regexp
  3. Spostarsi all'inizio della partita (il testo che si desidera eliminare) con i vari comandi di navigazione di emacs, ad es. search o backward-word ecc
  4. Mark: C-spc
  5. Spostarsi alla fine della vostra partita
  6. uccidere il testo: C-w

È quindi possibile assegnare un nome alla macro di tastiera con M-x name-last-kbd-macro in modo da poter eseguire la macro con un nome piuttosto che con C-x e.

Se si desidera salvare la macro per sessioni future, è possibile aprire .emacs e inserire la macro nel buffer con M-x insert-kbd-macro. Dopo di quanto è possibile associare un tasto alla macro proprio come si associano i tasti alle normali funzioni emacs, ad es. (global-set-key "\C-c m" 'funky-macro-macro).

More about emacs keyboard macros

0

Isearch+ fa questo già. Opzionalmente imposta la regione attorno al target di ricerca. Puoi utilizzare C-SPC in qualsiasi momento durante Isearch per passare da questo.