2010-10-12 7 views

risposta

12

Prova

M-z CHAR 

che uccide il testo attraverso l'occorrenza successiva della CHAR. Aka M-x zap-to-char. Di interesse potrebbe essere la documentazione per Other Kill Commands.

A cura di aggiungere: Su richiesta, qui è zap-to-before-char, che appena ha preso il codice sorgente per zap-to-char e rimosso un commento (e doc string aggiornato):

(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

Vorrei che ci fosse M-x zap-to-regexp. o atleast M-x zap-before-char. – aartist

+0

@aartist 'zap-to-before-char' è facile - Ho modificato la risposta per includere che, la modifica era nel codice sorgente, appena commentata. Sembra che tu non sia stato il primo a volerlo. –

0

Certo, definire una macro. Avvia la registrazione macro digitando c-x (. Poi fate la sequenza di comandi che si desidera ripetere:

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

poi finire la macro con c-x). Usalo con c-x e.

Qualcosa del genere ... Probabilmente ha dei problemi con il recinto. Se non vuoi che mandi il tuo segno, salvalo e ripristinalo all'inizio della macro.

Maggiori informazioni sulle macro (come il modo per salvare li legano ad altri tasti) qui:

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

-1

Emacs ha un gazillion comandi, quindi ci potrebbe essere uno che fa esattamente questo.

Quello che faccio in tale situazione è contrassegnare il mio punto (con ctrl-spazio), quindi effettuare una ricerca in avanti (ctrl-s) e digitare quello che sto cercando (nel tuo caso un fine-paren, ma potrebbe essere qualcosa di più verboso come "End My_Procedure_Name;" di Pascal). Questo selezionerà tutto il testo da dove ho marcato fino a dove ha trovato il modello di ricerca. Poi ho ctrl-k per tagliare il testo nel kill buffer.

In breve:

ctrl-space 
ctrl-s 
) return 
ctrl-k 

(e un ctrl-_ se si desidera mantenere il testo in cui è troppo).

Ci può essere più veloce/migliore/ecc. modi, ma questo è il sottoinsieme dei comandi di emacs che conosco abbastanza bene da fare senza dovermi fermare a pensarci.

+0

Ecco come lo faccio se ho bisogno di farlo una volta. Se ho bisogno di farlo con regolarità, creo una macro ... –

2

Se il cursore si trova tra le parentesi , la sequenza più breve che riesco a pensare di copiare l'intero gruppo parentesi (comprese le parentesi) è C-M-u C-M-SPC M-w (backward-up-list, mark-sexp, kill-ring-save). Se si desidera eliminare il testo, C-M-u C-M-k (backward-up-sexp, kill-sexp).I comandi sexp sono generalmente il modo più semplice per trattare i gruppi parentesi; altri comandi importanti sono C-M-b (backward-sexp) e C-M-f (forward-sexp) (notare il tema C-M-).

0

La bellezza di Emacs è che è molto facile scrivere qualche elisp per fargli fare ciò che si vuole:

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

Questo particolare esempio è non sintassi-aware in modo che non gestire le stringhe che contengono citazioni sfuggite, o parentesi all'interno di stringhe, ma funziona per la maggior parte dei casi.

+0

non sono un granché un hacker di emacs, ma dove dovrei aggiungere quella parte in emacs? – starcorn

+0

Nel tuo file ".emacs" che ha tutte le tue impostazioni di Emacs. All'interno di Emacs, premi 'C-x C-f' (tieni premuto Ctrl, quindi premi e rilascia x, quindi f). Ti verrà richiesto un nome per il file. Scrivi '~/.emacs' e premi invio. Incolla il codice sopra ovunque ti piaccia in quel file. –

Problemi correlati