Jak zmienić rozmiar okien emacsa na podzielonym ekranie?


172

Mam emacsa podzielonego poziomo - na górze edytuję kod Perla, na dole jest powłoka. Domyślnie emacs sprawia, że ​​oba okna są równe, ale chciałbym, aby bufor powłoki był mniejszy (może o połowę mniejszy?). Zastanawiałem się, jak mogłem to zrobić.

Odpowiedzi:


294

Za pomocą myszy możesz przeciągać rozmiary okien.

Kliknij w dowolnym miejscu linii trybu, która nie jest „aktywna” w inny sposób (nazwa bufora jest bezpieczna lub dowolny nieużywany obszar po prawej stronie) i możesz przeciągać w górę lub w dół.

Przeciąganie z boku na bok wymaga bardzo precyzyjnego kliknięcia w miejscu, w którym łączą się dwie linie trybu.

C-x -( shrink-window-if-larger-than-buffer) zmniejszy okno, aby dopasować je do jego zawartości.

C-x +( balance-windows) sprawi, że okna będą miały taką samą wysokość i szerokość.

C-x ^( enlarge-window) zwiększa wysokość o 1 linię lub wartość argumentu przedrostka. Ujemny argument zmniejsza okno. np. C-- C-1 C-6 C-x ^zmniejsza się o 16 rzędów, tak jak robi C-u - 1 6 C-x ^.

(Nie ma domyślnego powiązania dla shrink-window.)

C-x }( enlarge-window-horizontally) działa podobnie, poziomo.
C-x {( shrink-window-horizontally) jest również domyślnie powiązany.

Wykonanie jednego z tych poleceń za pomocą repeat( C-x zaby zainicjować i tylko w zcelu dalszego powtarzania) sprawia, że ​​dość łatwo jest uzyskać dokładny żądany rozmiar.

Jeśli regularnie chcesz to robić z określoną wartością, możesz zarejestrować makro klawiatury, aby to zrobić, lub użyć czegoś podobnego
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

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

Co jest dość hacky, więc byłoby lepiej:

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

Stycznie, uwielbiam również, winner-modektóry pozwala ci wielokrotnie „cofać” wszelkie zmiany w konfiguracjach okien C-c left(niezależnie od tego, czy zmiana dotyczy rozmiaru / liczby / układu okien, czy tylko tego, który bufor jest wyświetlany). C-c rightpowrót do ostatniej konfiguracji. Ustaw to globalnie za pomocą(winner-mode 1)


3
Niesamowite, dokładnie to, czego chciałem! Dziękuję bardzo!
Steve

1
+1: dzięki za wskazówkę dotyczącą trybu „cofnij” zwycięzcę. btw, w moim przypadku kliknięcie nazwy bufora otwiera następny bufor. Ale łatwo jest zobaczyć, kiedy można zmienić rozmiar, patrząc na kształt kursora myszy.
jfs

34

Umieściłem je w moim .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)

Pierwsze dwa nie działają dla mnie w Emacs 24.3.1 na Mac OSX 10.9.1
Oskar Persson

1
@OskarPersson Może to być konflikt ze skrótami globalnymi. Znajdź to w preferencjach lub przemapuj na Caps Lock (mój sposób), powinno wtedy działać.
wilbeibi

Miałem ten sam problem i dowiedziałem się, że lewa C i prawa C są w konflikcie ze skrótami Mission Control w Preferencjach systemowych OS X, jak opisał @Wilbeibi.
Doug Richardson

1
Te klawisze są już zdefiniowane, najpierw odznacz klawisze (global-set-key (kbd "<C-up>") nil)przed ich ustawieniem, ale lepiej byłoby M-leftzamiast tego
Mauricio Cortazar

@MauricioCortazar Od lat nie używam Emacsa. Ta odpowiedź może teraz nie mieć zastosowania. Zapraszam do aktualizacji.
wilbeibi

14

spróbujmy użyć dokumentu pomocy emacsa.

C-h a

Następnie wpisz „powiększ” lub „okno”

Znajdziesz to, czego chcesz.

Cieszyć się!


Możliwe, że pracujesz w środowisku, które C-hnie jest dostępne. Co wtedy?
Derrell Durrett

1
Jeśli niszczona standardową mapę pomocy wiązania, to należy z pewnością być świadomi tego, co już niszczona go z . (W przeciwnym razie, spróbuj <f1>która jest inna norma pomocy map wiążące.)
phils

6

C-x odo okna, którego rozmiar chcesz rozszerzyć. Stamtąd, C-x ^aby go rozwinąć.


3
W przypadku, gdy wiązania są różne (moje są), polecenie brzmi enlarge-window. Dodatkową wskazówką jest użycie przedrostka arg, aby kontrolować wielkość rozszerzenia.
Joseph Gay,

Niesamowite! Dziękuję Ci bardzo!
Steve

6

C-x ^przyjmuje dodatnie i ujemne argumenty liczbowe. W szczególności, jeśli chcesz zmniejszyć okno, w którym obecnie znajduje się kursor, o cztery linie, możesz nacisnąć C-u -4 C-x ^.


2

Nie jest to dokładna odpowiedź, której szukasz, ale natknąłem się na to pytanie, szukając funkcjonalności w programie spacemacs, więc napiszę swoją odpowiedź tylko ze względu na kompletność.

<SPC> + w + .Opcją jest użycie (działa w waniliowych spacemacach)

Otwiera to przejściowe okno, w którym można []{}zmienić rozmiar na poziomie szczegółowości.

Nie ma potrzeby używania Cx ani myszy ...

Stan przejściowy manipulacji oknem


czy jest coś podobnego w zwykłym emacsie?
krokodil

Prawdopodobnie go tam nie ma, dlatego Drew zadał to pytanie w pierwszej kolejności ...
Jesz

0

Mam to samo pytanie. Oto moje rozwiązanie.
Najpierw definiuję nową funkcję:

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

Na przykład chcę uruchomić schemat w buforze, więc przepisuję go.
A oto definicja, z funkcją zdefiniowaną wcześniej:

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

Więc teraz, kiedy wpisuję: Mx run-scheme-tutaj, rozmiar bufora zostanie zmieniony!
A oto mój plik konfiguracyjny, mam nadzieję, że to pomoże. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
Twój link jest uszkodzony :(
Ciprian Tomoiagă
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.