Текстовый редактор 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
- Текстовый редактор VIM, основы работы
- ddrescue или спасаем данные с HDD
- Резервное копирование файлов сайта по ssh
- Седьмой релиз Debian
- Использование ramdisk в Linux (ramdisk, ramfs, tmpfs) или препарирование рамдисков
- SNMP протокол (основы)
- Установка антивирусного сканера ClamAV на Debian
- HOWTO использование backports в Debian
- Конспект установки Debian на сервер
- SSH сервер на Debian
Проще в командном режиме вбить номер строки и нажать G.
Хороший сайт
Спасибо за коммент.
номерG – Это дело привычки )
спасибо за статью, хороший материал, ответил на мои вопросы
Я рекомендую тексты перед отправкой внимательней проверять на корректность. Из-за таких ляпов изучать материал совершенно невозможно!
Спасибо.
Я поправил формулировку.
Спасибо большое.
Давно ждал новых статей на Вашем сайте.
Как дополнение, ни в коем случае не критика (или нечто подобное) – про именованные регистры я для себя подчерпнул тут – https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim.
Спасибо за ссылку. Я пользовался данной возможность, но в статье не стал описывать. Если бесконечно углубляться в VIM, можно не остановиться.