Wie ändere ich die Größe von Emacs-Fenstern mit geteiltem Bildschirm?


172

Ich habe Emacs horizontal aufgeteilt - oben bearbeite ich Perl-Code, unten ist die Shell. Standardmäßig sind die beiden Fenster durch Emacs gleich groß, aber ich möchte, dass der Shell-Puffer kleiner wird (vielleicht halb so groß?). Ich fragte mich, wie ich das machen könnte.

Antworten:


294

Mit der Maus können Sie die Fenstergrößen verschieben.

Klicken Sie auf eine beliebige Stelle in der Moduszeile, die ansonsten nicht "aktiv" ist (der Puffername ist sicher oder ein nicht verwendeter Bereich auf der rechten Seite), und Sie können nach oben oder unten ziehen.

Das Ziehen von Seite zu Seite erfordert einen sehr präzisen Klick auf die Stelle, an der sich die beiden Moduslinien verbinden.

C-x -( shrink-window-if-larger-than-buffer) verkleinert ein Fenster entsprechend seinem Inhalt.

C-x +( balance-windows) macht Fenster gleich hoch und breit.

C-x ^( enlarge-window) erhöht die Höhe um 1 Zeile oder den Präfix-Arg-Wert. Ein negatives Argument verkleinert das Fenster. zB C-- C-1 C-6 C-x ^schrumpft um 16 Zeilen, wie es tutC-u - 1 6 C-x ^ .

(Es gibt keine Standardbindung für shrink-window.)

C-x }( enlarge-window-horizontally) tut es ebenfalls horizontal.
C-x {((shrink-window-horizontally ) ist ebenfalls standardmäßig gebunden.

Folgen Sie einem dieser Befehle mit repeat( C-x zzu initiieren und gerechtz zur weiteren Wiederholung) befolgen, ist es ziemlich einfach, genau die gewünschte Größe zu erreichen.

Wenn Sie dies regelmäßig mit einem bestimmten Wert tun möchten, können Sie dazu ein Tastaturmakro aufzeichnen oder so etwas verwenden
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

Oder dieses:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

Welches ist ein smidgen hacky, also wäre das besser:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

Tangential finde ich es auch winner-modetoll, dass Sie Änderungen an Fensterkonfigurationen wiederholt rückgängig machen können C-c left(unabhängig davon, ob es sich bei der Änderung um die Größe / Anzahl / Anordnung der Fenster handelt oder nur darum , welcher Puffer angezeigt wird). C-c rightbringt Sie zur neuesten Konfiguration zurück. Stellen Sie es global mit ein(winner-mode 1)


3
Genial, genau das, was ich wollte! Ich danke dir sehr!
Steve

1
+1: Danke für den Tipp zum Rückgängigmachen des Gewinnermodus. Übrigens öffnet in meinem Fall ein Klick auf den Puffernamen den nächsten Puffer. Es ist jedoch leicht zu erkennen, wann Sie die Größe der Mauszeigerform ändern können.
JFS

34

Ich habe diese in meine .emacs:

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)

Die ersten beiden funktionieren nicht für mich in Emacs 24.3.1 unter Mac OSX 10.9.1
Oskar Persson

1
@OskarPersson Es könnte der Konflikt mit globalen Verknüpfungen sein. Finden Sie es vorzugsweise heraus oder ordnen Sie die Steuerung der Feststelltaste neu zu (auf meine Weise). Dann sollte es funktionieren.
Wilbeibi

Ich hatte das gleiche Problem und fand heraus, dass C-links und C-rechts mit Mission Control-Verknüpfungen in den OS X-Systemeinstellungen in Konflikt standen, wie von @Wilbeibi beschrieben.
Doug Richardson

1
Diese Tasten sind bereits definiert, zuerst die Tasten unset mit (global-set-key (kbd "<C-up>") nil)vor - Set, aber wäre besser nützen M-leftstatt
Mauricio Cortazar

@MauricioCortazar Ich habe Emacs seit Jahren nicht mehr verwendet. Diese Antwort gilt derzeit möglicherweise nicht. Fühlen Sie sich frei, es zu aktualisieren.
Wilbeibi

13

Lassen Sie uns versuchen, das Emacs-Hilfedokument zu verwenden.

C-h a

Geben Sie dann "Vergrößern" oder "Fenster" ein.

Sie finden, was Sie wollen.

Genießen!


Es ist möglich, dass man in einer Umgebung arbeitet, in der C-hes nicht verfügbar ist. Was dann?
Derrell Durrett

1
Wenn Sie die Standard - Hilfe - Map - Bindung, verprügelt haben , dann sollten Sie sicher wissen, was Sie es verprügelt habe mit . (Andernfalls versuchen Sie <f1>, die andere Standard-
Hilfekartenbindung zu verwenden

6

C-x ozu dem Fenster, dessen Größe Sie erweitern möchten. Von dort aus, C-x ^um es zu erweitern.


3
Falls die Bindungen unterschiedlich sind (meine), lautet der Befehl enlarge-window. Ein zusätzlicher Tipp ist die Verwendung eines Präfixarguments, um das Ausmaß der Erweiterung zu steuern.
Joseph Gay

Genial! Vielen Dank!
Steve

6

C-x ^nimmt positive und negative numerische Argumente. Insbesondere wenn Sie das Fenster, in dem sich Ihr Cursor derzeit befindet, um vier Zeilen verkleinern möchten, können Sie drücken C-u -4 C-x ^.


2

Dies ist nicht die genaue Antwort, nach der Sie suchen, aber ich bin auf diese Frage gestoßen, als ich nach der Funktionalität in gesucht habe spacemacs habe. Deshalb schreibe ich meine Antwort nur der Vollständigkeit halber.

Die Option ist zu verwenden <SPC> + w + . (es funktioniert in Vanille Spacemacs)

Dies öffnet ein vorübergehendes Fenster, in dem man verwenden kann []{} dem die Größe auf granularer Ebene geändert werden kann.

Cx oder Maus sind nicht erforderlich ...

Übergangszustand der Fenstermanipulation


Gibt es etwas Ähnliches in regulären Emacs?
Krokodil

Es ist wahrscheinlich nicht da, weshalb Drew diese Frage überhaupt erst gestellt hat ...
Yesh

0

Ich habe die gleiche Frage. Hier ist meine Lösung.
Zuerst definiere ich eine neue Funktion:

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

Zum Beispiel möchte ich das Schema in einem Puffer ausführen, also schreibe ich es neu.
Und hier ist die Definition mit der zuvor definierten Funktion:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

Wenn ich jetzt Folgendes eingebe: Mx run-Schema-hier, wird die Größe des Puffers geändert!
Und hier ist meine Konfigurationsdatei, in der Hoffnung, dass dies helfen wird. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
Ihr Link ist defekt :(
Ciprian Tomoiagă
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.