web-dev-qa-db-ja.com

ターミナルバッファから別のバッファに切り替える方法

私は数週間emacsを使用してきましたが、これまでのところ素晴らしく、vimからのアクセスは思ったより簡単でした(実際、emacsのキーボードショートカットはもっと自然に感じます)。

M-Left/Right/Up/Downを使用してバッファ間を移動するなど、いくつかのカスタマイズを追加しました。これは、一度に4つのファイルを開いたときにC-x oが少し遅すぎると感じたためです。

ここまでは順調ですね :-)

しかし、私を悩ませていることが1つあります。

  1. C-x 3C-x 2を使用していくつかの分割を開きます
  2. M-x term ENTを使用してそのうちの1つでターミナルを開きます
  3. キーボードを使用して別のスプリットに切り替えるにはどうすればよいですか?

通常のショートカットは明らかに機能しません-ターミナルはすべてのemacsコマンドをインターセプトしているので、別のバッファーをクリックしてアクティブにする必要があります。

54
lukaszkorecki

用語モードでは、通常のC-x whateverキーバインドは代わりにC-c whateverになります。

121
Josh Matthews

用語モードでは、C-c b RETと入力して、他のバッファに切り替えます。

これは、C-x bRETが通常行うことを行います。

9
offby1

これで、C-xbを機能させることができます。カスタム移動コマンドのバインディングを追加する必要がある場合があります。

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

ところで、シェルモードとタームモードには大きな違いがあります。前者はemacsとよりよく統合されます(例:cdコマンド)。後者は完全なターミナルエミュレーションであり、cursesプログラムを処理できます。彼らは両方とも彼らの場所を持っています。

3
harpo

Emacsのウィンドウを扱うより一般的な答えについては、Emacs22頃にEmacsで出荷され始めたwindmoveを見ることができます。

;;; 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.
2
Joe Casadonte