Подтвердить что ты не робот

Как переключиться на другой буфер из буферного терминала

Я использую emacs в течение нескольких недель, и это было здорово до сих пор - от vim было легче, чем я ожидал (на самом деле - быстрые клавиши emacs больше... естественны).

Я добавил несколько настроек, например, перемещение между буферами с помощью M-Left/Right/Up/Down, потому что C-x o чувствовал себя немного медленнее, когда у меня сразу было четыре файла.

До сих пор - так хорошо: -)

Одна вещь меня пугает:

  • Я открываю некоторые расщепления с помощью C-x 3 и C-x 2
  • Я открываю терминал в одном из них, используя M-x term ENT
  • Как мне переключиться на разные расщепления с помощью клавиатуры?

Обычные ярлыки, очевидно, не работают - терминал перехватывает каждую команду emacs, и мне нужно щелкнуть по другому буферу, чтобы активировать его.

4b9b3361

Ответ 1

В терминальном режиме любая регулярная привязка C-x whatever становится C-c whatever.

Ответ 2

Я не уверен, что понимаю ваш вопрос. Если вы запустите M-x terminal, большинство ключевых событий отправляются на базовый терминал, поэтому стандартная привязка C-x o и ваш M-Left недоступны в терминале.

Попробуйте использовать M-x shell, чтобы получить оболочку в одном из окон, и настройки привязки навигации, которые вы настроили, должны работать.

Ответ 3

В терминальном режиме введите C-c b RET, чтобы переключиться на другой буфер.

Это делает то, что обычно делает C-x b RET.

Ответ 4

Это должно сделать трюк, чтобы заставить C-x b работать. Возможно, вам придется добавлять привязки для любых пользовательских команд перемещения.

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

BTW, существует большая разница между режимами оболочки и термином. Первый интегрируется лучше с emacs (например, команда cd). Последний представляет собой полную эмуляцию терминала и может обрабатывать программы проклятий. Они оба имеют свое место.

Ответ 5

Для получения более общего ответа, касающегося окон emacs, вы можете посмотреть windmove, который начал поставляться с Emacs около Emacs 22, я полагаю:

;;; 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.