Vim команды · 3 min read · Nov 16, 2025
Как получить доступ к оболочке или выполнять внешние команды из Vim

Vim, как вы, возможно, уже знаете, является многофункциональным и мощным редактором. Здесь, на HowtoForge, мы написали несколько учебников по Vim, охватывающих его базовое использование, плагины, а также некоторые другие полезные функции. Но учитывая море возможностей, которые предлагает Vim, мы всегда находим что-то полезное, чтобы поделиться с нашими читателями.
В этом учебнике мы сосредоточимся на том, как вы можете выполнять внешние команды, а также получать доступ к командной строке оболочки из окна редактора.
Выполнение внешних команд в Vim
Иногда вы можете захотеть выполнить внешние команды из окна редактора Vim. Например, представьте ситуацию, когда вы открыли файл в Vim, внесли некоторые изменения, а затем, пытаясь сохранить эти изменения, Vim выдает ошибку, сообщая, что у вас недостаточно прав.
Теперь выход из текущей сессии vim и повторное открытие файла с достаточными привилегиями приведет к потере всех внесенных вами изменений, так что вы согласитесь, это не будет вариантом в большинстве случаев. Именно в таких ситуациях возможность запускать внешние команды из редактора оказывается полезной.
Мы вернемся к вышеупомянутому случаю позже(), но сейчас давайте поймем, как вы можете выполнять базовые команды из vim.
Предположим, что во время редактирования файла вы хотите узнать количество строк, слов и символов, содержащихся в файле. Для этого в командном режиме Vim просто введите двоеточие (:) за которым следует восклицательный знак (!) и, наконец, команда (‘wc’ в данном случае), за которой следует имя файла (используйте % для текущего файла).
:! wc %Вот пример:
Файл с вышеупомянутой командой, готовой к выполнению:

и вот вывод в терминале:
После того как вы закончите просмотр вывода, нажмите клавишу Enter, и вы вернетесь к своей сессии Vim.
Эта функция может быть действительно полезной в ситуациях, когда, скажем, вы пишете код или скрипт и хотите быстро узнать, содержит ли код/скрипт какие-либо ошибки компиляции или синтаксиса.
Двигаясь дальше, если требуется добавить вывод в файл, используйте команду ‘:read !’. Вот пример:
:read ! wc %Команда ‘read’ вставляет вывод внешней команды на новой строке под текущей строкой в редактируемом файле. Если хотите, вы также можете указать конкретный номер строки - вывод будет добавлен после этой строки.
Например, следующая команда добавит вывод ‘wc’ после второй строки файла.
:2read ! wc %Примечание: Используйте ‘$’ для вставки после последней строки и ‘0’ для вставки перед первой строкой.
Теперь, возвращаясь к случаю, который мы обсуждали в начале (), вот команда, которая поможет вам сохранить файл, не закрывая его сначала (что означает отсутствие потери несохраненных изменений), а затем открыть его с, скажем, sudo.
:w ! sudo tee %
Доступ к оболочке в Vim
В дополнение к выполнению отдельных команд, вы также можете попасть в новую запущенную оболочку из Vim. Для этого все, что вам нужно сделать, это выполнить следующую команду из редактора:
:shellили
:shи введите ‘exit’, когда закончите работу в оболочке - это вернет вас в сессию Vim, откуда вы ушли изначально.
Уязвимость, о которой стоит помнить
Хотя возможность доступа к оболочке определенно имеет свои собственные применения в реальном мире, ее также можно использовать как технику повышения привилегий. Как мы объяснили в одном из наших предыдущих учебников (по sudoedit), даже если вы предоставите пользователю доступ sudo только для редактирования одного файла через Vim, он может запустить новую оболочку из редактора, используя эту технику, и затем сможет делать что угодно как ‘root’ или суперпользователь.
Возможность выполнять внешние команды из Vim - это важная функция, которая может оказаться полезной в многих ситуациях (некоторые из которых мы упомянули в этом учебнике). Кривая обучения для этой функции не крутая, поэтому как новички, так и опытные пользователи могут воспользоваться ею.
Вы уже какое-то время используете эту функцию? Есть что-то, чем вы хотите поделиться? Пожалуйста, оставьте свои мысли в комментариях ниже. Возможно, вас также интересует команда Linux tee.
Get new posts in your inbox
No spam. Unsubscribe anytime.