Emacs - Кілька стовпців, один буфер


165

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

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


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

1
Дякую! Я закохався в перегляд коду 4-6 стовпців, що спробував відформатувати весь код до 30-40 символів, і я дуже люблю результат - роблячи всі рядки короткими, а не лише природні короткі, набагато менше місця даремно, і весь мій екран на екрані використовується для відображення тексту; також кодові блоки стають більш двовимірними, полегшуючи візуальне розуміння та структурний нагляд.
Ерік Каплун

Відповіді:


248

Див. Наступний режим . Витяг:

Режим слідування - це другорядний режим, у якому два вікна, обидва показують один і той же буфер, прокручуються як одне високе «віртуальне вікно». Щоб скористатися режимом "Follow", перейдіть до кадру із одним вікном, розділіть його на два бічні вікна за допомогою Cx 3 та введіть Mx-наступний режим. З цього моменту ви можете редагувати буфер в будь-якому з двох вікон або прокручувати будь-яке; інше вікно слідує за ним. У режимі слідування, якщо ви переміщуєте точку за межами частини, видимої в одному вікні, і до частини, видимої в іншому вікні, яка вибирає інше вікно, знову ж таки, трактуючи це так, ніби вони були частинами одного великого вікна.

3
Чи можу я використовувати це з більш ніж двома вікнами? Чи можна мати чотири вікна, використовуючи це?
Yktula

Цікаво, чи можна редагувати два стовпчики одного і того ж джерела індивідуально, не розділивши їх на два вікна. Це не найкращий приклад, але уявіть, що в мене є один стовпець для коду сценарію, а інший для коментарів, тоді, якщо я перебуваю у другому стовпчику, я хочу натиснути «ввести» і продовжувати в наступному рядку, але у другому стовпці. Чи можливо це за допомогою Emacs чи іншого текстового редактора?
ш.

Дуже корисно редагувати довгу функцію чи метод. я завжди знаходжу цей режим і відкриваю два буфера і роблю це сам, дякую huaiyuan
Yuan Він

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 також може це зробити, як зазначено у запитанні, але це не те, що задають.
Justinhj

1
Поєднайте це з :scrollbind, і ви там.
bastibe

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

Гм, це робить якусь роботу. Класно! Дякую! Хтось повинен написати сценарій vim, щоб зробити це автоматично.
Краген Хав'єр Сітакер

-1

Швидкий перегляд вікі emacs не показує режим, як ви описуєте. Однак написати це не повинно бути надто складно ... Вам просто потрібно розділити вікно на Cx 3 і перемістити текст в інше вікно вниз, і коли ви переміщуєте текст, зробіть те ж саме в іншому вікні. ..

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

Хм, може, це не так просто. Але це все-таки слід виконати ...


1
... і так Елісп додається до списку речей, які мені потрібні для вивчення :) Велике спасибі Брайану;)
користувач119857

Очевидно, хтось це вже зробив, але так, Елісп - це дивовижний інструмент!
Брайан Постув

-5

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


1
Але в такому випадку справа не в режимі слідування. Наступний режим забезпечить розміщення кожного буфера на "наступній сторінці", щоб ви могли читати буфер, рухаючи очима, а не переміщуючи крапку.
jrockway

-7

Скористайтеся вертикальним розділенням за допомогою Cx 3. Це розділить поточний буфер на два стовпці, на які ви можете перемикатися між Cx o.


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