Редагування блоків * live * в Emacs або Vim


9

jEdit підтримує редагування блоків, але, здається, у Emacs та Vim є серйозні проблеми з юзабіліті з тієї ж теми. Якби хтось міг заповнити невідомі тут, було б набагато приємніше використовувати будь-який редактор:

  • Фактичний прямокутний вибір : Якщо вибір на екрані є прямокутником, а не лінійний вибір, який потім використовується для обчислення області, на яку Emacs здається обмеженою.
    • jEdit: Натисніть Ctrlі виберіть.
    • Vim: Клацніть Ctrl-vта виберіть.
    • Emacs: невідомо ; виглядає, що плагін 400+ рядків необхідний.
  • Пряме прямокутне редагування : подивіться, як буде виглядати результат у всіх рядках під час редагування після вибору блоку.
    • jEdit: Просто почніть вводити текст, і ви побачите кінцевий результат під час переходу.
    • Vim: Клацніть Shift-iта введіть. Кінцевий результат відображатиметься лише в першому рядку, поки ви не натиснете, Escщоб вийти з режиму вставки. Невідомо, чи є спосіб негайно побачити результат у всіх рядках.
    • Emacs: невідомо ; виглядає як єдиний спосіб - C-x r tвстановити текст для заповнення після натискання Ret.
  • Початок і кінець вибору в позиціях поза текстом : Наприклад, я хотів би видалити N перших символів кожного рядка, але перший і останній рядки містять менше N символів.
  • Вставити блок вбудований : Вставте скопійований блок так, ніби ви вставляєте кілька рядків, як у, натисніть текст уже туди вниз , а не правильно.
    • jEdit: за замовчуванням. Щоб вставити блок як блок, потрібно спочатку зробити інший вибір блоку.
    • Vim : OEscVp.
    • Emacs: Невідомо .

Загальні функції вибору блоку Emacs можна знайти у cua-modeплагіні .


Мабуть, режим редагування стовпців Emacs може зробити якесь редагування прямокутника в прямому ефірі: youtube.com/watch?v=k-6BVjlBSVo
Tom

Просто спостереження про Emacs 400+ рядків "плагін". Дещо схожий аддон для gedit, який називається мультиправка, має 1000+ рядків коду python. Для мене плагін настільки корисний (як я вижив без нього), розмір - академічний ... і якщо emacs працює як рекламу, я би з задоволенням користувався ним, але отримав помилку завантаження коли я запустив це "командний рядок-нормалізувати-файл-ім'я: Аргументи поза діапазоном:" ", 1" :( ... Це саме те, що я шукав теж ..
Peter.O

4
Для тих, хто не використовував jEdit, будь ласка, поясніть свою термінологію. Я не розумію, що тут означає «живе», що таке «прямокутне редагування в реальному часі» або що означає «вставити блок вставки».
Жил 'ТАК - перестань бути злим'

Відповіді:


7

Я можу відповісти за Vim, але не Emacs.

Початок і кінець вибору в позиціях поза текстом:

:set virtualedit=blockдозволить поведінку, яку ви хочете. Ви можете опустити початкову кишку і додати її до свого .vimrc, якщо хочете. Для отримання додаткової інформації :help 'virtualedit'з Vim

Вставити блок вбудований:

Якщо ви просто натиснете pв командному режимі, Vim вставить блок, просуваючи символи праворуч у кожному рядку. Якщо вибрати інший блок і натиснути p, Vim замінить його на вставлений блок.

Ви можете вставити блок "по рядку" за допомогою послідовності клавіш командного режиму OEscVp. Це вставляє рядок над поточним рядком ( O Esc), вибирає його по рядку ( V), після чого вставляє його ( p). Ви можете скоротити це (наприклад) ypза допомогою відображення на зразок :nmap yp O<Esc>Vp- типу - буквально; використовуйте п'ять натискань клавіш, <Esc>а не натискайте клавішу Escape.


Приємна порада про virtualedit; треба спробувати це. Про вбудоване вставлення, дивіться оновлене запитання для опису очікуваної функціональності.
l0b0

Я оновив свою відповідь методом вставлення блоків по рядку.
Джандер

5

Наприклад, я хотів би видалити N перших символів кожного рядка, але перший і останній рядки містять менше N символів.

Emacs: почніть вибір у першому рядку та просто додайте відсутню кількість символів (наприклад, пробіли) до останнього рядка та використовуйте прямокутник kill

Як варіант, перегляньте artist-modeабо picture-modeякі дозволяють вільно рухатися у вікні незалежно від довжини рядка.

Вставити блок в рядку

Emacs: Спочатку збережіть блок або kill-прямокутником, або збережіть його в регістр, потім перейдіть до точки вставки, використовуйте delete-rectangle та вставте збережений прямокутник.

виглядає, що плагін 400+ рядків необхідний

У випадку Emacs, чому це проблема? Плагін можна скласти, і філософія emacs полягає в тому, що ви не ставите все в основу, а використовуєте плагіни для розширення редактора.


4

Існує 'cua-mode', який постачається з Emacsen 22.1 і пізнішими версіями, або перейдіть за посиланням, щоб завантажити більш ранні версії Emacs. Є коротке відео, яке представляє функціональність.

Для загальних команд прямокутника спробуйте прочитати посібник , який забезпечує просте введення.


emacs cua-modeвиглядає добре! +1 .. Я не зміг знайти згадане вами відео, дивіться посилання Тома в коментарях безпосередньо під запитанням, за посиланням на (інше?) Інформаційне відео ...
Peter.O

@fered Ooops, виправлена ​​помилка вирізання / вставки.
Трей Джексон

0

У vim типовим способом видалення перших n символів є щось подібне :%s/.\{0,6\}//.

%зробить весь документ; ви можете замінити це виділенням або власне важливими рядками. sКоманда для «заміни». Він замінить звичайний вираз тим, що ви йому надаєте, і він буде відповідати лише один раз у кожному рядку, якщо ви не додасте конкретний параметр. /Є роздільником - це може бути будь-яким символ, але /, як правило , використовуються , якщо це не вигідно використовувати що - то інше (так що вам не доведеться бігти /в іншій частині команди). Аргумент після першого роздільника - це регулярний вираз, який буде використаний для пошуку відповідних рядків у вашому виділенні. Аргументом після другого роздільника є те, на що збіг буде замінено.

Отже, ця команда говорить, що знайдіть 0 - 6 екземплярів будь-якого символу та замініть їх нічим.


Не те, що я просив.
l0b0

Але ви вважаєте, що це не корисно для інших, хто знайде це питання? Я думаю, що це так, і саме тому я ставлю його сюди.
Шон Дж. Гофф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.