Emacs - несколько столбцов один буфер


165

Я пытаюсь отредактировать некоторый ассемблерный код, который обычно форматируется в длинных, но тонких листингах. Я хотел бы иметь возможность использовать некоторые из акров горизонтального пространства, которое у меня есть, и видеть больше кода на экране одновременно. Есть ли способ заставить Emacs (или другой редактор) показывать мне несколько столбцов, указывающих на один и тот же буфер?

Cx 3 (emacs) и: vsplit (vim) отлично подходят для нескольких отдельных представлений в коде, но я бы хотел, чтобы он переходил из одного столбца в другой (как текст в газете).


1
Cx 3 и: vsplit отлично подходят для нескольких отдельных представлений в коде, но я бы хотел, чтобы он переходил из одного столбца в другой (как текст в газете)
user119857

1
Спасибо! Я влюбился в просмотр кода из 4-6 столбцов, пытаясь отформатировать весь код до 30-40 символов, и мне очень нравится результат - я делаю все строки короткими, а не только естественно короткими, намного меньше места впустую, и все мое пространство экрана используется для отображения текста; также, блоки кода становятся более двумерными, облегчая визуальное понимание и структурный контроль.
Эрик Каплун

Ответы:


248

Смотрите режим следования . Выдержка:

Режим Follow является второстепенным режимом, в котором два окна, в обоих из которых отображается один и тот же буфер, прокручиваются как одно высокое «виртуальное окно». Чтобы использовать режим Follow, перейдите к кадру с одним окном, разделите его на два параллельных окна, используя Cx 3, а затем введите Mx follow-mode. После этого вы можете редактировать буфер в любом из двух окон или прокручивать одно из них; за ним следует другое окно. В режиме отслеживания, если вы перемещаете точку за пределы части, видимой в одном окне, и в часть, видимую в другом окне, это выбирает другое окно - снова, обрабатывая два, как если бы они были частями одного большого окна.

3
Могу ли я использовать это с более чем двумя окнами? Могу ли я иметь четыре окна, используя это?
Иктула

Интересно, можно ли редактировать два столбца одного и того же источника по отдельности, а не разбивать на два окна. Это не лучший пример, но представьте, что у меня есть один столбец для кода сценария, а другой - для комментариев, тогда, если я нахожусь во втором столбце, я хочу нажать «ввод» и продолжить в следующей строке, но во втором столбце. Это возможно с Emacs или другим текстовым редактором?
кач.

Очень полезно редактировать длинные длинные функции или методы. я всегда нахожу этот режим и открываю два буфера и делаю это сам, спасибо huaiyuan
Yuan He

17

Я использую эту функцию для вызова follow-mode, хотя это потребует настройки для другого размера экрана:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))

Плюс 1 за указание (баланс окна) в одиночку! Я думаю, что вы можете разделить параметрическое число раз и сделать функцию интерактивной. Кроме того , установка scroll-marginдля 0будет иметь смысл в follow-mode.
Эрик Каплун

15

Плагин «Multipager» для Vim может делать это с разделениями VIM для людей, которые хотят получить такое поведение в Vim.

Получите его со страницы доктора Чипа: http://mysite.verizon.net/astronaut/vim/index.html#MPAGE

Документы: http://mysite.verizon.net/astronaut/vim/doc/mpage.txt.html


1
Но вопрос был о Emacs, а не Vim.
Александр Иванович Графов

2

Vim может сделать это, используя :vsplit- и вы можете иметь один и тот же буфер, открытый в нескольких «окнах» (которые фактически являются разделами в одном «окне»).

Документация здесь


3
Emacs может сделать это тоже, как упоминалось в вопросе, но это не то, что спрашивают.
Джастинх

1
Объедините это с :scrollbind, и вы там.
Бастиб

@Kragen - метод для этого: 1. разбить окно по вертикали, чтобы один буфер был виден в двух окнах; 2. прокрутить во втором окне, чтобы первая строка во втором окне шла после последней строки в первом окне, 3. выдать команду :set scrollbindв каждом из окон. Теперь окна будут прокручиваться вместе по желанию. (Примечание: scrollopt должен содержать опцию 'ver'.)
Герберт Ситц,

Хм, это делает какую-то работу. Прохладно! Спасибо! Кто-то должен написать скрипт vim, чтобы сделать это автоматически.
Краген Хавьер Ситакер

-1

Беглый взгляд на вики emacs не показывает режим, который вы описываете. Тем не менее, это не должно быть слишком сложно, чтобы написать один ... Вам просто нужно разделить окно с помощью Cx 3 и переместить текст в другое окно вниз, и всякий раз, когда вы перемещаете текст, делайте то же самое с другим окном. ..

Проблемы могут возникнуть, когда вы дойдете до нижней части буфера, хотите ли вы, чтобы курсор немедленно перешел в другое окно вверху?

Хм, может быть, это не так просто. Но это все еще должно быть выполнимо ...


1
... и поэтому Elisp добавлен в список вещей, которые мне нужны для изучения :) Большое спасибо Брайан;)
user119857

Очевидно, кто-то уже сделал это, но да, elisp - удивительный инструмент!
Брайан Постоу

-5

это стандартное поведение emacs при разделении окна (Cx 3 для вертикального разделения), вы получаете два столбца, в обоих из которых открыт текущий буфер


1
Но в этом случае, это не в последующем режиме. Режим Follow будет гарантировать, что каждый буфер будет расположен на «следующей странице», чтобы вы могли читать буфер, двигая глазами, а не перемещая точку.
jrockway

-7

Используйте вертикальное разделение с помощью Cx 3. Это разделит текущий буфер на два столбца, между которыми вы можете переключаться с помощью Cx o.


2
Это не происходит автоматически из одного столбца в другой.
Kmarsh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.