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 itor , а не редактор файлів.
Тим не менш, люди, здається, зловживають цим, намагаючись редагувати файли, і правда полягає в тому, що він не редагує файли. По-друге, його параметри, такі як in-place ( -i
), є нестандартними розширеннями FreeBSD і можуть бути недоступні для інших операційних систем. Отже, якщо ви хочете уникнути неподатливого коду, накладних витрат на введення / виведення та поганих побічних ефектів (наприклад, знищення символьних посилань), вам слід скористатися ex
стандартним редактором на основі команд UNIX (разом із BashFAQed
) .
Інші речі, які мені здаються корисними в режимі 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-режим на:
Q
іq:
зовсім інші. Ви маєте на увазі лишеQ
право?