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
чтобы увидеть скрипт в действии.
Больше примеров:
Смотрите также: