Vim имеет режим Ex, в который можно войти, введя Q, и режим командной строки, в который можно войти q:. Распространенная жалоба среди новых пользователей vim заключается в том, что они случайно входят в эти режимы при попытке выйти из vim. Таким образом, я отключаю эти ключи в моем, ~/.vimrc
чтобы предотвратить случайное нажатие (особенно q:):
map q: <Nop>
nnoremap Q <nop>
Несмотря на то, что я прочитал документацию по vim на Ex , я являюсь опытным пользователем Vim и понимаю основную идею, я все еще пытаюсь найти какое-либо применение для этого в моем повседневном использовании vim. В целом это кажется менее полезным, чем просто ввод стандартной команды командной строки vim с префиксом :, так как изменения не отражаются сразу.
Есть ли у Ex практическое повседневное использование в современном Vim? Есть ли что-нибудь, что проще сделать в режиме Ex, чем стандартными командами? В чем разница между режимом командной строки и режимом ex?
Q
иq:
совсем разные. Вы имеете в виду толькоQ
право?q:
конкретный вопрос и упомянули его как одну из двух ключевых последовательностей, с которой у вас больше всего проблем. И два из ответов здесь могут быть полезны для людей, которые ищут его по правильному термину.q/
и какq:
делаете, вы, вероятно, считаете их одними из самых полезных команд в Vim. И да, вы уже знаете, как их использовать, вы просто еще не знаете, что они делают. Посмотрите этот скринкаст, чтобы узнать.Ответы:
Q
это, как вы обнаружили, режим ex. Не совсем полезно использовать в интерактивном режиме, но он существует, потому что Vim может использоваться для эмуляции старогоex
двоичного файла. На самом деле, многие системы предоставляютex
команду, просто ссылаясь на нееvim
.q:
или:<C-f>
вместо этого предоставляет способ просмотреть историю командной строки и отредактировать ее как обычный буфер. Это позволяет легко найти предыдущую команду, которую вы запустили, отредактировать ее с помощью обычных команд Vim, а затем запустить измененную команду.q/
Иq?
команды существуют , чтобы обеспечить такую же функциональность для истории поиска.источник
Vim в режиме Ex полезен, когда:
По сути,
vi
это визуальный режим,ex
поэтому Vim Ex Mode - это просто эмуляцияex
(они по-прежнему выполняют один и тот же код), поэтому можно перейти в командный режимex
изнутри vi и наоборот. На самом деле есть два режима: режим Ex (vim -e
) и улучшенный режим Ex, который допускает более сложные команды, чем совместимый с vi режим Ex (vim -E
). См: В чем разница между режимом Ex и улучшенным режимом Ex?Неинтерактивное редактирование файлов является наиболее распространенным видом использования, и люди используют его таким же образом, как
sed
иawk
, однако, они более ориентированы на поток - они только читают файл вперед от начала до конца (они не предназначены для работы с несколькими строками ) , аvim
это буфер ориентированный - вы можете двигаться вперед и назад в файл , как вам нравится , что делает его столь мощным.В основном:
Тем не менее, люди, кажется, злоупотребляют им за попытку редактирования файлов, и правда в том, что он не редактирует файлы. Во-вторых, его параметры, такие как in-place (
-i
), являются нестандартными расширениями FreeBSD и могут быть недоступны в других операционных системах. Поэтому, если вы хотите избежать непереносимого кода, издержек ввода-вывода и плохих побочных эффектов (таких как уничтожение символических ссылок), вам следует использоватьex
стандартный редактор UNIX (наряду сed
) BashFAQ .Другие вещи, которые я нахожу полезными в режиме Ex, это использование его в качестве игровой площадки (аналогично
python
консоли), где вы можете выполнять много команд подряд, работать / отлаживать регулярные выражения, проверять конфигурацию vim, выполнять внешние команды или работать с регистрами и т. Д. ,Например:
что проще в режиме Ex, чем в обычном режиме (где вы можете видеть только свою последнюю команду).
Практические использования
У меня есть следующие псевдонимы в моем
.bash_aliases
:Примечание. Использование
bufdo
не являетсяex
POSIX-совместимым методом (как описано в руководстве ), поэтому вы можете использовать егоfind
вместо.!
Используются для принудительного переключения буферов без сохранения ( в противном случае генерируется предупреждение).Первый, который я использую, чтобы обрезать конечные пробелы во всех моих исходных файлах, например:
Второй преобразует все вкладки в пробелы (рекурсивно), например:
Для меня , используя
retab
достаточно, но есть некоторые недостатки , описанные в здесь . Добавить дополнительно-V
для увеличения вывода подробности.Следует отметить , что приведенные выше примеры с использованием ЗШ / bash4 подстановку (
**
), поэтому убедитесь , что ваша оболочка поддерживает его и он включен.Для более практичных примеров (таких как анализ файлов HTML), проверьте:
Как преобразовать файл исходного кода в HTML?
Например
Также узнайте больше о Ex-mode по адресу:
источник
ex
чем сed
,sed
илиawk
?ex
режим. Я не понимаю, почему!
в вашей командеtrim
псевдонимов есть bang ( )bufdo
. Разве это не отменит все изменения во всех файлах, кроме последнего? Если нет, то почему?!
принципе не будет работать, так как каждый раз, когда буфер переключается,ex
будет жаловаться на несохраненные изменения (и мы сохраняем изменения в самом концеxa
). Предупреждение можно отключить, но добавить его гораздо проще!
.!
команда потерпит неудачу , если буфер не может быть оставлена, но это явно не указано , что!
заставит буфер не быть отброшено .... Таким образом, делает «заброшен» в данном случае означает «упал , потому что он не содержит ничего не записанного на диск "? Или что? (Я смотрю:help bufdo
)Я редко использую экс-режим, но когда мне это нужно, я благодарен за его существование.
Я иногда обращаюсь к системам через ssh через VPN, и эти соединения могут иногда замедляться. Ситуация усугубляется тем, что мне иногда нужно отредактировать файл на удаленной стороне, который, помимо того, что находится за ssh и VPN, связан с медленным последовательным соединением (таким образом, 9600 бод плюс большая задержка в сети).
В такие моменты визуальная обратная связь и обновления экрана становятся все более помехой, потому что то, что я вижу, задерживается (эффект отчасти напоминает разговор в микрофон, но с динамиками далеко, как на спортивном стадионе. и иногда путают из-за задержки обратной связи).
В этом случае, если изменения не будут возвращены назад, это полезное преимущество, поскольку я могу сделать больше за меньшее время, когда я не жду обновления экрана.
Закончив вносить изменения, я возвращаюсь в визуальный режим для одноразового обновления экрана, чтобы просмотреть свою работу. Затем я могу вернуться в бывший режим или сохранить, потому что все готово.
источник
Окно командной строки полезно для написания длинных сложных команд. Поскольку история команд открывается как окно, вы можете использовать любую навигацию или редактирование команды / отображения vim.
Допустим, вы хотите отредактировать длинную команду замещения, которую вы запустили один раз, но допустили ошибку:
Чтобы изменить строку поиска, вы не можете использовать движения vim, как
b
в строке Ex, для навигации (хотя я считаю, что для этой навигации существуют сопоставления клавиш). Вместо этого большинство людей нажимали клавишу со стрелкой влево несколько раз.Лучший способ: нажмите,
q:
чтобы перейти в окно командной строки,k
перейти к последней команде и перейти с обычными движениями к той части команды, которую вы хотите изменить. Хотите сменить слово целиком, без проблемciw
.источник
q:
это командная строка Ex? В справке используется только фраза «Ex» для режимаQ
, который вызывается, но он не поддерживает стандартное редактирование vim, на которое вы ссылаетесь - толькоq:
делает, которое справка просто называет «Режим командной строки». Я знаю, что сначала я их перепутал, но нам, вероятно, следует убедиться, что мы четко понимаем разницу.:help q:
прежде чем решил использовать эту фразу, но я мог быть смущен терминологией.:
, но я мог бы использовать это неправильно.q:
не открывает командную строку Ex. Он открывает окно истории команд , в котором можно редактировать текущие и предыдущие команды Ex. Командная строка Ex - это то, что вы получаете при нажатии:
в обычном режиме.:
командам как к командам «Ex». ИМХО на самом деле только команды, которые фактически доступны в Ex, должны рассматриваться как команды Ex.Человек с частичным зрением, который ослеп, сказал мне, что он переключается на бывшего, так что это одно из его применений. Я сам значительно старше vi, и я давно перешел с ed на ex (да, я знаю, «ed - это стандартный редактор»). Единственное, что я делаю в режиме vi, это% -пропускание, чтобы соответствовать пареням при написании кода на Лиспе.
источник
ex
упомянуто конкретно.Помимо уже упомянутых здесь случаев, ex также является способом редактирования файлов на консоли linux, если это происходит на платформе S / 390 и консоль ориентирована на строку, а не на экран.
источник
Возможно нет. Однако, хотя вход в режим Ex не очень полезен, изучение команд Ex по-прежнему полезно, особенно потому, что вы используете команды редактирования ex с
:g/
глобальными командами для работы с совпадающими строками.источник
Первоначально «ex» был обновленной версией «ed» текстового редактора в Unix. В 2BSD был добавлен визуальный режим, и новый редактор назывался «vi».
Если кто-то захочет использовать командную строку ex, он переключится в командный режим с помощью клавиши «:». Так что в моем лучшем понимании ex на самом деле не для ностальгии, это часть для обеспечения командного режима.
Вы также можете войти в режим вставки с помощью
затем нажмите «введите и введите свой текст. Выйдите с помощью ^ c. Или введите все это в одной командной строке, например,
источник