2010-10-12 5 views

Respuesta

12

Trate

M-z CHAR 

que mata el texto a través de la siguiente aparición de CHAR. Aka M-x zap-to-char. De interés podría ser la documentación para Other Kill Commands.

Editado para añadir: A petición, aquí es zap-to-before-char, que acaba de tomar el código fuente de zap-to-char y se retira un comentario (y cadena de documentación actualizada):

(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

Ojalá hubiera M-x zap-a-regexp. o al menos M-x zap-antes-char. – aartist

+0

@aartist 'zap-to-before-char' es fácil - He modificado la respuesta para incluir eso, el cambio fue en el código fuente, simplemente comentado. Parece que no fuiste el primero en querer esto. –

0

Claro, defina una macro. Comience su macro grabación escribiendo c-x (. A continuación, realice la secuencia de comandos que desea repetir:

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

luego terminar su macro con c-x). Úselo con c-x e.

Algo así ... Es probable que tenga problemas con la cerca. Si no desea que mueva su marca, guárdela y restaurela al inicio de la macro.

Más información sobre las macros (como la forma de salvar a atarlos a otras teclas) aquí:

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

-1

Emacs tiene un tropecientos comandos, por lo que bien podría ser uno que hace exactamente eso.

Lo que hago en tal situación es marcar mi lugar (con ctrl-espacio), luego hacer una búsqueda hacia adelante (ctrl-s) y escribir lo que estoy buscando (en su caso un final-paren, pero podría ser algo más detallado como "end My_Procedure_Name" de Pascal; Eso seleccionará todo el texto desde donde marqué hasta donde encontró el patrón de búsqueda. Luego ctrl-k para cortar el texto en el buffer de destrucción.

En resumen:

ctrl-space 
ctrl-s 
) return 
ctrl-k 

(y una ctrl-_ si desea mantener el texto donde es demasiado).

Puede haber más rápido/mejor/etc. maneras, pero ese es el subconjunto de comandos de emacs que sé lo suficientemente bien como para hacer sin tener que detenerme a pensar en ello.

+0

Así es como lo hago si necesito hacerlo una vez. Si necesito hacerlo con regularidad, hago una macro ... –

2

Si el cursor se encuentra entre los paréntesis , la secuencia más corta que se me ocurre para copiar el grupo entre paréntesis completo (incluidos los paréntesis) es C-M-u C-M-SPC M-w (backward-up-list, mark-sexp, kill-ring-save). Si desea eliminar ese texto, C-M-u C-M-k (backward-up-sexp, kill-sexp).Los comandos sexp generalmente son la forma más fácil de tratar con grupos entre paréntesis; otros comandos importantes son C-M-b (backward-sexp) y C-M-f (forward-sexp) (observe el tema C-M-).

0

La belleza de Emacs es que es muy fácil de escribir algo de elisp para que haga lo que quiere:

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

Este ejemplo en particular no es consciente de la sintaxis por lo que no se encargará cadenas que contienen Frases escapadas, o paréntesis dentro de las cadenas, pero funciona para la mayoría de los casos.

+0

no soy muy hacker de emacs, pero ¿dónde debería agregar esa parte en emacs? – starcorn

+0

En su archivo ".emacs" que tiene todas las configuraciones de Emacs. Dentro de Emacs, presione 'C-x C-f' (mantenga presionada la tecla Ctrl, luego presione y suelte x, luego f). Se le pedirá un nombre de archivo. Escriba '~/.emacs' y presione enter. Pegue el código anterior en cualquier lugar que desee en ese archivo. –

Cuestiones relacionadas