Як змінити розмір вікон emacs з розділеним екраном?


172

У мене emacs розділено горизонтально - зверху я редагую код Perl, знизу - оболонка. За замовчуванням emacs робить два вікна рівними за розміром, але я хотів би, щоб буфер оболонки був меншим (можливо, наполовину менше?). Мені було цікаво, як я можу це зробити.

Відповіді:


294

За допомогою миші ви можете перетягувати розміри вікон навколо.

Клацніть будь-де в рядку режиму, який не є іншим "активним" (ім'я буфера є безпечним або будь-яка невикористана область праворуч), і ви можете перетягнути вгору або вниз.

Перетягування з боку на бік вимагає дуже точного клацання на місці, де поєднуються дві лінії режиму.

C-x -( shrink-window-if-larger-than-buffer) зменшить вікно відповідно до його вмісту.

C-x +( balance-windows) зробить вікна однакової висоти та ширини.

C-x ^( enlarge-window) збільшує висоту на 1 рядок або значення аргументу префікса. Негативний аргумент стискає вікно. наприклад, C-- C-1 C-6 C-x ^зменшується на 16 рядів, як і у випадку C-u - 1 6 C-x ^.

(Немає за замовчуванням прив'язки для shrink-window.)

C-x }( enlarge-window-horizontally) робить так само, горизонтально.
C-x {( shrink-window-horizontally) також пов'язано за замовчуванням.

Виконуючи одну з цих команд з repeat( C-x zініціювати, і простоz для подальшого повторення), досить легко дістатися до потрібного розміру.

Якщо ви регулярно хочете робити це з певним значенням, ви можете записати макрос клавіатури, щоб це зробити, або використовувати щось подібне
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

Або це:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

Що є smidgen hacky, тож було б краще:

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

Дотично, мені також подобається, winner-modeщо дозволяє вам неодноразово «скасовувати» будь-які зміни в конфігураціях вікон C-c left(чи є зміна розміром / номером / розташуванням вікон, або лише тим, який буфер відображається). C-c rightповертає вас до останньої конфігурації. Встановіть це глобально за допомогою(winner-mode 1)


3
Дивовижно, саме те, що я хотів! Дуже дякую!
Стів

1
+1: спасибі за підказку режиму "скасувати" переможця. btw, в моєму випадку клацання на назві буфера відкриває наступний буфер. Але легко зрозуміти, коли ви можете змінити розмір, дивлячись на форму курсору миші.
jfs

34

Я вкладаю їх у свої .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)

Перші два не працюють для мене в Emacs 24.3.1 на Mac OSX 10.9.1
Оскар Персон

1
@OskarPersson Можливо, це конфлікт із глобальними ярликами. Визначте це в налаштуваннях налаштувань чи перестановці для блокування шапок (мій шлях), тоді він повинен працювати.
wilbeibi

У мене була така ж проблема, і я з'ясував, що лівий і правий С конфліктують із ярликами управління місією в системних налаштуваннях OS X, як описано у @Wilbeibi.
Дуг Річардсон

1
Ці ключі вже визначені, перший скинути ключі з (global-set-key (kbd "<C-up>") nil)до встановити його, але було б краще використовувати M-leftзамість цього
Маурісіо Кортасар

@MauricioCortazar Я не використовую Emacs роками. Ця відповідь може не застосовуватися зараз. Сміливо оновіть його.
wilbeibi

14

спробуємо використовувати довідковий документ emacs.

C-h a

Потім введіть "збільшити" або "вікно"

Ви знайдете те, що хочете.

Насолоджуйтесь!


Можливо, хтось працює в середовищі, в якому C-hнедоступний. Що тоді?
Деррелл Дерретт

1
Якщо ви затертий стандартна довідкова карта прив'язки, то ви , безумовно , повинні бути в курсі того , що ви відразу його з . (Якщо цього не зробити, спробуйте, <f1>яка є інша стандартна довідкова карта.)
філс

6

C-x oдо вікна, розмір якого потрібно розширити. Звідти C-x ^її розширити.


3
У випадку, якщо прив'язки різні (мої є), команда є enlarge-window. Додатковим підказом є використання аргументу префікса для контролю величини розширення.
Джозеф Гей

Дивовижно! Велике спасибі!
Стів

6

C-x ^приймає позитивні та негативні числові аргументи. Зокрема, якщо ви хочете зменшити вікно, де зараз знаходиться ваш курсор на чотири рядки, ви можете натиснути C-u -4 C-x ^.


2

Це не точна відповідь, яку ви шукаєте, але я натрапив на це питання, шукаючи функціональність в spacemacs , тому напишу свою відповідь лише для повноти.

Варіант - використовувати <SPC> + w + . (працює у ванільних космосах)

Це відкриває тимчасове вікно, де можна користуватися []{} розмір на детальному рівні.

Немає потреби в Cx або Mouse ...

Перехідний стан маніпуляції з вікном


якщо є щось подібне у звичайних emacs?
krokodil

Це , ймовірно , не існує, тому Дрю поставив це питання в першу чергу ...
Еш

0

У мене те саме питання. Ось моє рішення.
Спочатку я визначаю нову функцію:

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

Наприклад, я хочу запустити схему в буфері, тому я її переписав.
Ось визначення з функцією, визначеною раніше:

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

Тож тепер, коли я ввожу: Mx run-схема-ось, розмір буфера змінюється!
І ось мій конфігураційний файл, сподіваючись, що це допоможе. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


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