2010-02-02 12 views
6

Ich habe eine Textdatei. Kann Emacs Text basierend auf Regex auswählen und in den Kill-Ring legen, damit ich ihn woanders kopieren kann? So etwas wie Regex-kill-ring-save?Emacs kopieren mit Regex

Antwort

3

von den bereits gegebenen Kommentare inspiriert (die Charles Antwort nicht, wie ich es möchte, nicht funktioniert), habe ich eine neue Funktion zum isearch/isearch-regexp Modus Karte, die nur die passende String setzt in den Kill-Ring (während vom aktuellen Punkt tötet Charles Vorschlag zu Ende Reihe von passenden):

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

Das schöne an der isearch/isearch-regexp Ansatz (die Sie mit C-s und C-M-s bzw. aktivieren können) ist, dass Sie können sehen, dass Ihre Suchzeichenfolge wächst und Sie können kopieren es mit M-w, sobald Sie zufrieden sind (und gehen Sie zurück, wo Sie vorher mit C-u C-Space waren).

Dies funktioniert für mich mit Emacs 23.1. Ich weiß nicht, ob es in allen Situationen funktioniert. Wie auch immer ich hoffe, Sie finden es nützlich :)

UPDATE: durch die emacswiki ich dabei über KillISearchMatch gestolpert, die mehr oder weniger die gleichen schlägt (plus einige weitere Tipps ...).

Cheers, Daniel

+0

Danke, es ist genau das, was ich wollte, aber konnte nicht machen, seit ich bei LISP lutsche. –

1

Ich bin mir nicht sicher, ob es bereits eine solche Funktion ist, aber was Sie es mit einer Tastatur Makro tun können:

  1. Starten Sie ein kbd Makroaufnahme: C-x (
  2. Suchen Sie Ihren regexp mit search-forward-regexp
  3. Mit den verschiedenen Emacs-Navigationsbefehlen, z. B. zum Anfang des Spiels (der Text, den Sie töten möchten), gehen Mark search oder backward-word usw.
  4. : C-spc
  5. Gehen Sie zum Ende Ihrer Spiel
  6. den Text töten: C-w

Sie können dann benennen Sie die Tastatur-Makros mit M-x name-last-kbd-macro, so dass Sie das ausführen kann Makro mit einem Namen anstatt mit C-x e. Wenn Sie das Makro für zukünftige Sitzungen speichern möchten, können Sie .emacs öffnen und das Makro mit M-x insert-kbd-macro in den Puffer einfügen. Danach können Sie einen Schlüssel an das Makro binden, genauso wie Sie Schlüssel an normale Emacs-Funktionen binden, z. (global-set-key "\C-c m" 'funky-macro-macro).

More about emacs keyboard macros

0

Isearch+ tut dies bereits. Es legt optional die Region um das Suchziel fest. Sie können jederzeit während Isearch C-SPC verwenden, um dies umzuschalten.