Доброго времени, читатели моего блога! В данной статье расскажу о своем опыте изучения редактора vim. Это вторая реинкарнация статьи 2010 года. Опишу основные команды и принципы работы данного текстового редактора. Вопрос - Как выйти из vim тоже будет затронут
Редактор vim - это текстовый редактор, созданный на основе более старого - vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, и созданным благодаря этому расширениям и надстройками. Основное достоинство редактора - он есть на любой системе Linux.
Пользовательский интерфейс Vim’а может работать в чистом текстовом (консольном) режиме. Это его самый большой недостаток, т.к. интерфейс далеко не интуитивен и требует обучения для работы в программе.
Основной источник информации по vim в Linux - это справка и, конечно же, Google. В Linux есть отличная встроенная справка, которую можно получить несколькими способами:
В режиме командной строки
:help - вывод полной справочной системы по vim
:help value - вывод справки, касающейся value
:help value <Ctrl+D> - вывод списка разделов справки, содержащих value
Утилита vimtutor содержит множество обучающих уроков.
Запускается с новым файлом с именем textfile, если файла не существует, либо запускается редактирование существующего файла textfile.
Режимы работы vim
У редактора есть несколько режимов работы:
нормальный (или командный)
режим ввода текста
режим командной строки
Если быть более точным, то режимов работы у vim - 14. 7 основных и 7 дополнительных (расширяющих основные). Но пока предлагаю остановиться на 3х основных.
Режимы работы vim
Основные особенности работы разных режимов в том, что некоторые действия можно делать как в режиме командной строки, так и в нормальном режиме. Например, отмена действия - в нормальном режиме - клавиша 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.
Проще в командном режиме вбить номер строки и нажать G.
Хороший сайт
Спасибо за коммент.
номерG – Это дело привычки )
спасибо за статью, хороший материал, ответил на мои вопросы
Я рекомендую тексты перед отправкой внимательней проверять на корректность. Из-за таких ляпов изучать материал совершенно невозможно!
Спасибо.
Я поправил формулировку.
Спасибо большое.https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim .
Давно ждал новых статей на Вашем сайте.
Как дополнение, ни в коем случае не критика (или нечто подобное) – про именованные регистры я для себя подчерпнул тут –
Спасибо за ссылку. Я пользовался данной возможность, но в статье не стал описывать. Если бесконечно углубляться в VIM, можно не остановиться.