Подтвердить что ты не робот

Что означает "inoremap" в vimrc

В vimrc примерном файле

имеется строка ниже:
inoremap Ctrl-u Ctrl-G u Ctrl-u

Какое значение inoremap и какая функция этой линии?

4b9b3361

Ответ 1

vim :help inoremap очень поэтический об этом:

:ino[remap] {lhs} {rhs}         mapmode-i             :ino :inoremap
:ln[oremap] {lhs} {rhs}         mapmode-l             :ln  :lnoremap
:cno[remap] {lhs} {rhs}         mapmode-c             :cno :cnoremap
                    Map the key sequence {lhs} to {rhs} for the modes
                    where the map command applies.  Disallow mapping of
                    {rhs}, to avoid nested and recursive mappings.  Often
                    used to redefine a command.  {not in Vi}

Таким образом, он делает некоторые вставки-вставки для ^U, которые показывают имя файла (^G, отменяет последнее изменение (u) и прокручивает буфер вверх на половину экрана (^U).

Я понятия не имею, почему кому-то нужна эта конкретная последовательность команд, за исключением демонстрации функции inoremap - ^U в отношении означает значение, которое команда имела при создании определения, вместо того, чтобы перезвонить в переопределенное отображение ^U.

Ответ 2

Подробнее о том, почему команда имеет такое странное имя, см. это отличное описание между разницей между map и noremap. Очень полезно знать!

Подведем итог этой статье: цитата выбора:

Один недостаток команд *map - опасность рекурсии...

Vim предлагает другой набор команд отображения, которые не будут принимать сопоставления когда они выполняют свои действия.

Итак, noremap появился, чтобы избежать ужасной рекурсии сопоставлений, таких как

:nmap dd O<esc>jddk

где dd в правой части карты возвращается к определению левой стороны карты, а Vim застревает в бесконечном цикле!

Ответ 3

Я тоже подумал об этом. См. http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-Tutorial (Part_1) #Insert_mode_maps:

Карты режима вставки

Чтобы отобразить ключи, которые работают только в режимах вставки и замены, используйте команду "imap" или "inoremap".

Пример. Следующая команда позволяет вставить имя каталога текущего буфера:

:inoremap <F2> <C-R>=expand('%:p:h')<CR>

Чтобы отобразить текущие карты режимов вставки, используйте команду "imap" без каких-либо аргументов:

:imap

Чтобы удалить раскладку из режима вставки, используйте команду ": iunmap". Например, следующая команда удаляет карту режима вставки для.

:iunmap <F2>

В качестве ключей для печати вставьте символ в текущий буфер в режиме вставки, вы должны использовать непечатаемые ключи для создания карт режима вставки. Некоторые примеры для непечатаемых ключей включают функциональные клавиши, клавиши с префиксом Ctrl или Alt.

[надрез]


Так, например, в моем ~/.vimrc у меня есть

inoremap jk <ESC>
inoremap jj <Esc>

который при нажатии в режиме Вставки возвращает меня в нормальный режим.