Emacs in 3 gleichmäßige Fenster aufgeteilt

79

Kurze Frage: Wie gebe ich die Anzahl der Zeichen in einem geteilten Fenster an? Cx-3 Teilt mein Fenster gleichmäßig in zwei Fenster, aber eine nachfolgende Teilung teilt eines der Fenster in zwei Hälften. Ich hätte gerne 3 gleich große Fenster. Die Dokumentation besagt, dass ich in der Lage sein sollte, die Anzahl der Zeichen für den linken Puffer als Parameter anzugeben, aber ich kann nicht scheinen, dass dies funktioniert. Irgendwelche Ideen für die Syntax?

Vielen Dank.

Dolch
quelle

Antworten:

24

Gehen Sie wie folgt vor, um die Anzahl der Zeichen im geteilten Fenster anzugeben:

Cu Anzahl der Zeichen Cx 3

Nikwin
quelle
Fensterbreite zu klein (nach dem Teilen)
Mittenchops
5
Das Problem ist , dass die Fenster nicht gleichmäßig sind. Dadurch wird die Breite manuell eingestellt, und Sie müssen zählen, wie viele Zeichen breit und hoch das Emacs-Fenster ist, um eine gleichmäßige Größe zu erzielen. Die Antwort unten ist nützlicher.
leinaD_natipaC
23
C-x +um sie gleichmäßig zu verteilen
Josh.F
1
Downvoted wegen manueller Größenänderung. Ich möchte meine Terminalhöhe nicht zählen und durch 3 teilen.
byxor
Dies beantwortet die Frage, aber Josh. Fs Kommentar und Josh Matthews Antwort sind das, was die meisten Leute gerne hätten.
Zach
270

C-x 3zweimal gefolgt von, C-x +um alle Fenster gleich zu dimensionieren.

Josh Matthews
quelle
8
Gibt es eine Möglichkeit, Emacs dazu zu bringen, sofort drei gleich große Fenster mit einem Befehl zu erstellen, anstatt dies zu tun C-x 3 C-x 3 C-x +?
SabreWolfy
3
@ Sabrewolfy machen ein Makro
Ragerdl
Oder C-x 2 C-x +für horizontale Aufteilung (gut für vertikalen Monitor)
kleiner Flügel
15

Ich habe folgendes in meinem .emacs:

(defadvice split-window-horizontally (after rebalance-windows activate)
  (balance-windows))
(ad-activate 'split-window-horizontally)

Dadurch rebalance-windowswird C-x +nach jeder Größenänderung ein Emacs-Aufruf ausgeführt ( an den standardmäßig gebunden ist). Es ist nicht das, was ich die ganze Zeit will, aber ich will es viel öfter als das Standardverhalten.

Quodlibetor
quelle
Vielen Dank dafür, aber ich bin nicht sicher, ob Sie den Anruf benötigen, (ad-activate ...)da Sie activatein einem separaten Formular aufgenommen haben.
wpcarro
12

hinzufügen .emacs. Ich habe Cx 4 zugeordnet, aber hat jemand eine bessere Idee?

(defun split-3-windows-horizontally-evenly ()
  (interactive)
  (command-execute 'split-window-horizontally)
  (command-execute 'split-window-horizontally)
  (command-execute 'balance-windows)
)

(global-set-key (kbd "C-x 4") 'split-3-windows-horizontally-evenly)
xosp7tom
quelle
5
Das würde ich nicht zuordnen C-x 4. Dies ist das Standardpräfix für einen Haufen anderer Befehle. Siehe C-x 4 C-h(natürlich ohne Ihre Bindung festzulegen).
Phils
3
@phils whoa nach all den Jahren und ich wusste nie, wie man eine Liste von Befehlen mit einem gemeinsamen Präfix bekommt ... Ich liebe Emacs.
mgalgs
4
(defun wenshan-split-window-vertical (&optional wenshan-number)
"Split the current window into `wenshan-number' windows"
  (interactive "P")
  (setq wenshan-number (if wenshan-number
                           (prefix-numeric-value wenshan-number)
                         2))
  (while (> wenshan-number 1)
    (split-window-right)
    (setq wenshan-number (- wenshan-number 1)))
  (balance-windows))

Mit dieser Funktion können Sie das aktuelle Fenster in N Fenster aufteilen. Geben Sie "Cu 3 Mx wenshan-split-window-vertikal" ein, um das gewünschte Ergebnis zu erzielen.

Wenshan
quelle
2

Wenn Sie das Böse benutzen, tun Sie es C-x 3und dannC-w =

endre
quelle
1

Ich mochte die Lösung von @ quodlibetor, aber sie funktionierte nicht wie geschrieben. Das funktioniert bei mir (emacs 24.5)

(advice-add 'split-window-right :after #'balance-windows)
ianxm
quelle
0

Eines der Probleme bei vielen der hier verwendeten Antworten balance-windowsbesteht darin, dass das Fenster möglicherweise nicht geteilt werden kann, weil window-min-widthoder split-width-thresholdsogar wenn nach dem Neuausgleich alles in Ordnung wäre. Zum Beispiel möchte ich keine Fenster mit einer Breite von weniger als 100 Zeichen, aber wenn ich meinen Bildschirm einmal teile, erhalte ich zwei Fenster mit einer Breite von 160 Zeichen, die nicht erneut geteilt werden können, ohne die Größe eines der Fenster zu ändern. Ich habe noch nicht herausgefunden, wie ich feststellen kann, ob eine Aufteilung gut ist, daher werde ich diese Werte beim Aufteilen wahrscheinlich nur dynamisch an 0 binden und dies möglicherweise window-configuration-to-registervorher tun, nur für den Fall, dass ich das alte Layout wiederherstellen kann, wenn die Dinge laufen falsch.

Dave Abrahams
quelle