Для чого використовується EX-режим для пакетної обробки?


20

У підручнику зазначається, що Ex-режим призначений для пакетної обробки. Оскільки для мене це неприємність, а не інструмент, я хотів би побачити кілька практичних прикладів. Хто ним користується? Чому?

Для чого використовується EX-режим для пакетної обробки?


@Masi: зв’яжіть свої акаунти, щоб перенесені публікації були пов’язані з вашим обліковим записом SU після міграції.
Грег Х'югілл

Відповіді:


4

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 - це супернабір редакцій, найбільш помітним розширенням є засоби редагування дисплея. колишній (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-подібних системах із встановленим завитком. Додати, -Vщоб побачити сценарій у дії.

Більше прикладів:


Дивись також:


22

Ex-Mode - це здебільшого для виконання однієї і тієї ж дії над низкою файлів.

Скажімо, у вас є 25 .html файлів із усіма:

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

Замість того, щоб відкривати кожен із них, ви можете використовувати Ex-режим, щоб змінити все це на index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF

7
Повна - і більш короткочасна - реалізація for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
інтуїтоване

6

Станом на останній 7,3, який як стійка підтримка відміни, колишній режим та інші форми пакетної обробки vim перевершують інші не-vim методи, оскільки це не призведе до зменшення історії скасування.

Додавання: "Постійне скасування", якщо воно включено, зберігає всі зміни у файлі (до обмеження) в історії скасування, протягом сеансів редагування vim. Якщо файл редагується зовнішньою програмою, vim скидає історію скасування, коли виявить, що він змінився контрольною сумою. vim -E дозволить вам групово редагувати файл, і редагування буде в історії скасування.


2
Це здається досить надуманим, але це точно розумно і розумно! +1
Тарраш

1

Це не відповідає на ваше запитання щодо пакетної обробки, але це ще один спосіб пояснити, що таке Ex-режим. Ви знаєте, як тиснеш:перейти в режим командного рядка та ввести команди? Добре Ex-режим також дозволяє вводити ті самі команди, за винятком того, що Vim не виходить з режиму Ex після введення команди, він залишається в режимі Ex і ви можете ввести іншу команду. Таким чином, це як REPL (читання, оцінка, друк, цикл), але без друку (так що просто REL ...). Я повернусь до того, чому пізніше ви можете захотіти такого роду REL. Ось чому він називається режим Ex, він дозволяє вводити команди Ex, що це те саме, що робить режим командного рядка, він дозволяє вводити команду Ex. Іншим способом пояснення цього є те, що він дозволяє вводити та негайно виконувати код Vimscript / VimL. Vimscript / VimL - це мова, якою ви можете користуватися для запису плагінів Vim. Це також мова, якою ви користуєтесь для запису вашого конфігураційного (можливо .vimrc) файлу. Це також мова, якою ви користуєтесь, коли ви вводите команди Ex з режиму командного рядка або Ex-mode. Тож з цієї точки зору Ex-режим можна розглядати як VIML REL. Чому б ви хотіли REL VimL? З тієї ж причини людям подобаються відповіді на інші мови. Вони можуть бути дуже корисними для налагодження коду або експерименту з мовою, щоб побачити, як все працює, особливо якщо ви пишете плагіни у VimL або сильно налаштовуєте свій конфігураційний файл (що, ймовірно, означатиме, що ви порушуєте принцип SRP і має розбити його на плагіни).


Було б чудово отримати кілька прикладів у вигляді відео, щоб показати корисність колишнього режиму. Я ніколи цього не усвідомлював, тому що можу використовувати віконний диспетчер Linux та візуальний режим vim :!pythonтощо.
Лео Леопольд Герц 준영
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.