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.