В vim и его форках (например nvim) есть 3 + 1 режима:
normal mode — режим просмотраvisual mode — режим выделения текстаinsert mode — режим редактированияESC — перейти в режим просмотра
Ещё один режим — командный. Переход из normal mode нажатием : (двоеточие). Индикатор появляется в нижнем левом углу.
Изначально при открытии файла вы находитесь в normal mode.
К началу большинства команд можно добавить число — количество повторений.
4h — сдвиг курсора на 4 символа влево3a — повторить ввод текста 3 раза5X — удалить 5 символов слева от курсора(normal mode)
По документу можно перемещаться стрелками, но есть более быстрые способы.
Перемещение курсора:
| Клавиша | Действие |
|---|---|
h | влево |
j | вниз |
k | вверх |
l | вправо |
H — в начало экранаM — в середину экранаL — в конец экрана( — к предыдущему предложению) — к следующему предложению{ — к предыдущему параграфу} — к следующему параграфуzt — передвинуть строку вверх экранаzz — передвинуть строку в середину экранаz. — передвинуть строку в середину, курсор в начало строкиzb — передвинуть строку в конец экранаCtrl+D — пол-страницы внизCtrl+U — пол-страницы вверхCtrl+B — страница вверх (Page Up)Ctrl+F — страница вниз (Page Down)Ctrl+O — переместить курсор на предыдущее местоCtrl+I — переместить курсор на последнее место (после Ctrl+O)Ctrl+E — страница на одну строку вверхCtrl+Y — страница на одну строку вниз
В командах b, e, B, E переход зависит от положения курсора в слове.
w — в начало следующего словаW — в начало следующего слова после пробелаb — в начало текущего/предыдущего слова (beginning)B — в начало текущего/предыдущего слова перед пробеломe — в конец текущего/следующего слова (end)E — в конец текущего/следующего слова после пробела0, Home — к началу строки$, End — к концу строки_, ^ — к первому непустому символу в строкеg_ — к последнему непустому символу в строке- — к первому непустому символу в строке сверху+ — к первому непустому символу в строке снизуgg — к первой строкеG — к последней строкеngg — к строке под номером n (например: 45gg)nG — к строке под номером n (аналог ngg)% — к парной скобке вперёд по тексту строки (), {}, []f + X — к следующему символу X в строкеF + X — к следующему символу X в строке (обратное направление)t + X — перед символом X в строке (till)T + X — перед символом X в строке (обратное направление); — повторить переход в прямом направлении
Поиск выполняется символами / и ?:
/Выражение — поиск вперёд по документу от курсора?Выражение — поиск назад по документу от курсора
\c перед выражением — поиск без учёта регистра.
Отключить подсветку результатов:
:nohlsearch
или поискать несуществующую строку (/asdfasd).
,ипробел— отключить подсветку поискового слова
n — к следующему совпадениюN — к предыдущему совпадению* — к следующему слову под курсором# — к предыдущему слову под курсоромgd — перейти к первому появлению слова под курсоромg* — к следующему слову под курсором (слово становится шаблоном поиска)g# — к предыдущему слову под курсором (слово становится шаблоном поиска)
Замена строк: :%s/foo/bar/gi
(insert mode)
a — добавить текст после курсораi — добавить текст до курсораA — добавить текст в конце строкиI — добавить текст в начале строкиo — добавить строку ниже курсораO — добавить строку выше курсораВсе эти команды переключают vim в режим редактирования.
Esc — выход из режима редактирования.
(visual mode)
v — посимвольное выделение текстаV — построчное выделение текстаv + hjkl — выделение текстаShift+V — выделить строкуCtrl+V — выделение прямоугольникаEsc — выход из режима выделенияvip — выделить параграфviw — выделить словоShift+v или 0v$ — выделить строку^v$ — выделить строку начиная с первого непробельного символаvi( — выделить всё между ближайшими () (аналогично vi[ и vi{ для [] и {})va( — выделить всё между (), включая сами скобкиv2j — выделить на две строки внизdip — вырезать параграфy[направление] — копировать по направлению (h, j, k, l, $, 0 и т.п.)yy — копировать строку"*y — копировать в системный буфер обменаp — вставить после курсораP — вставить до курсораgp — вставить после курсора и переместить курсор на один символ вправоgP — вставить до курсора и переместить курсор на один символ влевоВ Vim текст не удаляется, а всегда вырезается в буфер обмена.
x, DEL — удалить символ под курсоромX — удалить символ до курсора (аналог Backspace)d[направление] — удалить по направлению (h, j, k, l, $, 0 и т.п.)dd — удалить строкуD — удалить от курсора до конца строкиayy — скопировать строку в регистр abdd — вырезать строку в регистр bC2d — вырезать три строки и дописать в конец регистра C:reg — просмотреть содержимое регистровJ — объединить строку с нижней (join)r[символ] — заменить символ под курсором (replace)R — начать ввод с заменой текста (аналог Insert)s — заменить символ и начать ввод (substitute)S — заменить строку и начать вводc[направление] — изменить по направлению (h, l, e, b и т.п.)C — изменить строку от курсора до конца (change)~ — сменить регистр символа под курсоромgu — преобразовать в нижний регистрgU — преобразовать в верхний регистрzc — свернуть блокzo — развернуть блокzM — закрыть все блокиzR — открыть все блокиza — инвертированиеzf — см. :set foldmethod=manual:set foldenable # включить сворачивание :set foldmethod=syntax # на основе синтаксиса :set foldmethod=indent # на основе отступов :set foldmethod=manual # вручную: выделить v, затем zf :set foldmethod=marker # на основе маркеров в тексте :set foldmarker=begin,end # маркеры начала и конца блока
m — установить локальный маркер' — перейти к локальному маркеру (одинарная кавычка)Буква после знака устанавливает или вызывает именованный маркер:
ma — установить локальный маркер amB — установить глобальный маркер B'c — перейти к локальному маркеру c'0 — вернуться на позицию при последнем закрытии vim:marks — просмотр маркеровset viminfo='1000,f1 # маркеры пишутся в ~/.viminfo
qa — записать макрос с именем aq — закончить запись макроса@a — выполнить макрос a@@ — повторить последний макрос[#]> — сдвинуть выделенное вправо[#]< — сдвинуть выделенное влево[#]» — сдвинуть строку вправо[#]« — сдвинуть строку влево: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
:set spell spelllang=ru,en — включить проверку орфографии:set nospell — выключить]s — следующее слово с ошибкой[s — предыдущее слово с ошибкойz= — замена слова на альтернативу из спискаzg — пометить слово как правильное (good word)zw — пометить слово как ошибочное (wrong word)zG — игнорировать слово:e ++enc=<кодировка> # открыть файл в заданной кодировке :w ++enc=<кодировка> # сохранить файл в новой кодировке :set fileencodings=utf-8,koi8-r # список автоопределяемых кодировок
:set [no]wildmenu # автодополнение в командной строке с вариантами :set list # отображать табуляцию и переводы строк q: # история команд . # повторение последней команды
u, :u[ndo] — отменить предыдущее действие (undo)U — отменить все изменения в строкеCtrl+R, :red[o] — вернуть отменённое действие (redo). — повторить последнее изменение
Выполнение команд через : (двоеточие) из normal mode.
:10 — перейти на строку 10:e [file_name] — редактировать файл:e [dir_name] — открыть директорию в файловом менеджере:Ex — открыть файловый менеджер в текущем окне:e ./ — файловый менеджер во всё окно:q — закрыть файловый менеджерРедактирование по сети:
:e ://user@host/path/to/the/file.txt
:w # записать изменения :w [fname] # записать в файл [fname] :wa # сохранить все файлы :q # выйти :q! # выйти без сохранения :color # выбор цветовой схемы :pwd # текущий каталог :cd [path] # перейти в каталог :!команда # выполнить команду (man, git и т.д.)
:syntax on — включить:syntax off — выключить:set wrap — разрешить (по умолчанию):set nowrap — запретить:ha[rdcopy] — распечатать документ:set printoptions=duplex:off — отключить двустороннюю печать:mksession file.session — сохранить текущую сессию:source file.session — восстановить сессию:set number — включить:set nonumber — отключить:tabnew [fname] — создать таб:tabs — вывести список табов:tabn — следующий таб:tabp — предыдущий табgt — следующий табgT — предыдущий табngt — перейти на таб #n:tabm +1 — переместить таб вперёд:tabm -1 — переместить таб назад:tabm 2 — переместить таб на заданную позицию (с нуля):tabc — закрыть вкладку:split # горизонтальное разбиение :vsplit # вертикальное разбиение
Ctrl+W, затем:
c — закрыть окно+ / - — изменить высоту текущего окна< / > — изменить ширину текущего окна= — установить равный размер оконhjkl или стрелки — перемещение между окнами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 и т.д. — по номеру.
~/.vimrc — конфиг vim~/.config/nvim/init.vim — конфиг nvim:echo($MYVIMRC) — показать путь к файлу настроек:e $MYVIMRC — редактировать файл настроекПлагины nvim: nvim-lsp-installer
Для полного срабатывания нужны плагины: 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
Ctrl+H — запуск py-скриптаgd — перейти к телу функции (если функция из модуля — модуль откроется в буфере)gp — перейти в предыдущий буферgn — перейти на следующий буферgw — закрыть буферnvim . — открыть nvim в режиме файлового менеджераEnter — открыть выделенный файл- — перейти в каталог вышеgn — сделать рабочей папку в файловом менеджереff — поиск по названию файлаfg — поиск по содержимому файлаEnter — открыть найденный файлCtrl+T — открыть в новой вкладке
Пробел — клавиша <leader>.
e — файловый менеджерq — выходf — поиск по названию файлаEsc Esc — выходTAB — переход по буферу вперёдShift+TAB — переход по буферу назад<leader> + / — закомментировать текущую строку<leader> + c — закомментировать несколько выделенных строк<leader> + tf — терминал в float-режиме<leader> + th — терминал в горизонтальном режимеCtrl+\ — открыть/закрыть терминал<leader> + w — сохранить файлjj — аналог Esc