webentwicklung-frage-antwort-db.com.de

Wie kann ich den Fokus wechseln, nachdem der Puffer in Emacs aufgeteilt wurde?

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?

33
morgan freeman

!!! 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))
13
Thomas

Mit C-x o können Sie zwischen Puffern wechseln. Um dies automatisch zu tun, glaube ich nicht, dass dafür ein Befehl existiert.

51
Giann

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.

23
Bozhidar Batsov

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

1
edam

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

0
Nothus