Для чего нужен EX-режим для пакетной обработки?

11622
Léo Léopold Hertz 준영

В учебнике упоминается, что Ex-режим предназначен для пакетной обработки. Поскольку для меня это скорее неприятность, чем инструмент, я хотел бы увидеть некоторые практические примеры. Кто это использует? Зачем?

Для чего нужен EX-режим для пакетной обработки?

19
@Masi: свяжите свои учетные записи, чтобы после миграции перенесенные сообщения были связаны с вашей учетной записью SU. Greg Hewgill 15 лет назад 0

4 ответа на вопрос

22
Jack M.

Ex-Mode в основном предназначен для выполнения одного и того же действия с несколькими файлами.

Скажем, у вас есть 25 файлов .html, все с:

<a href="/home.html"> ... 

Вместо того, чтобы открывать каждый из них, вы можете использовать Ex-режим, чтобы изменить все на index.html:

vim -E -s bob.html <<-EOF :%substitute/home.html/index.html/ :update :quit EOF 
Полная и более краткая реализация была бы `для файла в * .html; do vim -es -c '% s / home \ .html / index.html / g' -c wq "$ file"; done`. intuited 14 лет назад 6
5
u0b34a0f6ae

As of the recent 7.3 which as persistent undo support, ex mode and other forms of vim batch processing is superior to other non-vim methods, since it will not clobber the undo history.

Adding: 'persistent undo' if enabled, keeps all changes to a file (up to a limit) in the undo history, across vim editing sessions. If the file is edited by an external program, vim will reset the undo history when detecting by checksum that it has changed. vim -E will allow you to batch-edit a file and the edit will be in the undo history.

Это кажется надуманным, но это точно разумно и умно! +1 Tarrasch 12 лет назад 2
4
kenorb

Vim в режиме Ex (также известный как ex) полезен, когда:

  • Вам необходимо редактировать (несколько) файлов не в интерактивном режиме (как часть сценария).
  • Ваше соединение очень медленное или экран не обновляется после ваших действий.
  • Отображения и сокращения отключены.
  • Общие ключи, такие как Escapeили Controlне работают должным образом.

Неинтерактивное редактирование файлов является наиболее распространенным видом использования, и люди используют его таким же образом, как sedи awk, хотя они более ориентированы на поток - они только читают файл вперед от начала до конца, в то время vimкак ориентированы на буфер - вы можете двигаться вперед и назад в файле, как вам нравится. Во-вторых, регулярные выражения vim более мощные, чем выражения awk и sed (они не предназначены для работы с несколькими строками) - например, vim может сопоставлять несколько строк и поддерживает ноль совпадений.

Ex также является редактором (прямым предшественником vi) и в Vim - Ex Mode эмулирует ex(они все еще выполняют один и тот же код), так что можно перейти в командный режим exизнутри vi и наоборот. Существует режим Ex ( vim -e) и улучшенный режим Ex, который допускает более сложные команды, чем совместимый с vi режим Ex ( vim -E). Смотрите: В чем разница между режимом Ex и улучшенным режимом Ex?

Ex является корнем семейства редакторов: edit, ex и vi. Ex - это набор ed, наиболее заметным из которых является средство редактирования экрана. ех (1)


Пример 1

Вот простой пример перехода 127в 128ваш hostsфайл и распечатки вывода:

ex -s +%s/127/128/g +%p +q! /etc/hosts 

эквивалентно:

sed s/127/128/g /etc/hosts 

Для более продвинутого решения вы можете иметь файл с командами vim и использовать его более классическим подходом к перенаправлению ввода / вывода:

echo :%s/127/128/g > cmds.vim echo :%print >> cmds.vim echo :%quit! >> cmds.vim ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts 

Пример 2

Вы также можете использовать плагины vim для выполнения некоторых задач.

Например, следующий однострочный конвертирует ваш файл исходного кода в html, используя один из стандартных плагинов:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c 

Он сгенерирует HTML-файл (с подсветкой синтаксиса) из вашего кода (написанный на любом поддерживаемом языке), который готов к печати или публикации на вашем веб-сайте.


Пример 3

Или реальный пример из спецификации RPM :

vim -E -s Makefile <<-EOF :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/ :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/ :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/ :update :quit EOF 

Пример 4

Следующий скрипт создаст новый html-файл, загрузив html сайта Example и заменив его тело на автоматически сгенерированную таблицу 20x20 со случайными числами в ней:

" table.vim %!curl -s example.com  let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>' /<body norm!vitd"tP %s/_/\=system('echo $RANDOM')/g wq 

Использование:

ex -s table.html < table.vim 

Это будет работать на * nix-подобных системах с установленным curl. Добавьте, -Vчтобы увидеть сценарий в действии.

Больше примеров:


Смотрите также:

1
still_dreaming_1

Это не отвечает на ваш вопрос о пакетной обработке, но это еще один способ объяснить, что такое Ex-режим. Вы знаете, как вы нажимаете:перейти в режим командной строки и ввести команды? Ну и Ex-режим также позволяет вам вводить те же команды, за исключением того, что Vim не выходит из Ex-режима после ввода команды, он остается в режиме Ex и вы можете ввести другую команду. Так что это похоже на REPL (чтение, оценка, печать, цикл), но без печати (так что просто REL ...). Я вернусь к тому, почему вы могли бы хотеть такого рода REL позже. Вот почему он называется режимом Ex, он позволяет вводить команды Ex, что аналогично режиму командной строки, он позволяет вводить команду Ex. Другой способ объяснить это, это то, что он позволяет вам вводить и немедленно выполнять код Vimscript / VimL. Vimscript / VimL - это язык, который вы можете использовать для написания плагинов Vim. Это также язык, на котором вы пишете свой файл конфигурации (вероятно, .vimrc). Это также язык, который вы используете при вводе команд Ex из режима командной строки или режима Ex. Таким образом, с этой точки зрения Ex-mode можно рассматривать как VimL REL. Почему вы хотите VimL REL? По той же причине людям нравятся REPL для других языков. Они могут быть очень полезны для отладки кода или экспериментов с языком, чтобы увидеть, как все работает, особенно если вы пишете плагины в VimL или сильно настраиваете свой конфигурационный файл (что, вероятно, означает, что вы нарушаете принцип SRP и должны разбить его на плагинов).

Было бы здорово получить несколько примеров в виде видеороликов, чтобы показать полезность экс-режима. Я никогда не осознавал этого, потому что я могу использовать диспетчер окон Linux и визуальный режим vim с `:! Python` и т. Д. Léo Léopold Hertz 준영 8 лет назад 0