vim
Ключевые сопоставления в Vim
Поиск…
Вступление
Обновление сопоставлений ключей Vim позволяет решить два типа проблем: переустановка команд ключа на более запоминающиеся или доступные буквы и создание ключевых команд для функций, которые не имеют ни одного. Здесь вы узнаете о различных способах [re] map key commands и контексте, к которому они применяются (т.е. vim-режимы)
Основное картографирование
карта Обзор
Последовательность клавиш может быть повторно отображена на другую последовательность клавиш, используя один из вариантов map
.
Например, следующая типичная map
выйдет из режима Insert, когда вы быстро нажмете j k :
:inoremap jk <Esc>
Оператор карты
Существует несколько вариантов :map
для разных режимов.
команды | Режимы |
---|---|
:map :noremap :unmap | Нормальный, визуальный и режим ожидания от оператора |
:map! , :noremap! , :unmap! | Вставка и режим командной строки |
:nmap :nnoremap :nunmap | Нормальный режим |
:imap :inoremap :iunmap | Вставить и заменить |
:vmap :vnoremap :vunmap | Режим визуализации и выбора |
:xmap :xnoremap :xunmap | Визуальный режим |
:smap :snoremap :sunmap | Выбрать режим |
:cmap :cnoremap :cunmap | Режим командной строки |
:omap :onoremap :ounmap | Режим ожидания оператора |
Обычно вы должны использовать варианты :noremap
; он делает отображение неустойчивым к переназначению и рекурсии.
команда map
- Вы можете отображать все сопоставления, используя
:map
(или один из вариантов выше). - Чтобы отобразить текущее сопоставление для определенной последовательности клавиш, используйте
:map <key>
где<key
> - это последовательность ключей - Специальные клавиши, такие как Esc , отображаются с использованием специальной нотации
<>
, например<Esc>
. Полный список кодов ключей см. На странице http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodes. -
:nmapclear
- Очистить все карты нормального режима -
:nunmap
- Отменить отображение карты нормального режима - Вы можете настроить максимальное время между клавишами последовательности, изменив переменные
timeout
иttimeout
Примеры
-
imap jk <Esc>
: вводjk
в режиме вставки приведет вас в нормальный режим -
nnoremap tt :tabnew<CR>
: вводtt
в обычном режиме откроет новую вкладку -
nnoremap <Cj> <Cw>j
: ввод<Cj>
в нормальном режиме заставит вас перейти к окну внизу и влево -
vmap <Cc> \cc
: ввод<Cc>
в визуальном режиме выполнит команду\cc
(команда NERDCommenter, чтобы прокомментировать строку). Поскольку это зависит от сопоставления плагинов, вы не можете использовать:vnoremap
здесь!
далее здесь
Сочетание клавиш карты
Ключ лидера может использоваться как способ создания сопоставления с привязкой ключа, который может быть переопределен конечным пользователем.
По умолчанию лидером является \ key. Чтобы переопределить его, конечный пользователь должен был бы выполнить :let g:mapleader='somekey(s)'
перед определением отображения.
В типичном сценарии, mapleader установлен в .vimrc
, а плагины используют <Leader>
в ключевой части своих сопоставлений, чтобы настроить их.
В плагине мы будем определять сопоставления с:
:nnoremap <Leader>a somecomplexaction
Это сопоставило бы действие somecomplexaction с комбинацией клавиш \ + a .
Действие без лидера не меняется.
Также возможно использовать <Plug>Mappings
чтобы оставить больше места для настройки привязок плагинов.
Иллюстрация основного сопоставления (Handy shortcuts).
В большинстве текстовых редакторов стандартным ярлыком для сохранения текущего документа является Ctrl + S (или Cmd + S на macOS).
У Vim эта функция по умолчанию отсутствует, но ее можно сопоставить, чтобы упростить задачу. Добавление следующих строк в файл .vimrc
выполнит задание.
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
Команда nnoremap
команду Ctrl + s :w
(записать текущее содержимое в файл), тогда как команда inoremap
отображает команду Ctrl + S to :w
и возвращается в режим вставки ( <co>
переходит в обычный режим для одной команды и после этого возвращается в режим вставки, не изменяя позицию курсора, которую не могут обеспечить другие решения, такие как <esc>:w<cr>a
).
Так же,
" This is commented, as Ctrl+Z is used in terminal emulators to suspend the ongoing program/process.
" nnoremap <c-z> :u<CR>
" Thus, Ctrl+Z can be used in Insert mode
inoremap <c-z> <c-o>:u<CR>
" Enable Ctrl+C for copying selected text in Visual mode
vnoremap <c-c> <c-o>:y<CR>
PS: Однако следует отметить, что Ctrl + S может работать не так, как ожидалось при использовании ssh (или PuTTY). Решение этого вопроса не входит в объем этого документа, но можно найти здесь .