2010-10-12 4 views

Répondre

12

Essayez

M-z CHAR 

qui tue le texte par l'apparition prochaine de CHAR. Aka M-x zap-to-char. D'intérêt pourrait être la documentation pour Other Kill Commands.

Edité à ajouter: Sur demande, voici zap-to-before-char, qui vient de prendre le code source pour zap-to-char et retiré un commentaire (et doc string mise à jour):

(defun zap-to-before-char (arg char) 
    "Kill up to and ARGth occurrence of CHAR. 
Case is ignored if `case-fold-search' is non-nil in the current buffer. 
Goes backward if ARG is negative; error if CHAR not found." 
    (interactive "p\ncZap to char: ") 
    ;; Avoid "obsolete" warnings for translation-table-for-input. 
    (with-no-warnings 
    (if (char-table-p translation-table-for-input) 
     (setq char (or (aref translation-table-for-input char) char)))) 
    (kill-region (point) (progn 
         (search-forward (char-to-string char) nil nil arg) 
         (goto-char (if (> arg 0) (1- (point)) (1+ (point)))) 
         (point)))) 
+0

Je souhaite qu'il y ait M-x zap-to-regexp. ou au moins M-x zap-avant-char. – aartist

+0

@aartist 'zap-to-before-char' est facile - J'ai modifié la réponse pour inclure cela, le changement était dans le code source, juste commenté. On dirait que vous n'êtes pas le premier à vouloir ça. –

0

Bien sûr, définissez une macro. Commencez votre enregistrement macro en tapant c-x (. Ensuite, faites la séquence de commandes que vous voulez répéter:

c-s (
c-space 
c-s) 
M-w 

Terminez ensuite votre macro avec c-x). Utilisez-le avec c-x e.

Quelque chose comme ça ... Il y a probablement des problèmes de fencepost. Si vous ne voulez pas déplacer votre marque, enregistrez-la et restaurez-la au début de la macro.

Plus d'informations sur les macros (comme la façon de les sauver se lient à d'autres clés) ici:

http://www.emacswiki.org/emacs/KeyboardMacros

-1

Emacs a une commandes gazillion, donc il pourrait bien être celui qui fait exactement cela. Ce que je fais dans une telle situation est marquer ma place (avec ctrl-espace), puis faire une recherche avant (ctrl-s) et taper dans ce que je cherche (dans votre cas une fin-paren, mais ce pourrait être quelque chose de plus verbeux comme "end My_Procedure_Name" de Pascal. Cela va sélectionner tout le texte d'où j'ai marqué jusqu'à où il a trouvé le motif de recherche. Ensuite, je ctrl-k pour couper le texte dans le kill buffer.

En bref:

ctrl-space 
ctrl-s 
) return 
ctrl-k 

(et un ctrl-_ si vous voulez garder le texte où il est trop).

Il peut y avoir plus rapide/meilleur/etc. façons, mais c'est le sous-ensemble des commandes emacs que je connais assez bien pour faire sans avoir à arrêter de penser à ce sujet.

+0

Voilà comment je le fais si je dois le faire une fois. Si je dois le faire avec une certaine régularité, je fais une macro ... –

2

Si le curseur se trouve entre les parenthèses , la séquence la plus courte à laquelle je peux penser pour copier le groupe entier entre parenthèses (y compris les parenthèses) est C-M-u C-M-SPC M-w (backward-up-list, mark-sexp, kill-ring-save). Si vous voulez tuer ce texte, C-M-u C-M-k (backward-up-sexp, kill-sexp).Les commandes de sexp sont généralement la manière la plus facile de traiter avec des groupes entre parenthèses; d'autres commandes importantes sont C-M-b (backward-sexp) et C-M-f (forward-sexp) (notez le thème C-M-).

0

La beauté d'Emacs est qu'il est très facile d'écrire un peu elisp pour lui faire faire ce que vous voulez:

(defun mark-inside-delimiters() 
"Mark all chars inside the balanced expression point is in" 
    (interactive) 
    (let (p start pairs stop) 
    (skip-chars-backward "^<({[\"'") 
    (setq p (point)) 
    (setq start (char-to-string (preceding-char))) 
    (setq pairs '(("<" . ">")("(" . ")")("{" . "}") 
        ("[" . "]")("\"" . "\"")("'" . "'"))) 
    (setq stop (cdr (assoc start pairs))) 
    (skip-chars-forward (concat"^" stop)) 
    (set-mark p))) 

(global-set-key (kbd "C-c m") 'mark-inside-delimiters) 

Cet exemple particulier est la syntaxe consciente pas, il ne traitera pas des chaînes qui contiennent échappées guillemets, ou des parenthèses à l'intérieur des chaînes, mais cela fonctionne dans la plupart des cas.

+0

Je ne suis pas vraiment un hacker d'emacs, mais où devrais-je ajouter cette partie dans emacs? – starcorn

+0

Dans votre fichier ".emacs" qui contient tous vos paramètres Emacs. À l'intérieur d'Emacs, appuyez sur 'C-x C-f' (maintenez la touche Ctrl enfoncée, puis appuyez et relâchez x, puis f). Vous serez invité à entrer un nom de fichier. Tapez '~/.emacs' et appuyez sur Entrée. Collez le code ci-dessus où vous voulez dans ce fichier. –

Questions connexes