Блок редактирования * 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
Том

Просто наблюдение о «плагине» emacs 400+ lines. Несколько похожий аддон для gedit, называемый multi-edit, имеет более 1000 строк кода на python. Для меня пугин настолько полезен (как я выжил без него), размер академический ... и если emacs работает как рекламируется, я был бы более чем счастлив использовать его, но я получил ошибку загрузки когда я запустил его "command-line-normalize-file-name: Args out of range:" ", 1" :( ... Это именно то, что я тоже искал ..
Peter.O

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

Ответы:


7

Я могу ответить за Vim, но не за Emacs.

Начало и конец выделения в позициях вне текста:

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

Вставить блок в строке:

Если вы просто нажмете pв командном режиме, Vim вставит блок, нажимая символы справа на каждой строке. Если вы выберете другой блок и нажмете p, Vim заменит этот блок вставленным блоком.

Вы можете вставить блок "linewise" с последовательностью клавиш режима команды OEscVp. Это вставляет строку над текущей строкой ( O Esc), выбирает ее linewise ( V), а затем вставляет поверх нее ( p). Вы можете сократить это до (например) ypс помощью отображения, такого как :nmap yp O<Esc>Vp- type, что буквально; используйте пять нажатий клавиш <Esc>вместо нажатия клавиши Escape.


Хороший отзыв о virtualedit; должен попробовать это. О встроенном вставке см. Обновленный вопрос с описанием ожидаемой функциональности.
10

Я обновил свой ответ методом вставки блоков аналогичным образом.
Jander

5

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

Emacs: начать выделение с первой строки и просто добавить недостающее количество символов (например, пробелы) в последнюю строку, а затем использовать kill-rectangle

В качестве альтернативы смотрите artist-modeили picture-modeкоторые позволяют свободно перемещаться в окне независимо от длины строки.

Вставить блок в строке

Emacs: сначала сохраните блок либо kill-rectangle, либо сохраните его в регистре, затем перейдите к точке вставки, используйте 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 экземпляров любого символа и заменить их ничем.


Не то, что я просил.
10

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