Текстовый редактор VIM, основы работы
Доброго времени, читатели моего блога! В данной статье расскажу о своем опыте изучения редактора vim. Это вторая реинкарнация статьи 2010 года. Опишу основные команды и принципы работы данного текстового редактора. Вопрос — Как выйти из vim тоже будет затронут
Редактор vim — это текстовый редактор, созданный на основе более старого — vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, и созданным благодаря этому расширениям и надстройками. Основное достоинство редактора — он есть на любой системе Linux.
Пользовательский интерфейс Vim’а может работать в чистом текстовом (консольном) режиме. Это его самый большой недостаток, т.к. интерфейс далеко не интуитивен и требует обучения для работы в программе.
Основной источник информации по vim в Linux — это справка и, конечно же, Google. В Linux есть отличная встроенная справка, которую можно получить несколькими способами:
- В режиме командной строки
- :help — вывод полной справочной системы по vim
- :help value — вывод справки, касающейся value
- :help value <Ctrl+D> — вывод списка разделов справки, содержащих value
- Утилита vimtutor содержит множество обучающих уроков.
Запуск vim производится следующим способом:
[root@fw root]# vim
запускается редактор с пустым файлом.
[root@fw root]# vim textfile
Запускается с новым файлом с именем textfile, если файла не существует, либо запускается редактирование существующего файла textfile.
Режимы работы vim
У редактора есть несколько режимов работы:
- нормальный (или командный)
- режим ввода текста
- режим командной строки
Если быть более точным, то режимов работы у vim — 14. 7 основных и 7 дополнительных (расширяющих основные). Но пока предлагаю остановиться на 3х основных.
Основные особенности работы разных режимов в том, что некоторые действия можно делать как в режиме командной строки, так и в нормальном режиме. Например, отмена действия — в нормальном режиме — клавиша u, в режиме командной строки — :u, :un, :undo.
Работа в vim
Нормальный (командный) режим \ Normal mode
По умолчанию (если не настроено иное), Vim начинает свою работу в нормальном режиме, который иногда также называют командным. Нажатие клавиш в этом режиме воспринимается как команды. Команды могут быть, например, такие как скопировать, удалить или переместить текст. Перейти в нормальный режим из другого можно, дважды нажав клавишу Esc. На самом деле, способов перехода больше.
В командном режиме существуют одноклавишные комады (a, u, i), комбинации клавиш (Ctrl+R, Ctrl+w), а так же, многоклавишные (gg, zz, qq).
Общие:
- u — отмена предыдущего действия (undo)
- Ctrl + R — отмена отмены (повтор) (redo)
- ZZ — аналог :x (или :wq) — записать и выйти
- ZQ — аналог :q! — выйти без подтверждения
Поиск текста:
- /string — поиск значения string вниз по тексту
- ?string — поиск значения string вверх по тексту
- N — перейти к предыдущему найденном
- n — перейти к следующему найденному
Смена режимов
- a — перейти в режим вставки после символа в текущей позиции курсора
- A — перейти в режим вставки в конце текущий строки
- i или Ins — переход в режим ввода текста перед курсором
- o — переход в режим ввода текста c новой строки ниже
- O — переход в ражим вставки текста с новой строки выше
Перемещение курсора по тексту:
Если перед командой перемещения курсора ввести цифру, то действие повториться столько раз, сколько в цифре, например
10{перейдет на 10 параграфов вперед.
- <PgUp> — страница вверх
- <PgDown> — страница вниз
- :<num>⤶ — перейти на строку номер <num>
- <num>%⤶ — перейти на строку, соответствующую <num> процента документа
- h,← — лево на один символ
- l,<Space>,→ — вправо на один символ
- ^,<Home> — начало строки
- $,<End> — конец строки
- j,↓ — вниз на одну строку
- k,↑ — вверх на одну строку
- w — на слово вперед, в начало следующего слова (слова разделяются пробельными символами — пробел, таб, EOL и символами пунктуации)
- W — на слово вперед, в начало следующего слова (только от пробела к пробелу)
- b — аналогия w но назад, в начало следующего слова
- B — аналогия W но назад, в начало следующего слова
- e — аналогия w но вперед, в конец слова
- E — аналогия W но вперед, в конец слова
- f{char} — перейти вправо до ближайшего символа {char}
- ( — на одно предложение вперед (разделители ‘.’, ‘!’ или ‘?’ )
- ) — на одно предложение назад
- { — на один параграф вперед (разделитель — пустая строка)
- } — на один параграф назад
- G — в конец документа
- g(комбинации с g) — перейти куда-то, например:
- gg — в начало документа
- gt — переход на следующую вкладку (при открытии вкладок :tabedit)
Комбинации перемещения по экрану (без перемещения курсора):
- Ctrl+Y — строка вверх
- Ctrl+E — строка вниз
- Ctrl U — пол страницы вверх
- Ctrl D — пол страницы вниз
- z-комбинации — перемещение страницы относительно курсора:
- z⤶ или zt — текущую позицию курсора сделать верхом страницы
- zz — положение курсора сделать серединой страницы
- zb — положение курсора — низ страницы
- z<num>⤶ — сделать экран высотой <num> строк
- zs — позиция курсора — начало страницы (горизонтально — левый край)
- ze — позиция курсора — конец страницы (горизонтально — правый край)
Редактирование текста:
- d-комбинации — обеспечивают вырезание (удаление) текста в буфер:
- [num]dd — вырезать строку (или [num] строк) в буфер обмена
- d[комбинация_перемещения_курсора_по_тексту] — вырезать блок текста, который будет захвачен при перемещении курсора. Например:
dG— удалит все до конца документа илиdgg— удалить все до начала документа илиd$— до конца строки. - [num]p — вставить (past) [num] раз после курсора
- P — вставка текста из буфера до курсора
- v — режим выделения, он же визуальный
- y — копировать (yank) символ под курсором
- [num]yy — копировать [num] строк
Работа с несколькими окнами:
- разделение экрана для работы с несколькими файлами:
- Ctrl+w,s или :vsplit filename — по горизонтали (новый файл откроется справа)
- Ctrl+w,v или :split filename — по вертикали
- Ctrl+W + — увеличить количество строк в текущем окне
- Ctrl+W — — уменьшить количество строк в текущем окне
- Ctrl+стрелка — перемещение между окнами
- Ctrl+f — переход на страницу вперед
- Ctrl+b — переход на страницу назад
- Ctrl+h — переключить сплит влево
- Ctrl+l — переключить сплит вправо
- Ctrl+k/j — переключение между вертикальными сплитами
- :vertical resize num% — изменить вертикальный размер сплита на num%
Нормальный режим — это центральный режим, из этого режима осуществляется переход во все остальные режимы.
Режим ввода текста \ Insert mode
Для входа в этот режим, используется клавиша Ins. В этом режиме Vim работает так же, как и большинство «обычных» текстовых редакторов. Изменяемый текст хранится в буфере. Набранные символы не воспринимаются как команды, а вставляются в существующий текст.
В данном режиме работают следующие комбинации клавиш:
- стрелки, PgDown/up и home, end для перемещения по тексту
- Esc — выход из редактирования текста и переход в нормальный режим
- Backspace или Ctrl H — удалить символ перед курсором
- Del — удалить символ под курсором
- Ctrl+W — удалить слово перед курсором
- Ctrl+U — удалить строку от курсора до начал строки
- <Tab> или CTRL-I — вставить табуляцию
- Ins — переключиться между режимами Insert\Replace
- Ctrl+d сдвинуть текст влево
- Ctrl+t сдвинуть вправо
- Ctrl+x и Ctrl+f — контекстная подсказка, когда вводишь путь к файлу
- Ctrl+x и ctrl+n — контекстная справка при наборе слова — отображает все слова, которые начинаются на набранное слово (удобно при вводе переменных)
Перемещение текста (блоков текста):
- [num]<<⤶ — сместить блок текста размером [num] строк на размер отступа влево
- [num]>>⤶ — сместить блок текста размером [num] строк на размер отступа вправо
Режим командной строки \ Command-line mode
Этот режим вызывается нажатием : (двоеточие) в нормальном режиме. За двоеточием следует команда, например такая как поиск или замена. После ввода команда запускается нажатием ↵ Enter . После того как команда выполнена, редактор возвращается в нормальный режим. К этому режиму также относятся команды / (поиск вперёд по тексту), ? (поиск назад по тексту) и команда-фильтр ! (запуск команды в bash).
Существует множество команд данного режима, ниже перечислю наиболее используемые:
- :e file — создание нового файла file
- :e! — Редактировать текущую копию файла на диске. Команда перезагрузит файл, отменив созданные вами изменения. Вы также можете использовать команду, если копия на диске была изменена по какой-либо причине и вам требуется последняя ее версия.
- :w [filename] — записать изменения в файл, если указано [filename], то буфер будет записан в новый файл с именем filename
- :w! — записать изменения в файл безусловно (даже если файл readonly).
- :wa[ll] — записать изменения во все открытые файлы
- :r file — вставка в текущий файл, содержимого файла file
- :q — выход из редактора
- :qa — выход из всех открытых фалов
- :q! — выход из редактора без подтверждения изменений
- :x[!] — аналог :wq, но запись в файл делается только если были изменения
- :set paste \ :set nopaste — перейти в режим вставки\выйти из режима (вставляет текст с корректными отступами)
- :s/src/dst/ заменить в текущей строке первое вхождение src на dst
- :s/src/dst/g заменить в текущей строке все вхождения src на dst
- :%s/src/dst/ заменить во всем файле первое вхождение каждой строки src на dst
- :%s/src/dst/g заменить во всем файле все вхождения src на dst
- :set gdefault — по умолчанию, при замене заменять все вхождения, а не только первое
- :1-5s/string1/string2/g — поиск в строках с 1 по 5, строки string1 и замена на string2
- :read! shell-commnd — вывод команды шелла будет добавлен в текущий открытый файл
- :tabe или :tabedit file/path — открыть файл в новой вкладке
- :number — переход на строку с номером — number
- :!command — запуск команды интерпретатора command . После завершения команды, появиться приглашение вернуться в редактор
Для того чтобы vim использовал цветную подсветку синтаксиса, необходимо в файле глобальных параметров $HOME/.vimrc раскомментировать или добавить новую строку syntax on.
Дополнительные материалы
- Официальная документация по последней версии редактора — https://vimhelp.org/
- Vim Cheatsheet for Programmers — http://michael.peopleofhonoronly.com/vim/
- Видеоуроки от Наташи Самойленко — https://youtu.be/cXye8VCI57Y
С Уважением, Mc.Sim!
Другие материалы в категории Linux
- Репликация Mysql (master-slave, master-master)
- Ошибка 0x80004005 0x80070035 на Windows 10 при доступе к сетевой папке
- Текстовый редактор VIM, основы работы
- Спринт Lingoda (ex Марафон Lingoda) + промокод.
- ddrescue или спасаем данные с HDD
- Бесплатный SLES для Vmware — ВСЁ…
- Резервное копирование файлов сайта по ssh
- SQUID настройка ACL и http_access
- squid, использование опции debug_options или диагностика компонентов squid
- Седьмой релиз Debian




Проще в командном режиме вбить номер строки и нажать G.
Хороший сайт
Спасибо за коммент.
номерG — Это дело привычки )
спасибо за статью, хороший материал, ответил на мои вопросы
Я рекомендую тексты перед отправкой внимательней проверять на корректность. Из-за таких ляпов изучать материал совершенно невозможно!
Спасибо.
Я поправил формулировку.
Спасибо большое.
Давно ждал новых статей на Вашем сайте.
Как дополнение, ни в коем случае не критика (или нечто подобное) — про именованные регистры я для себя подчерпнул тут — https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim.
Спасибо за ссылку. Я пользовался данной возможность, но в статье не стал описывать. Если бесконечно углубляться в VIM, можно не остановиться.