Как изменить размер окон Emacs с разделенным экраном?

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


person Steve    schedule 13.02.2011    source источник


Ответы (7)


С помощью мыши вы можете перемещать размеры окна.

Щелкните в любом месте строки режима, которая в противном случае не была бы «активной» (имя буфера безопасно, или любая неиспользуемая область справа), и вы можете перетащить вверх или вниз.

Перетаскивание из стороны в сторону требует очень точного щелчка в месте соединения двух линий режима.

C-x - (shrink-window-if-larger-than-buffer) сжимает окно, чтобы оно соответствовало его содержимому.

C-x + (balance-windows) сделает окна одинаковой высоты и ширины.

C-x ^ (enlarge-window) увеличивает высоту на 1 строку или значение аргумента префикса. Отрицательный аргумент уменьшает окно. например C-- C-1 C-6 Cx ^ сжимается на 16 строк , как и Cu - 1 6 Cx ^ .

(Для shrink-window привязки по умолчанию нет.)

Cx } (enlarge-window-horizontally) делает то же самое по горизонтали.
Cx { (shrink-window-horizontally) также ограничивается дефолт.

После одной из этих команд с repeat (Cx 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, который позволяет многократно «отменять» любые изменения в конфигурациях окон с помощью Cc left (независимо от того, касается ли изменение размера / количества / расположения окон, или только какой буфер отображается). C-c right возвращает вас к самой последней конфигурации. Установите его глобально с помощью (winner-mode 1)

person phils    schedule 14.02.2011
comment
Круто, именно то, что я хотел! Большое спасибо! - person Steve; 17.02.2011
comment
+1: спасибо за совет об отмене режима победителя. кстати, в моем случае щелчок по имени буфера открывает следующий буфер. Но это легко увидеть, когда вы можете изменить размер, глядя на форму курсора мыши. - person jfs; 20.03.2012

Я положил это в свой .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)
person wilbeibi    schedule 03.03.2013
comment
Первые два не работают у меня в Emacs 24.3.1 на Mac OSX 10.9.1 - person Oskar Persson; 14.01.2014
comment
@OskarPersson Это может быть конфликт с глобальными ярлыками. Найдите это в предпочтениях или переназначьте элемент управления на Caps Lock (по-моему), тогда он должен работать. - person wilbeibi; 15.01.2014
comment
У меня была такая же проблема, и я обнаружил, что C-left и C-right конфликтуют с ярлыками Mission Control в системных настройках OS X, как описано @Wilbeibi. - person Doug Richardson; 27.08.2014
comment
Эти ключи уже определены, сначала отключите ключи с помощью (global-set-key (kbd "<C-up>") nil), прежде чем устанавливать его, но лучше вместо этого использовать M-left - person Mauricio Cortazar; 08.12.2017
comment
@MauricioCortazar Я не использовал Emacs в течение многих лет. Этот ответ может не подходить сейчас. Не стесняйтесь обновлять его. - person wilbeibi; 08.12.2017
comment
Мне это нравится, но я использую M-k (увеличить), M-j (уменьшить), M-l (увеличить по горизонтали) и M-l (уменьшить по горизонтали). - person goetzc; 09.08.2018

давайте попробуем использовать справочный документ emacs.

C-h a

Затем введите «увеличить» или «окно».

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

Наслаждаться!

person maoyang    schedule 21.05.2016
comment
Возможно, кто-то работает в среде, в которой C-h недоступен. Что тогда? - person Derrell Durrett; 22.05.2017
comment
Если вы затерли стандартную привязку карты справки, то вы обязательно должны знать, чем вы ее затирали с помощью. (В противном случае попробуйте <f1>, который является другой стандартной привязкой справочной карты.) - person phils; 20.09.2017

C-x o в окно, размер которого вы хотите увеличить. Оттуда C-x ^, чтобы расширить его.

person vpit3833    schedule 14.02.2011
comment
Если привязки разные (у меня), используется команда enlarge-window. Дополнительный совет - использовать префикс arg для управления степенью расширения. - person Joseph Gay; 14.02.2011
comment
Потрясающий! Большое тебе спасибо! - person Steve; 17.02.2011

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

person justinpc    schedule 03.07.2013

Это не точный ответ, который вы ищете, но я наткнулся на этот вопрос, когда искал функциональность в spacemacs, поэтому я напишу свой ответ только для полноты картины.

Вариант - использовать <SPC> + w + . (работает в vanilla spacemacs)

Это открывает временное окно, в котором можно использовать []{} для изменения размера на детальном уровне.

Нет необходимости в C-x или Mouse ...

Переходное состояние управления окном

person Yesh    schedule 03.11.2019
comment
есть ли что-нибудь подобное в обычном emacs? - person krokodil; 25.11.2019
comment
Вероятно, его там нет, поэтому Дрю в первую очередь задал этот вопрос ... - person Yesh; 26.11.2019

У меня такой же вопрос. Вот мое решение.
Сначала я определяю новую функцию:

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

Итак, теперь, когда я ввожу: M-x run-scheme-here, размер буфера изменяется!
И вот мой файл конфигурации, надеюсь, это поможет. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el

person Community    schedule 25.07.2013
comment
ваша ссылка не работает :( - person Ciprian Tomoiagă; 10.03.2014