emacs розділився на 3 парних вікна


79

Швидке запитання: Як мені вказати кількість символів у розділеному вікні? Cx-3 Розбиває моє вікно на два вікна рівномірно, але подальший розкол розділить одне з вікон навпіл. Я хотів би 3 однакових вікна. У документації сказано, що я повинен мати можливість вказати кількість символів для лівого буфера як параметр, але, здається, я не можу змусити це працювати. Будь-які ідеї щодо синтаксису?

Дякую.

Відповіді:


24

Щоб вказати кількість символів у розділеному вікні, виконайте:

Cu кількість символів Cx 3


Занадто мала ширина вікна (після розбиття)
Mittenchops

5
Проблема полягає в тому , що вікна не вирівнюються , це встановлення ширини вручну, і тому вам доведеться підрахувати, скільки символів у вікно emacs має широкий і високий розмір, щоб розмістити їх рівномірно. Відповідь нижче є більш корисною.
leinaD_natipaC

23
C-x +зробити їх рівномірно розміщеними
Джош Ф

1
Проголосовано проти, оскільки розмір вручну. Я не хочу рахувати висоту свого терміналу і ділити її на 3.
byxor

Це відповідає на питання, але Джош. Коментар F та відповідь Джоша Метьюз - те, що хотілося б більшості людей.
Зак

271

C-x 3двічі з наступним C-x +рівним розміром усіх вікон.


8
Чи є спосіб змусити Emacs негайно створити три однаково великі вікна за допомогою однієї команди, а не робити C-x 3 C-x 3 C-x +?
SabreWolfy

3
@sabrewolfy зробити макрос
interestedparty333

Або C-x 2 C-x +для горизонтального розщеплення (добре для вертикального монітора)
lil 'wing

15

У мене є таке .emacs:

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

це змушує виклик emacs rebalance-windows(а це те, що C-x +пов’язано за замовчуванням) після кожного зміни розміру. Це не те, чого я хочу постійно, але хочу цього набагато частіше, ніж поведінка за замовчуванням.


дякую за це, але я не впевнений, що вам потрібен дзвінок, (ad-activate ...)оскільки ви включили activateв окрему форму.
wpcarro

12

додати .emacs. Я зіставив карту на Cx 4, але хтось має кращу ідею?

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

5
Я б не призначив це C-x 4. Це префікс за замовчуванням для купи інших команд. Дивіться C-x 4 C-h(очевидно, не встановлюючи прив’язки).
phils

3
@phils whoa після всіх цих років, і я ніколи не знав, як отримати список команд із загальним префіксом ... Я люблю 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))

Ця функція може бути використана для розділення поточного вікна на N вікон. Ви можете набрати "Cu 3 Mx wenshan-split-window-vertical", щоб досягти бажаного.



1

Мені сподобалось рішення @ quodlibetor, але воно не працювало, як написано. Це працює для мене (emacs 24.5)

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

0

Однією з проблем багатьох відповідей, які balance-windowsтут використовуються, є те, що вони можуть не дозволити розбиттю вікна через window-min-widthабо split-width-thresholdнавіть якщо все буде добре після перебалансування. Наприклад, я не хочу вікна шириною менше 100 символів, але якщо я розділю екран раз, я отримую два вікна шириною 160 символів, які неможливо розділити знову, не змінивши розмір одного з вікон. Я ще не з’ясував, як визначити, чи хороший розкол, ще добрий, тому я, мабуть, просто динамічно прив’яжу ці значення до 0 під час розбиття, і, можливо, window-configuration-to-registerзаздалегідь зроблю про це на всякий випадок, щоб я міг відновити старий макет, коли все піде неправильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.