46

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

4

6 に答える 6

67

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

于 2011-06-24T08:02:53.940 に答える
39

次のように実行できます。

(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ます。

于 2011-06-24T08:45:15.680 に答える
14

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

代わりにBozhidarBatsovの答えをお勧めします。


.emacsファイルに以下を入れてください:

(defadvice split-window (after move-point-to-new-window activate)
  "Moves the point to the newly created window after splitting."
  (other-window 1))
于 2011-06-24T08:59:08.010 に答える
3

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

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

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

;; 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 で動作します。)

于 2015-10-09T23:18:21.020 に答える
1

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)

単純

于 2016-12-08T06:49:17.027 に答える