web-dev-qa-db-ja.com

emacsでバッファを分割した後にフォーカスを切り替えるにはどうすればよいですか?

ウィンドウを分割した後、それをお願いします(C-x 3またはC-x 2)新しく開いたバッファ(現在のもの以外)のカーソルに自動的に移動できるようにします。この動作を実現するにはどうすればよいですか?

35
morgan freeman

!!!この回答は使用しないでください!!!-コメントで指摘されているように、split-windowは、望ましくない副作用を引き起こす可能性があります。

代わりにBozhidar Batsovの回答をお勧めします。


.emacsファイルに以下を入力します。

(defadvice split-window (after move-point-to-new-window activate)
  "Moves the point to the newly created window after splitting."
  (other-window 1))
13
Thomas

C-x oでバッファを切り替えることができます。それを自動的に行うことに関しては、そのための既存のコマンドはないと思います。

57
Giann

あなたはこのようにそれを行うことができます:

(global-set-key "\C-x2" (lambda () (interactive)(split-window-vertically) (other-window 1)))
(global-set-key "\C-x3" (lambda () (interactive)(split-window-horizontally) (other-window 1)))

Emacs 24.3.1では、1の引数0を変更すると機能します。

30
Bozhidar Batsov

同様に手動でフレームを分割する C-x 2 または C-x 3、バッファも自動的に「ポップアップ」されることがあります。これらもデフォルトでは選択/アクティブ化されていません。

これは、ウィンドウの分割に使用する関数を変更することで修正できます。デフォルトではsplit-window-sensiblyに設定されていますが、split-window-sensiblyを呼び出してバッファを選択する独自の関数に設定できます。

残念ながら、これには、ヒットしたときに*Completions*バッファを選択するという副作用があります。 TAB ミニバッファで。したがって、ミニバッファーがアクティブであるかどうかを確認し、この場合はnot切り替えを確認することをお勧めします。他にもこのような望ましくないシナリオがあると思います。私はそれらを見つけたときにこの投稿を更新しようとします。

;; after splitting a frame automatically, switch to the new window (unless we
;; were in the minibuffer)
(setq split-window-preferred-function 'my/split-window-func)
(defun my/split-window-func (&optional window)
  (let ((new-window (split-window-sensibly window)))
    (if (not (active-minibuffer-window))
        (select-window new-window))))

(Emacs 24.5.1で動作します。)

1
edam

split-windowの後にウィンドウを追跡したいときの私の考えは、次のコードのように同じバッファーがあったときでした:

(defun split-window--select-window (orig-func &rest args)
  "Switch to the other window after a `split-window'"
  (let ((cur-window (selected-window))
        (new-window (apply orig-func args)))
    (when (equal (window-buffer cur-window) (window-buffer new-window))
      (select-window new-window))
    new-window))
(advice-add 'split-window :around #'split-window--select-window)

シンプルな

1
Nothus