# Vim: необходимый минимум знаний ## Режим вставки Первая вещь, на которую вы должны обратить внимание — это то, что Vim может работать в различных режимах: - командном режиме, - режиме вставки и - режиме «последней строки» (известном ещё как «ex mode»). Непосредственно после запуска, Vim находится в командном режиме. В этом режиме весь ввод с клавиатуры будет воспринят как команды редактору, а не редактирование текста.\\ Чтобы **переключиться в режим вставки**, нажмите **'i'**, после чего вы получите возможность редактировать текст. При помощи нажатия на **Esc** вы можете затем **вернуться в командный режим**, а введя **':'** в командном режиме, вы попадаете в **ex-mode**. ## Командный режим Команды, которые могут использоваться в командном режиме, можно перечислять очень долго. Но пока что мы ограничимся лишь самым необходимым. Давайте начнём с перемещения по тексту: - **'h'** — перемещение на один символ влево; - **'l'** — перемещение на один символ вправо; - **'j'** — перемещение на один символ вниз; - **'k'** — перемещение на один символ вверх; Можно смещать курсор не на один символ, а на слово целиком: - **'w'** перемещает на слово вперёд, - **'b'** — на слово назад. Словом в Vim считается любая последовательность алфавитно-цифровых символов. Например, «word» — это слово, а «one-year» — это уже два слова, поскольку они разделены дефисом. ### Прочие команды для перемещение курсора * **gj** - передвинуть курсор на одну видимую строку вниз * **gk** - передвинуть курсор на одну видимую строку вверх * **H** - переместиться к началу экрана * **M** - переместиться к середине экрана * **L** - переместиться к концу экрана * **w** - переместиться вперед на начало слова * **e** - переместиться вперед на конец слова * **b** - переместиться назад на начало слова * **%** - переместиться к парному символу (по умолчанию поддерживаются: '()', '{}', '[]' - подробнее по команде :h matchpairs в vim) * **0** - переместиться на начало строки * **$** - переместиться на конец строки * **gg** - переместиться на первую строку документа * **G** - переместиться на последнюю строку документа * **5G** - переместить на пятую строку * **}** - переместиться к следующему параграфу (или функции/блоку при редактировании кода) * **{** - переместиться к предыдущему параграфу (или функции/блоку при редактировании кода) * **Ctrl + b** - переместиться назад на целый экран * **Ctrl + f** - переместиться вперед на целый экран * **Ctrl + d** - переместиться вперед на половину экрана * **Ctrl + u** - переместиться назад на половину экрана //Совет//: Добавьте число перед командой перемещения курсора для того, чтобы повторить её. Например, **4j** перемещает курсор на 4 строки вниз. ## Удаление выполняется при помощи команд **'d'** или **'x'**. - Если вам нужно **удалить один символ**, поставьте курсор над этим символом и нажмите **'x'**. - Для **удаления слова** под курсором используйте **'dw'**, а для **удаления предыдущего слова** — **'db'**. - Если требуется **удалить целую строку**, используйте команду **'dd'**. - При помощи команды **'d$'** можно **удалить часть строки от позиции курсора до конца строки**, - а командой **'d^'** (или **'d0'**) — **от текущей позиции курсора до начала строки**. ## Копирование и вставка Копирование и вставку текста в Vim можно выполнять невероятно быстро. Чтобы **переключиться в режим выделения текста**, используйте команду **'v'**, **'V'** или **'Ctrl+v'**. После переключения в режим выделения вы можете выделять текст, перемещая курсор клавишами h, l, j, k или же клавишами со стрелками. - В режиме **'v'** — будет происходить *«обычное» выделение*, - в режиме **'V'** — *выделение целых строк*, - а в режиме **'Ctrl+v'** — *блочное выделение*, с его помощью можно выделять вертикальные блоки. После того, как вы выделите нужный текст, используйте команду **'y'** для того, чтобы **скопировать выделенный фрагмент в буфер**. Далее, при помощи команды **'p'** или **'P'** можно **вставить скопированный текст из буфера**. **'p'** вставит текст после курсора, а **'P'** — перед ним. ## Поиск и замена Чтобы **переключиться в режим поиска** используйте команду **'/'** — **для поиска в прямом направлении**, или команду **'?'** — **в обратном**; затем введите шаблон поиска. **Поиск и замена** в тексте выполняется при помощи команды **':s'** с заданной областью поиска и замены. __Например, чтобы найти «old» и заменить на «new»__, используйте следующую команду: ``` :%s/old/new/ ``` Символ процента перед **'s'** означает глобальную область поиска. Вместо глобальной области вы можете определить **диапазон строк**, например: ``` :1,15s/old/new/ ``` Имейте ввиду, что **указанные выше команды заменяют __только__ первое найденное вхождение**. Часто бывает нужно **найти и заменить все найденные вхождения** в тексте. Для этого можно воспользоваться «глобальной» заменой, добавив к команде букву **'g'**: ``` :%s/old/new/g ``` Приведённая выше команда заменит все найденные «old» на «new». Дополнительно вы можете заставить Vim запрашивать у вас подтверждение перед выполнением замены: ``` :%s/old/new/gc ``` ## Откат действий Что делать, если вы внесли изменения, которые не нужно было вносить? Воспользуйтесь командой **'u'**, которая **отменит последнее изменение**, сделанное вами. Если же после отката на действие назад вы снова передумали и решили **«отменить отмену», вам поможет** команда **'Ctrl+r'**, которая делает откат в обратную сторону. Имейте ввиду, что если ваш Vim работает в режиме совместимости с Vi, то вы не можете откатиться более, чем на один шаг назад. В своём же «родном» режиме Vim «помнит» и позволяет откатываться на большое количество шагов. ## Сохранение и выход Один из вопросов, который возникает у новичков, первый раз работающих с Vim, звучит примерно: «как мне выйти из него?». Действительно, глядя на экран с редактором, догадаться как именно это делается, невозможно. Это нужно просто знать. Если вы хотите **сохранить внесённые в файл изменения**, используйте команду **':w'**, а чтобы **сохранить изменения и покинуть редактор** — команду **':wq'**. Не хотите сохранять внесённые исправления? Бывает и такое. При помощи команды **':q!'** можно **выйти из Vim, при этом не сохраняя текущий файл**. Также, если нужно, вы можете **сохранить редактируемый текст в другой файл** при помощи команды **':w имя_файла'**. [[0_content|Оглавление]]