emacs emacs23

emacs - Cómo cambiar a un búfer diferente de un búfer de terminal



emacs23 (5)

He estado usando emacs durante algunas semanas y hasta ahora ha sido excelente, viniendo de vim era más fácil de lo que esperaba (en realidad, los atajos de teclado de emacs se sienten más ... naturales).

He agregado algunas personalizaciones como moverme entre buffers usando M-Left/Right/Up/Down porque Cx o sentía un poco lento cuando tenía cuatro archivos abiertos a la vez.

Hasta aquí todo bien :-)

Sin embargo, una cosa me molesta:

  1. Abro algunas divisiones usando Cx 3 y Cx 2
  2. Abro el terminal en uno de ellos usando el Mx term ENT
  3. ¿Cómo cambio a una división diferente usando el teclado?

Los atajos usuales obviamente no funcionan: el terminal está interceptando cada comando de emacs, y tengo que hacer clic en un buffer diferente para activarlo.


En el modo de término, cualquier Cx whatever regular cualquiera que Cx whatever enlace de clave se convierte en Cc whatever lugar.


En el modo de término, escriba Cc b RET para cambiar a otro buffer.

Eso hace lo que normalmente hace Cx b RET.


Esto debería hacer el truco para que Cx b funcione. Puede que tenga que agregar enlaces para cualquier comando de movimiento personalizado.

(add-hook ''term-mode-hook (lambda () ;; C-x is the prefix command, rather than C-c (term-set-escape-char ?/C-x) (define-key term-raw-map "/M-y" ''yank-pop) (define-key term-raw-map "/M-w" ''kill-ring-save)))

Por cierto, hay una gran diferencia entre el modo de shell y el modo de término. El primero se integra mejor con emacs (por ejemplo, comando cd). El último es una emulación de terminal completa y puede manejar programas de maldición. Ambos tienen su lugar.


No estoy seguro de entender tu pregunta. Si ejecuta el terminal Mx , la mayoría de los eventos clave se envían al terminal subyacente, por lo que el enlace Cx o estándar y su M-Left no están disponibles en el terminal.

Intente utilizar Mx shell para obtener un shell en una de las ventanas, y los enlaces de navegación que configure deberían funcionar.


Para una respuesta más genérica relacionada con las ventanas de emacs, puede ver windmove , que comenzó a windmove con Emacs alrededor de Emacs 22, creo:

;;; Commentary: ;; ;; This package defines a set of routines, windmove-{left,up,right, ;; down}, for selection of windows in a frame geometrically. For ;; example, `windmove-right'' selects the window immediately to the ;; right of the currently-selected one. This functionality is similar ;; to the window-selection controls of the BRIEF editor of yore. ;; ;; One subtle point is what happens when the window to the right has ;; been split vertically; for example, consider a call to ;; `windmove-right'' in this setup: ;; ;; ------------- ;; | | A | ;; | | | ;; | |----- ;; | * | | (* is point in the currently ;; | | B | selected window) ;; | | | ;; ------------- ;; ;; There are (at least) three reasonable things to do: ;; (1) Always move to the window to the right of the top edge of the ;; selected window; in this case, this policy selects A. ;; (2) Always move to the window to the right of the bottom edge of ;; the selected window; in this case, this policy selects B. ;; (3) Move to the window to the right of point in the selected ;; window. This may select either A or B, depending on the ;; position of point; in the illustrated example, it would select ;; B. ;; ;; Similar issues arise for all the movement functions. Windmove ;; resolves this problem by allowing the user to specify behavior ;; through a prefix argument. The cases are thus: ;; * if no argument is given to the movement functions, or the ;; argument given is zero, movement is relative to point; ;; * if a positive argument is given, movement is relative to the top ;; or left edge of the selected window, depending on whether the ;; movement is to be horizontal or vertical; ;; * if a negative argument is given, movement is relative to the ;; bottom or right edge of the selected window, depending on whether ;; the movement is to be horizontal or vertical.