2010-02-02 6 views
6

J'ai un fichier texte. Emacs peut-il sélectionner du texte basé sur regex et le mettre en kill-ring, donc je peux le copier ailleurs? Quelque chose comme regex-kill-ring-save?Emacs copie avec regex

Répondre

3

inspiré des commentaires déjà donné (la réponse Charles ne fonctionne pas comme je veux), j'ai ajouté une nouvelle fonction à la isearch/isearch-regexp carte de mode qui ne fait que la chaîne correspondante dans l'anneau de tuer (alors que la proposition Charles tue du point en cours à la fin de chaîne correspondant):

(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 bonne chose au sujet de la isearch/approche isearch-regexp (que vous pouvez activer avec C-s et C-M-s respectivement) est que vous pouvez voir votre chaîne de recherche en croissance et vous pouvez copier avec M-w dès que vous êtes satisfait (et revenir à l'endroit où vous avez été auparavant avec).

Cela fonctionne pour moi avec Emacs 23.1. Je ne sais pas si cela fonctionnera dans toutes les situations. Quoi qu'il en soit, je l'espère qu'elle vous sera utile :)

MISE À JOUR: passant par le emacswiki je suis tombé sur KillISearchMatch qui suggère plus ou moins les mêmes (plus quelques conseils ...).

Cheers, Daniel

+0

Merci, c'est juste ce que je voulais, mais je n'ai pas pu faire depuis que je suis nul à LISP. –

1

Je ne sais pas s'il y a une telle fonction déjà, mais ce que vous pouvez le faire avec une macro du clavier:

  1. Démarrer l'enregistrement d'une macro kbd: C-x (
  2. Recherchez votre regexp avec search-forward-regexp
  3. Déplacez au début de votre match (le texte que vous voulez tuer) avec les diverses commandes de navigation emacs, par exemple search ou backward-word etc.
  4. Marque: C-spc
  5. Déplacer à la fin de votre match
  6. Tuez le texte: C-w

Vous pouvez nommer la macro du clavier avec M-x name-last-kbd-macro afin que vous puissiez exécuter la macro avec un nom plutôt qu'avec C-x e.

Si vous souhaitez enregistrer la macro pour les sessions ultérieures, vous pouvez ouvrir votre .emacs et insérer la macro dans le tampon avec M-x insert-kbd-macro. Après que vous pouvez lier une clé à la macro, tout comme vous liez les clés aux fonctions emacs normales, par ex. (global-set-key "\C-c m" 'funky-macro-macro).

More about emacs keyboard macros

0

Isearch+ Est-ce déjà. Il définit éventuellement la région autour de la cible de recherche. Vous pouvez utiliser C-SPC à tout moment pendant Isearch pour basculer ceci.