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:
- Abro algunas divisiones usando
Cx 3
yCx 2
- Abro el terminal en uno de ellos usando el
Mx term ENT
- ¿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.