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


172

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

Ответы:


294

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

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

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

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

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

C-x ^( enlarge-window) увеличивает высоту на 1 строку или значение префикса arg. Отрицательный аргумент сжимает окно. например, 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: спасибо за отзыв в режиме победителя. Кстати, в моем случае щелчок по имени буфера открывает следующий буфер. Но легко увидеть, когда вы можете изменить размер, глядя на форму курсора мыши.
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 Это может быть конфликт с глобальными ярлыками. Выясните это в настройках или переназначении контроля над заглавными буквами (по-моему), тогда оно должно работать.
Уилбейби

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

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

@MauricioCortazar Я не использую Emacs годами. Этот ответ может не применяться сейчас. Не стесняйтесь, чтобы обновить его.
Уилбейби

14

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

C-h a

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

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

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


Возможно, кто-то работает в среде, в которой C-hон недоступен. Что тогда?
Деррелл Дюрретт

1
Если вы затерт стандартная справочная карта привязки, то вы , безусловно , должны быть в курсе того , что вы сходу его с . (В противном случае попробуйте <f1>использовать другую стандартную привязку справочной карты.)
phils

6

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


3
В случае, если привязки различны (у меня есть), команда enlarge-window. Дополнительным советом является использование префикса arg для контроля степени расширения.
Джозеф Гей

Потрясающие! Большое спасибо!
Стив

6

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


2

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

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

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

Там нет необходимости для Cx или мыши ...

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


есть ли что-нибудь подобное в обычных emacs?
крокодил

Наверное, его там нет, поэтому Дрю задал этот вопрос в первую очередь ...
Йеш

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.