Vim в режиме Ex полезен, когда:
- Вам нужно редактировать (несколько) файлов не в интерактивном режиме (как часть сценария).
- Ваше соединение очень медленное или экран не обновляется после ваших действий.
- Отображения и сокращения отключены.
- Общие ключи, такие как Escapeили Controlне работают должным образом.
По сути, vi
это визуальный режим, ex
поэтому Vim Ex Mode - это просто эмуляция ex
(они по-прежнему выполняют один и тот же код), поэтому можно перейти в командный режим ex
изнутри vi и наоборот. На самом деле есть два режима: режим Ex ( vim -e
) и улучшенный режим Ex, который допускает более сложные команды, чем совместимый с vi режим Ex ( vim -E
). См: В чем разница между режимом Ex и улучшенным режимом Ex?
Ex является корнем семейства редакторов: edit
, ex
и vi
. Ex - это ed
расширенный набор , наиболее заметным из которых является средство редактирования экрана. ех (1)
Неинтерактивное редактирование файлов является наиболее распространенным видом использования, и люди используют его таким же образом, как sed
и awk
, однако, они более ориентированы на поток - они только читают файл вперед от начала до конца (они не предназначены для работы с несколькими строками ) , а vim
это буфер ориентированный - вы можете двигаться вперед и назад в файл , как вам нравится , что делает его столь мощным.
В основном:
sed
является редактором S Tream ED , а не редактором файлов.
Тем не менее, люди, кажется, злоупотребляют им за попытку редактирования файлов, и правда в том, что он не редактирует файлы. Во-вторых, его параметры, такие как in-place ( -i
), являются нестандартными расширениями FreeBSD и могут быть недоступны в других операционных системах. Поэтому, если вы хотите избежать непереносимого кода, издержек ввода-вывода и плохих побочных эффектов (таких как уничтожение символических ссылок), вам следует использовать ex
стандартный редактор UNIX (наряду с ed
) BashFAQ .
Другие вещи, которые я нахожу полезными в режиме Ex, это использование его в качестве игровой площадки (аналогично python
консоли), где вы можете выполнять много команд подряд, работать / отлаживать регулярные выражения, проверять конфигурацию vim, выполнять внешние команды или работать с регистрами и т. Д. ,
Например:
let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg
что проще в режиме Ex, чем в обычном режиме (где вы можете видеть только свою последнюю команду).
Практические использования
У меня есть следующие псевдонимы в моем .bash_aliases
:
alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"
Примечание. Использование bufdo
не является ex
POSIX-совместимым методом (как описано в руководстве ), поэтому вы можете использовать его find
вместо. !
Используются для принудительного переключения буферов без сохранения ( в противном случае генерируется предупреждение).
Первый, который я использую, чтобы обрезать конечные пробелы во всех моих исходных файлах, например:
trim **/*.php
Второй преобразует все вкладки в пробелы (рекурсивно), например:
retab **/*.php
Для меня , используя retab
достаточно, но есть некоторые недостатки , описанные в здесь . Добавить дополнительно -V
для увеличения вывода подробности.
Следует отметить , что приведенные выше примеры с использованием ЗШ / bash4 подстановку ( **
), поэтому убедитесь , что ваша оболочка поддерживает его и он включен.
Для более практичных примеров (таких как анализ файлов HTML), проверьте:
Также узнайте больше о Ex-mode по адресу:
Q
иq:
совсем разные. Вы имеете в виду толькоQ
право?