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
- скопировать строку в регистр a
bdd
- вырезать строку и поместить в регистр 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/