Vim: режимы, хоткейсы, команды
Основы режимы работы
В vim и его форках - клонах, например nvim, есть 3 + 1 режима:
-
normal mode- режим просмотра -
visual mode- режим выделения текста -
insert mode- режим редактирования -
ESC- перейти в режим просмотра
Еще один режим работы Vim — командный. Переход в него осуществляется из общего режима нажатием : (двоеточия). Соответствующий индикатор появляется в нижнем левом углу окна, после чего можно вводить команды и их сочетания.
Изначально при открытии файла вы будете находится в (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 - в конец текущего/следующего слова после пробела
Перемещение по строкe
0, Home - к началу строки$, End - к концу строки_, ^ - к первому не пустому символу в строкеg_ - к последнему не пустому символу в строке- - к первому не пустому символу в строке сверху+ - к первому не пустому символу в строке снизуgg - к первой строкеG - к последней строкеngg - к строке под номером n (например: 45gg)nG - к строке под номером n (аналог ngg)
Перемещение, по символам в строке
% - к парной скобке вперед по тексту строки () {} []f и X - к следующему символу X в строке (X - любой символ)F и X - к следующему символу X в строке (обратное направление)t и X - перед символом X в строке (till)T и X - перед символом X в строке (обратное направление) (till); - повторить переход в прямом направлении, - повторить переход в обратном направлении
Поиск текста
Поиск в документе
Поиск по документу производится симовлами / и ?. Они будут отображаться в консоли.
/Выражение- поиск текста вперед по документу от курсора?Выражение- поиск текста назад по документу от курсора
\c перед Выражением - совершит поиск без учета регистра
В режиме поиска искомое слово будет подсвечено.
Отключить подсветку можно через косоль:
:nohlsearch
или поискать несуществующую ерунду ( /asdfasd)
,ипрбел- Отключить посветку поискового слова
Перемещение по совпадениям
n - к следующему совпадениюN - к предыдущему совпадению* - к следующему слову под курсором# - к предыдущему слову под курсоромgd - перейти к первому появлению слова под курсоромg* - к следующему слову под курсором (при этом слово станет шаблоном поиска)g# - к предыдущему слову под курсором (при этом слово станет шаблоном поиска)
:%s/foo/bar/gi* замена строк, с foo bar. Подробнее
Ввод текста
(
insert mode) - режим редактирования
a - добавить текст после курсораi - добавить текст до курсораA - добавить текст в конце строкиI - добавить текст в начале строкиo - добавить строку сверху курсораO - добавить строку снизу курсора
Все эти команды переключают vim в режим редактирования.
Esc - выход из режима редактирования
Выделение
(
visual mode) - режим выделения текста
v - посимвольное выделение текста (visual)V - построчное выделение текста v + hjkl - выделение текста SHIFT + v - выделить строку CTR + v - выделение прямоугольника Esc - выход из режима выделения
Продвинутое выдедение
vip - выделить параграфviw - выделить словоShift+v или 0v$ - выделить строку^v$ - выделить строку, начиная с первого непробельного символаvi( - выделить всё между ближайшими круглыми скобками (аналогично vi\[ и vi\{ для квадратных и фигурных скобок)va( - выделить всё между ближайшими круглыми скобками, включая сами скобкиv2j - выделить на две строки внизdip - вырезать параграф
Копирование и вставка
y[направление] - копировать символ под курсором по направлению (h, j, k, l, $, 0 и т.п.)yy - копировать строку"*y - копировать в системный буфер обмера для вставки в другое приложение (например браузер)p - вставить после курсора (paste)P - вставить до курсораgp - вставить после курсора и переместить курсор на один символ вправоgP - вставить до курсора и переместить курсор на один символ влево
Удаление (вырезка) текста
Важно отметить, что текст в Vim не удаляется как в обычных редакторах, а всегда вырезается в буфер обмена. Поэтому всегда, удаленный (вырезанный) текст, можно вставить в любом месте документа.
x, DEL - удалить (вырезать) символ под курсоромX - удалить (вырезать) символ до курсора (аналог backspace)d[направление] - удалить (вырезать) символы по направлению (h, j, k, l, $, 0 и т.п.)dd - удалить (вырезать) строкуD - удалить (вырезать) символы от курсора до конца строки
Регистры
ayy - скопировать строку в регистр abdd - вырезать строку и поместить в регистр bС2d - вырезать три строки и дописать в конец
регистра C :reg - [name1][name2][...] просмотреть содержимое регистров
Изменение и замена текста
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=bigin,end задаем маркеры начала и конца блока
Маркеры
m установить локальный маркер' перейти к локальному маркеру (одинарная кавычка)
Буква после знака устанавливает или вызывает именованный маркер. Например:
ma установить локальный маркер "a"mB установить глобальный маркер B'c перейти к локальному маркеру c'0 вернуться на позицию, на которой закончили работу при закрытии vim:marks просмотр маркеров
set viminfo='1000,f1 маркеры пишутся в ~/.viminfo, восстанавливаясь при следующем запуске vim. маркер " хранит последнюю позицию курсора в файле
Макросы
qa - записать макрос с именем a q - в режиме записи макроса: закончить запись @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 - ignore word
Работа с кодировкой
e ++enc=<имя кодировки> Редактирование файла в ??? кодировке w ++enc=<имя кодировки> Сохранить файл в новой кодировке set fileencodings=utf-8,koi8-r Список автоматически определяемых кодировок в порядке убывания приоритета
Другое
:set [no]wildmenu При автодополнении в командной строке над ней выводятся возможные варианты :set list Отображать табуляцию и переводы строк q: История команд . Повторение последней команды
Отмена действий
u, :u[ndo] отмена предыдущего действия (undo)
CTR-R, :red[o] отмена отмены предыдущего действия (redo)u - отменить действие (undo) :u\[ndo\]U - отменить все изменения в строкеCtrl+R - вернуть отменённое действие :red\[o\]. - повторить последнее изменение
Консольные команды (:)
Выполнение команд в консоли выполняется с ввода символа : (двоеточие).
Далее сразу необходимая команда:
Переход на строку N
: и далее цифра - перейти на строку (цифра) :10 перейти на строку 10
Эксплорер (файловое меню)
:e [file_hame] - редактировать файл [file_hame]:e [dir_name] - открыть дерикторию в файловом менеджере [dir_name]
Можно редактировать файлы через сеть, например:
:e ://user@host/path/to/the/file.txt
:Ex - открыть файловый менеджер в этом же окне:e ./ - файловый менеджер во все окно (закроет текущий файл):q - закрыть файловый менеджер
Еще консольные команды
:w записать изменения
:w [fname] записать изменения в [fname] файл
:wa сохранить изменения во всех файлах
:q выйти из редактора
:q! выйти из редактора, не сохраняя изменения
:color выбор цветовой схемы. цветовые схемы: /usr/local/share/vim/vim72/colors/*.vim :pwd текущий каталог
:cd [path] перейти в другой каталог
:!команда выполнить команду - man, git, и так далее стрелочками вверх и вниз можно автодополнять команды и искать по истории
Подсветка синтаксиса
:syntax on включить подсветку:syntax off выключить подсветку (по умолчанию)
Перенос строк (word wrap)
:set wrap разрешить word wrap (по умолчанию):set nowrap запретить word wrap
Печать
:ha[rdcopy] распечатать документ:set printoptions=duplex:off отключить двустороннюю печать
Сессии
mksession file.session сохранить текущую сессиюsource file.session восстановить ранее сохраненную сессию
Нумерация строк
:set number включить нумерацию строк:set nonumber отключить нумерацию строк
Окна табы вкладки.
Полезная штука если нужно работать одновременно с несколькими файлами.
Работа с вкладками (табами)
:tabnew [fname] создать таб:tabs вывести список табов:tabn следующий таб:tabp предыдущий табgt перейти на таб #ngt следующий табgT предыдущий таб:tabm +1 переместить таб вперед на одну позицию:tabm -1 переместить таб назад на одну позицию:tabm 2 переместить таб на заданную позицию (нумерация начинается с нуля)
Работа с окнами
:split # горизонтальное разбиение
:vsplit # вертикальное разбиение
Ctr+W, затем:с - закрыть окно+ - - - изменение высоты текущего окна< - > - изменение ширины текущего окна= - установить равный размер окон
hjkl или стрелочки перемещение между окнами
Еще примеры - ниже вставлено без разбора.
Ниже примеры всатвлены без структурирования.
dd вырезать (удалить) строку
cc удалить и начать редактирование
yy копировать строку
d удалить n+1 строку
y скопировать n+1 строку
DEL удалить следующий символ
CTR+p или CTR+n автоматическое дополнение текста (в режиме редактирования) CTR+r,=, вставить выражение, например 5*2 - 3 (в режиме редактирования)
Полезные советы
Радактирование нескольких файлов
Я считаю, что наиболее удобный способ редактирования нескольких файлов - использование вкладок.
Вы можете открыть несколько файлов на отдельных вкладках через командную строку, например, так:
vim -p file1.txt file2.txt
Или, если у вас уже открыт vim, вы можете открыть новый файл на новой вкладке, например:
:tabe file2.txt
Открыв вкладки, используйте gt для просмотра следующей вкладки и gT просмотра предыдущей вкладки.
Вы также можете перейти к первой вкладке с помощью 1gt, второй вкладке с помощью 2gt и т. д.
Вы можете закрыть вкладки, используя :tabc
Наконец, вы можете переместить текущую вкладку в ту nпозицию, :ntabm где n любое число больше или равно 0.
Файлы настройки
-
Файл настройки vim:
~/.vimrc -
Файл настройки nvim
~/.config/nvim/init.vim -
:echo($MYVIMRC)- отобразить путь к файлу настроек -
:e $MYVIMRC- редактировать файл настроек
Плагины и расширения nvim nvim-lsp-installer
Пример настройки neovim
- Настройки nvim видео с канала Диджитализируй
- Мой вариант конфиг файлов.
Для полного срабатывания настроек необходимы плагины rust-analizer, pyright,ripgrep
git clone https://github.com/alexey-goloburdin/nvim-config.git ~/.config/nvim
Создать файл конфига:
nvim pyrightconfig.json
{
"venv": "env",
"venvPath": "."
}
или скачать от сюда:
wget https://stavis-dev.github.io/f/pyrightconfig.json
Так же полезным будет добавить себе файл .editorconfig. Если начинаете новый проект.
wget https://stavis-dev.github.io/f/.editorconfig
Особенности конфига
Ctrl + h- запускpyскриптаgd- перейти к телу выделенной функции- если функция имортированна из модуля, то модуль откроется в отдельном буфере.
gp- previos перейти в предыдущий буфер (обратно на страницу)gn- next перейти на следующий буферgw- закрыть буфер
Файловый менеджер
hvim . - откроет nvim в режиме файлового менеджера
Перемещение по файловому менеджеру такое же как и по документу.Enter - открыть выделенный файл - - перейти в каталог выше.gn - сделать рабочей папку в файловом менеджере
Плагин telescope
ff - поиск по названию файлаfg - поиск по содержимому файла Enter - открыть найденый файлCtrl + t - открыть в новой вкладке
Сборка Purple
С сегодняшнего дня начал использовать сборку purple для своего nvim. Клавиши управления для него опишу тут.
Пробел - клавиша <leader> - <>
Стартовое окно
e - файловый менеджер q - выход
f - поиск по названию файлаESC ESC - выход
Окна
TAB - переход по буферу впередShift TAB - переход по буферу назад
<> + / - закоментировать текущую строку<> + c - закоментировать несколько выделенных строк
<> + tf - терминал во float режиме<> + th - терминал во горизонтальном режимеCtrl \ - открыть, закрыть
<> + w - сохранить файлjj - быстро - аналог ESC
источник: https://stavis-dev.github.io/manuals/vim/

