Ich möchte, dass nach dem Teilen des Fensters (C-x 3
oder C-x 2
) der Cursor automatisch in den neu geöffneten Puffer (den anderen als den aktuellen) verschoben wird. Wie kann ich dieses Verhalten erreichen?
!!! VERWENDEN SIE DIESE ANTWORT NICHT !!! - Wie in den Kommentaren erwähnt, kann die Empfehlung von split-window
zu unerwünschten Nebenwirkungen führen.
Ich empfehle stattdessen die Antwort von Bozhidar Batsov .
Fügen Sie Folgendes in Ihre .emacs-Datei ein:
(defadvice split-window (after move-point-to-new-window activate)
"Moves the point to the newly created window after splitting."
(other-window 1))
Mit C-x o
können Sie zwischen Puffern wechseln. Um dies automatisch zu tun, glaube ich nicht, dass dafür ein Befehl existiert.
Sie können es so machen:
(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)))
In Emacs 24.3.1 funktioniert es, wenn Sie das Argument 1
für 0
ändern.
Sowie das Aufteilen des Rahmens manuell mitC-x 2OderC-x 3werden Puffer auch automatisch einige Male "aufgeplatzt". Diese sind ebenfalls standardmäßig nicht ausgewählt/aktiv.
Dies kann durch Ändern der Funktion zum Teilen eines Fensters behoben werden. Es ist standardmäßig auf split-window-sensibly
eingestellt, aber Sie können es auf Ihre eigene Funktion einstellen, die split-window-sensibly
aufruft und dann den Puffer auswählt.
Leider hat dies den Nebeneffekt, dass Sie den *Completions*
- Puffer auswählen, wenn Sie auf drückenTABim Minipuffer. Es wird auch überprüft, ob der Minipuffer aktiv ist und in diesem Fall nicht umzuschalten. Ich wette, es gibt auch andere solche unerwünschten Szenarien. Ich werde versuchen, diesen Beitrag zu aktualisieren, sobald ich sie gefunden habe.
;; 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))))
(Funktioniert mit Emacs 24.5.1.)
Ich dachte daran, wann man dem Fenster nach einem split-window
folgen wollte, als es den gleichen Puffer wie im folgenden Code hatte:
(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)
Einfach