Title: Vim editor
Author:: Vitus Wagner
Введение
Когда-то давно меня спросили, чем мне не нравится текстовый редактор notepad. На что я ответил, что в нём нужно каждую буковку руками набирать.
Дело в том, что я к тому моменту уже много лет пользовался редактором vim. Поэтому идея, что программа большую часть буковок в редактируемом текстовом файле способна сделать за тебя, была для меня вполне естественной.
vim это редактор для программистов. То есть для людей, которые любую более-менее повторяющуюся работу с компьютером норовят на тот самый компьютер и переложить.
Ещё одним крайне ценным для меня свойством vim является то, что он не забыл своего происхождения из тех времён, когда компьютеры были большими, а каналы связи медленными.
Swap-файл
Vim это единственный редактор из доживших до наших дней, который
рассчитан на то, что питание компьютера может пропасть или процесс
редактора в может быть убит сигналом то ли от OOMKiller-а то ли при
разрыве соединения с удалённым компьютером. Поэтому при работе vim
постоянно записывает действия пользователя в так называемый swap-файл
(обычно имя своп-файла создаётся из имени редактируемого файла путём
добавления расширения .swp
и точки в начале).
Если вдруг процесс редактирования был насильственно прерван, то своп-файло остаётся в файловой системе и при последующей попытке редактирования того же файла (равно как и при попытке запуска редактирования того же файла из другого сеанса) будет выдано предупреждающее сообщение, предлагающее либо открыть файл только для чтения, либо восстановить.
Если вы уверены, что это не запущенный в другом окне процесс редактирования, а последствия падения, то надо запустить процесс восстановления. И скорее всего все изменения сделанные перед падением будут на месте.
Нормальный режим - это нормально
Если вы хотите научиться пользоваться vim-ом эффективно, не поддавайтесь искушению запускать его в режиме вставки по умолчанию. Существует уйма способов это сделать:
- прописать в .vimrc переменную set insertmode
- запускать evim (easy vim)
- запускать vim с ключиком -y
- выполнить команду :star (:startinsert) либо из командной строки, либо из .vimrc
Но вы так не делайте. Большую часть времени при работе над текстом все равно занимает не набор его, а редактирование. А перемещение по тексту, удаление, поиск и форматирование удобнее делать из нормального режима.
Нормальный режим vim отличается тем что все буквенные клавиши (кроме тех кто переключает в другие режимы) выполняют какие-нибудь команды, а не попадают в текст в виде букв. То есть если более других редакторов для перемещения вам доступны только клавиши цифровой клавиатуры (или дублирующие их клавиши остающиеся клавишами перемещения даже при включённом NumLock) либо комбинации с клавишами-модификаторами Control и Command, то в vim-е к вашим услугам вся клавиатура.
Более того заметная часть операций изменения текста может сопровождаться операцией перемещения. Если вам надо удалить фрагмент, вы нажимаете d и команду перемещения — на один символ, на слово, в конец абзаца, да хоть до конца текста, и удалится именно этот фрагмент. Аналогично дело обстоит с копированием текста в регистр.
Хочу обратить ваше внимание на команды перемещения с поиском. В vim-е есть две команды перемещения с поиском одного символа - f и t (А если надо назад по тексту — соответствующие большие буквы). Отличаются они тем что f<символ> помещает курсор на указанный символ, а t<символ> - перед ним. Соответственно, если у вас в тексте есть строка в кавычках, и вы хотите её заменить то последовательность действий такая: f" (нашли открывающую кавычку) l (сместились на следующий символ) ct" изменить (удалить и перейти в режим вставки) все до следующей кавычки, но не включая её.
Почти все команды нормального режима могут сопровождаться числовым модификатором. Например h перемещает на один символ вправо, а 10h — на 10 символов.
Кто такой
Читая хелп по разнообразным плагинам vim вы достаточно часто будете
встречать обозначения клавиш в виде строки в угловых скобках. Как
правило, слова в угловых скобках говорят сами за себя. Если написано
что данная команда повешена на
Пойди туда, знаю куда
Перемещения по структурным элементам текста
Перемещения по блокам языков программирования
Тэги и навигация по вызовам функций
Marks, jumplist и changelist
Регистры
Большая часть программ в современных графических средах умеет пользоваться системным буфером обмена, куда можно вырезать кусок текста, а потом вставить его в другое место (или даже совсем другой файл). Vim, собранный с графическим интерфейсом тоже так умеет. Но кроме системного буфера у него есть ещё четыре десятка своих, называемых регистрами.
Любая операция удаления в нормальном режиме помещает удалённый текст в
один из регистров. При этом, если регистр не был указан, то
операция yank помещает текст в регистр 0, а операция delete - в регистр 1.
При вставке автоматически используется тот из этих регистров, который
менялся последним. Так что если вы забрали в буфер ценный текст, а потом
что-то удалили, чтобы освободить место для вставки этого, то текст в
буфере не пропал. Вам всего лишь надо перед командой p указать из какого
именно регистра вы хотите вставить. "0p
. Остальные цифровые регистры
от 2 до 9 представляют собой стэк куда выталкиваются данные из регистра
1 при последующих удалениях.
Так что вам обычно доступны для вставки обратно результаты девяти предыдущих удалений.
В 26 регистров, обозначаемых латинскими буквами, текст попадает только если вы это явно попросите. При этом unnamed register начинает указывать на этот буквенный регистр.
Регистр .
содержит текст, введенный в ходе последней сессии режима
вставки. См команду .
в следующей главе. Регистр : - последняя
выполненная командная строка.
Регистры % и # содержат имена текущего и альтернативного редактируемого файла.
Регистр * соответствует буферу обмена GUI-системы, а + - primary selection в X window.
Ещё у vim есть возможность включить запись все выполняемых действий (нажимаемых клавиш) в регистр с помощью команды q<имя-регистра>. Остановить запись можно просто q. И, соответственно выполнить регистр с помощью @<имя регистра>.
Вставить содержимое регистра в командную строку можно посредством
Ctrl-R<имя регистра>
Когда программа пишет текст за вас
Autoindent
Completion
Аббревиатуры
Команда .
Поиск с заменой
Вставка в текст вывода внешней команды
Подстановки в командную строку
filename-modifiers
help filename-modifiers
Пишем грамотно
Встроенный spellcheck
LanguageTool
Асинхронный linting кода
Как не видеть лишнего
Режим quickfix
Фолдинг
vimdiff
Vim и управление версиями
fugitive
Шифрование
Редактор как оконная среда
Окна, вкладки и буфера
Терминальные буфера
Отладка в vim
packadd termdebug