Содержание

Vim: режимы, хоткейсы, команды

Основы: режимы работы

В vim и его форках (например nvim) есть 3 + 1 режима:

Ещё один режим — командный. Переход из normal mode нажатием : (двоеточие). Индикатор появляется в нижнем левом углу.

Изначально при открытии файла вы находитесь в normal mode.

Повторения команд

К началу большинства команд можно добавить число — количество повторений.

Перемещение по документу

(normal mode)

По документу можно перемещаться стрелками, но есть более быстрые способы.

Перемещение курсора:

Клавиша Действие
h влево
j вниз
k вверх
l вправо

Перемещение по экрану

Перемещение страницы

Перемещение по словам в строке

В командах b, e, B, E переход зависит от положения курсора в слове.

Перемещение по строке

Перемещение по символам в строке

Поиск текста

Поиск в документе

Поиск выполняется символами / и ?:

\c перед выражением — поиск без учёта регистра.

Отключить подсветку результатов:

:nohlsearch

или поискать несуществующую строку (/asdfasd).

, и пробел — отключить подсветку поискового слова

Перемещение по совпадениям

Замена строк: :%s/foo/bar/gi

Ввод текста

(insert mode)

Все эти команды переключают vim в режим редактирования.

Esc — выход из режима редактирования.

Выделение

(visual mode)

Продвинутое выделение

Копирование и вставка

Удаление (вырезка) текста

В Vim текст не удаляется, а всегда вырезается в буфер обмена.

Регистры

Изменение и замена текста

Сворачивание

:set foldenable           # включить сворачивание
:set foldmethod=syntax    # на основе синтаксиса
:set foldmethod=indent    # на основе отступов
:set foldmethod=manual    # вручную: выделить v, затем zf
:set foldmethod=marker    # на основе маркеров в тексте
:set foldmarker=begin,end # маркеры начала и конца блока

Маркеры

Буква после знака устанавливает или вызывает именованный маркер:

set viminfo='1000,f1   # маркеры пишутся в ~/.viminfo

Макросы

Отступы

:set tabstop=#              # # пробелов для табуляции
:set shiftwidth=#           # # пробелов в командах отступа
:set [no]expandtab          # заменять ли табуляцию на пробелы
:set shiftwidth=4 smarttab  # табуляция = 4 пробела
:set expandtab              # только пробелы, не табуляция
:set tabstop=8 softtabstop=0

Проверка орфографии

mkdir -p ~/.vim/spell
cd ~/.vim/spell
wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
wget http://ftp.vim.org/vim/runtime/spell/en.ascii.sug
wget http://ftp.vim.org/vim/runtime/spell/en.ascii.spl

Работа с кодировкой

:e ++enc=<кодировка>                  # открыть файл в заданной кодировке
:w ++enc=<кодировка>                  # сохранить файл в новой кодировке
:set fileencodings=utf-8,koi8-r       # список автоопределяемых кодировок

Другое

:set [no]wildmenu   # автодополнение в командной строке с вариантами
:set list           # отображать табуляцию и переводы строк
q:                  # история команд
.                   # повторение последней команды

Отмена действий

Консольные команды (:)

Выполнение команд через : (двоеточие) из normal mode.

Переход на строку N

Эксплорер (файловое меню)

Редактирование по сети:

:e ://user@host/path/to/the/file.txt

Прочие консольные команды

:w                  # записать изменения
:w [fname]          # записать в файл [fname]
:wa                 # сохранить все файлы
:q                  # выйти
:q!                 # выйти без сохранения
:color              # выбор цветовой схемы
:pwd                # текущий каталог
:cd [path]          # перейти в каталог
:!команда           # выполнить команду (man, git и т.д.)

Подсветка синтаксиса

Перенос строк (word wrap)

Печать

Сессии

Нумерация строк

Окна, табы, вкладки

Работа с вкладками

Работа с окнами

:split    # горизонтальное разбиение
:vsplit   # вертикальное разбиение

Ctrl+W, затем:

Разное

dd        # вырезать строку
cc        # удалить и начать редактирование
yy        # копировать строку
DEL       # удалить следующий символ

Ctrl+P / Ctrl+N   # автодополнение текста (insert mode)
Ctrl+R, =         # вставить выражение (например 5*2-3) (insert mode)

Полезные советы

Редактирование нескольких файлов

Открыть несколько файлов в табах из командной строки:

vim -p file1.txt file2.txt

Открыть файл в новой вкладке из vim:

:tabe file2.txt

Навигация: gt — следующая вкладка, gT — предыдущая, 1gt, 2gt и т.д. — по номеру.

Файлы настройки

Плагины nvim: nvim-lsp-installer

Пример настройки neovim

Для полного срабатывания нужны плагины: rust-analyzer, pyright, ripgrep.

git clone https://github.com/alexey-goloburdin/nvim-config.git ~/.config/nvim

Создать pyrightconfig.json:

nvim pyrightconfig.json
{
  "venv": "env",
  "venvPath": "."
}

Или скачать:

wget https://stavis-dev.github.io/f/pyrightconfig.json
wget https://stavis-dev.github.io/f/.editorconfig

Особенности конфига

Файловый менеджер

Плагин telescope

Сборка Purple

Пробел — клавиша <leader>.

Стартовое окно

Окна

Ссылки