salir que español emacs

que - Funciones avanzadas de edición de Emacs



que es emacs (8)

Como nadie lo ha dicho directamente, lo haré.

La razón por la cual emacs carece de un "editor decente" es porque una gran parte del punto de emacs es permitirle hacer el editor ideal para usted. Esta no es una tarea trivial, y hay muchas cosas que otras personas han escrito y suficientes personas han encontrado útil para ser incluidas en las distribuciones estándar de la misma.

No está destinado a ser usado en la configuración predeterminada, realmente. De Verdad. No está destinado a ser una pieza de software que usted pincha, pincha y modifica un poco aquí y allá, tanto como un editor que puede desgarrar el comportamiento de convertirlo en lo que quiera que sea.

Entonces, sí, sí, ya sea un equivalente existente de $feature de $editor , o suponiendo que nadie haya escrito uno aún, puede estar seguro de que puede implementarlo.

Hay un montón de ruido sobre las características super impresionantes de Emacs. Ya sea org-mode , Gnus o Cx Mc Butterfly . He usado Emacs durante años, así que no hay necesidad de convencerme.

Lo que encontré personalmente es que nadie habla de ... realmente editar texto. Tú lo sabes

Emacs es un sistema operativo agradable, pero carece de un editor decente.

¿broma? Realmente no lo entendí hasta que gimoteé a Vim.

Ahora, escribí mi tesis usando Emacs como mi editor de texto, así que mi corazón todavía está unido a ella. También estoy muy envidioso acerca de org-mode. ¿Entonces me pregunté si tal vez hay características que me he estado perdiendo todo el tiempo?

Te voy a dar algunos ejemplos que uso todo el tiempo:

  • o / O abre una nueva línea por encima / por debajo de la corriente y me pone en modo de inserción, sin importar en qué posición se encuentre el cursor.
  • ci'' borra el contenido de la cadena actual / siguiente'' y me pone en modo de inserción.
  • dat elimina la etiqueta HTML actual. cit borraría los contenidos y me pondría en modo insert. cstt me dejaría editar la etiqueta (por ejemplo, hacer un <span> en un <div> )
  • cs([ cambia el entorno "(" y ")" por "[" y "]".
  • Una extensión me permite abordar las sangrías de Python: dai eliminaría el bloque actual sangrado, //ai lo comentaría (// es una extensión).

¿Hay algunos accesos directos súper secretos pero accesos directos de fácil acceso para cosas como esta en Emacs? Sublime Text 2 tiene algunas funciones de "expandir selección" que funcionan de manera similar aunque no tan precisas, pero aún así son muy útiles.

PD Por favor, no muestres ninguna emulación de vi, simplemente no lo hagas.

PPS También por el amor de Dios, no Emacs vs. Vim vs. Cualquier guerra, te lo ruego.


No hay respuesta a tu pregunta.

Es un viaje continuo, uno en el que puede comenzar escribiendo Mx help y haciendo esto con frecuencia.

Todos tienen un conjunto diferente de características sin las cuales no pueden vivir. Entonces, aparte de enumerar todas las funciones de edición de texto disponibles, intente (re) leer el recorrido de Emacs , las FAQ y el manual de Emacs . Los lugares más activos para encontrar información sobre complementos son Emacs Wiki y Emacs Lisp Package Archive (que se distribuirán con Emacs 24).

El 99% de las funciones que no conoce se encontrarán en los enlaces anteriores.

Por supuesto, también puede consultar la pregunta / respuesta estándar de SO: ¿cuál es la característica más útil ... ?


No soy un experto en Emacs, pero https://sites.google.com/site/steveyegge2/effective-emacs parece cubrir algunos ejemplos útiles. Especialmente los elementos 6 (control de búfer) y 7 (perder la interfaz de usuario) parecen ser dignos de memorización. Además, la sección de comentarios cubre algunos consejos de los lectores.


Ok, esto probablemente no es super secreto, pero lo uso constantemente.

Es el comando de ocurrir
<Mostrar todas las líneas en el búfer actual que contiene una coincidencia para EXPRression REGular>

Por ejemplo, es muy útil para mostrar todas las líneas donde se usa una variable en particular.

Mx ocurre <Enter> <escribe tu objetivo de búsqueda> luego <Enter>
Esto abrirá un nuevo búfer que muestra las líneas coincidentes. Puede mover el cursor a cada aparición usando el comando: next-error

Para mí, no son convenientes en absoluto a menos que vuelva a definir las teclas para ejecutar los comandos. Por lo tanto, asigno control-o al comando de ocurrencia y control-n al comando de siguiente error.

Para hacer eso (o tu (s) clave (s))
pon esto en tu archivo .emacs:
(Ocurre la clave de conjunto global "/ Co")
(global-set-key "/ Cn" ''next-error)


Puedes echar un vistazo a

thing-at-point-utils.el

Proporciona cosas como esa:

  • ar-brace-or-copy-atpt

    "Si la región está resaltada, proporcione COSA en el punto con corchetes, de lo contrario, copie el corchete (ed) en el punto. Con NO-DELIMITERS, copie el corsé (ed) sin delimitadores. Con el argumento negativo, mate la llave (ed) en el punto".

  • ar-bracket-or-copy-atpt

    "Si la región está resaltada, proporcione COSA en el punto con corchetes, de lo contrario, copie el corchete (ed) en el punto. Con NO-DELIMITERS, copie el corchete (ed) sin delimitadores. Con el argumento negativo, elimine el corchete (ed) en el punto".

  • ar-lesser-angle-or-copy-atpt

    "Si la región está resaltada, proporcione COSA en el punto con menor (s) ángulo (s), de lo contrario, copie el menor ángulo (ed) en el punto. Con NO-DELIMITERS, copie el menor ángulo (ed) sin delimitadores. Con el argumento negativo, mate a lesser- ángulo (ed) en el punto ".

Teclas en uso aquí:

(global-set-key [(control c)(<)] ''ar-lesser-angle-or-copy-atpt) (global-set-key [(control c)(>)] ''ar-greater-angle-or-copy-atpt) (global-set-key [(control c)(/")] ''ar-doublequote-or-copy-atpt) (global-set-key [(control c)(/')] ''ar-singlequote-or-copy-atpt) (global-set-key [(control c)(/))] ''ar-parentize-or-copy-atpt) (global-set-key [(control c)(//)] ''ar-backslash-or-copy-atpt) (global-set-key [(control c)(/])] ''ar-bracket-or-copy-atpt) (global-set-key [(control c)(/})] ''ar-brace-or-copy-atpt) (global-set-key [(control c)(_)] ''ar-underscore-or-copy-atpt) (global-set-key [(control c)(super /})] ''ar-brace-or-copy-atpt) (global-set-key [(control c)(//)] ''ar-slash-or-copy-atpt)

Fuente:

https://launchpad.net/s-x-emacs-werkstatt


Sé que dijiste que no mencionas ningún modo de emulación vi, pero si no lo has hecho, deberías darle un vistazo a Evil ya que realmente te da básicamente el poder de la manipulación de texto de vi dentro de Emacs. Lo mejor de ambos mundos realmente: la amplia capacidad de ampliación de Emacs con la poderosa manipulación de texto de Vi.


Busque esta página wiki. Tiene muchos y muchos trucos. La mayoría de ellos los encontré (de repente) para mí mismo antes de leerlos, pero este artículo vale la pena leerlo.

Pruebe Ch k cada C-<key> M-<key> . Algo como Mc, Ml, Mu es útil para mí, Mz para zap-to-char . La respuesta de platino sería "aprender a usar i-search". Cw, CMy, Mr son súper útiles en el modo i-search.

No conozco ningún paquete, lo que me ayuda a editar algo, que rodea mi punto. Un día escribí uno para mí, pero resultó inútil. Si me importa escribir algo nuevamente, lo primero que haré es pensar, ¿qué debo escribir? ¿Qué pasa con su comportamiento? ¿Debe ser N comandos separados para cada tipo de paréntesis, o uno, pero inteligente? ¿Cómo debería funcionar? Matar por uso de llavero? (Las discusiones son bienvenidas).

Para ~ lisp, uso los comandos de edición sexp.

Hay algo que escribí para mí.

(defun cm-fast-step-upward () "Step 3 lines up, recenteres the screen." (interactive) (forward-line -3) (recenter)) (defun cm-fast-step-downward () "Step 3 lines down, recenteres the screen." (interactive) (forward-line 3) (recenter)) (defun cm-find-any-bracket-forward() "Search for /"_}_]_''_>_)_end forward" (interactive) (re-search-forward "[/"}''>)]//|//(end//)//|//]")) (defun cm-find-any-bracket-backward() "Search for /"_{_[_''_<_(_begin forward" (interactive) (re-search-backward "[/"{''<(]//|//(begin//)//|//[")) (defun cm-find-nonspace-backward() "Search for non tab, space, newline symbol backward." (interactive) (if (and (search-backward-regexp "[ ]" (point-min) t) (search-backward-regexp "[^ ]" (point-min) t)) (forward-char) (goto-char (point-min)))) (defun cm-find-nonspace-forward() "Search for non tab, space, newline symbol backward." (interactive) (if (and (search-forward-regexp "[ ]" (point-max) t) (search-forward-regexp "[^ ]" (point-max) t)) (backward-char) (goto-char (point-max)))) (defun cm-backward-delete-word(&optional arg) "DELETE word before cursor. Warning, this word cannot be yanked." (interactive "p") (let ((beg (point))) (backward-word arg) (delete-region beg (point))) ) (defun cm-delete-word(&optional arg) "DELETE word after cursor. Warning, this word cannot be yanked." (interactive "p") (let ((beg (point))) (forward-word arg) (delete-region beg (point))) ) (defun cm-delete-line(&optional arg) "DELETE line after cursor. Warning, this line cannot be yanked." (interactive "P") (if (equal arg ''-) (setq arg -1)) (let ((beg (point))) (if arg (forward-line arg) (goto-char (point-at-eol))) (if (= beg (point)) (delete-char 1 nil) (delete-region beg (point))))) (defun cm-reverse-region (&optional arg) "Reverse current region, like this: /"a(bc) d/" -> /"d )cb(a/"." (interactive "P") (let ((reversed (apply ''string (reverse (string-to-list (buffer-substring-no-properties (region-beginning) (region-end))))))) (delete-region (region-beginning) (region-end)) (insert reversed))) (provide ''cmmove)

Nunca compartí (¿debería hacerlo?) Antes, puedes dejar comentarios.

Los enlaces predeterminados utilizan la clave Hyper

(global-set-key [?/H-f] ''cm-find-nonspace-forward) (global-set-key [?/H-b] ''cm-find-nonspace-backward) (global-set-key [?/H-/]] ''cm-find-any-bracket-forward) (global-set-key [?/H-/[] ''cm-find-any-bracket-backward) (global-set-key [?/H-p] ''cm-fast-step-upward) (global-set-key [?/H-n] ''cm-fast-step-downward) (global-set-key (kbd "H-t") ''cm-reverse-region)

También deseo descubrir qué comportamiento te gusta de estos comandos. Si no encuentran algo, ¿deberían enviar un mensaje o lanzar un error?


  • El comando vim o/O es un comando de dos teclas en emacs. Para o , Ce <return> (final de línea, vuelva a crear una nueva línea). Para O , Ca Co (principio de línea, línea abierta).
  • ffap-copy-string-as-kill (no está vinculado a una clave de forma predeterminada, pero se arregla fácilmente) hace algo similar a su ci'' . En emacs, no hay concepto de "modo de inserción".

No cambio "(" ")" a "[" "]" lo suficiente como para aprender una secuencia de teclas para ello. Si tuviera que hacerlo, recurriría primero a query-replace-regexp ( CM-% ).

No edito mucho Python o HTML, pero estoy seguro de que hay trucos inteligentes en los modos apropiados para sus necesidades.

Editado en respuesta a los comentarios.

Funciones de edición más avanzadas que uso con frecuencia:

  • Macros de teclado. Esta es una amplia categoría de trucos, pero si hay muchas ediciones similares que tengo que hacer en un búfer, grabo una macro y la repito. Si la macro es muy útil, se puede guardar para futuras sesiones. Esto puede ser muy poderoso cuando la búsqueda es parte de la macro. Un ejemplo de uso es tomar una definición de una enum en C y crear rápidamente una declaración de cambio. Consulte http://www.emacswiki.org/emacs/KeyboardMacros y http://www.emacswiki.org/emacs/KeyboardMacrosTricks para obtener más información.
  • Siempre que uso vim, siempre pierdo la búsqueda incremental. No avanzado, pero me parece mucho más fácil de usar que buscar en vim, especialmente cuando no estoy seguro de la ortografía de lo que estoy tratando de encontrar.
  • Marcas. Cada vez que inicia una búsqueda incremental, la posición actual se empuja a la pila de marcas para que sea rápido volver a su posición anterior. Puede empujar una marca en cualquier momento y abrir la pila de marcas para retroceder a través de puntos interesantes en el búfer. Consulte http://www.emacswiki.org/emacs/MarkCommands .
  • Modo TRAMP para editar archivos en máquinas remotas. Consulte http://www.emacswiki.org/emacs/TrampMode .
  • Ediciones rectangulares. string-insert-rectangle y rectangle-delete son buenos amigos míos.

Es difícil saber lo que encontrará útil. Cada usuario tendrá una característica favorita diferente. La característica que me hizo comenzar a usar emacs fue Mx compile . Use Mg n para saltar a la ubicación del archivo del siguiente error o advertencia en la salida de compilación.