Найти в Дзене
Vim

VimScript 6 [nmap, imap, vmap ]

| ч5. map, основы | Содержание | ч7. *noremap Строгое сопоставление | В прошлой раз мы поговорили о том, как сопоставить ключи в Vim. Для этого мы использовали команду map, и начали мы ее изучение с работы в обычном режиме. Надеюсь вы немного поиграли с map, прежде чем перешли к этой главе, и наверняка, вы заметили, что сопоставления также работают и в визуальном режиме. Теперь же мы хотим иметь возможность уточнить, когда применять сопоставление, и для этого нам надо использовать nmap, vmap, и imap. Они говорят Vim использовать отображение только в обычном, визуальном или режиме вставки соответственно. Запустите эту команду: :nmap \ dd Теперь наведите курсор на текст, убедитесь, что вы находитесь в обычном режиме, и нажмите < \ >. Vim удалит текущую строку. Теперь войдите в визуальный режим и попробуйте нажать < \ >. Ничего не происходит, так как мы сказали Vim использовать эту команду только в обычном режиме. :vmap \ U Перейдите в визуальный режим, выделите текст, затем нажмите < \
Оглавление

| ч5. map, основы | Содержание | ч7. *noremap Строгое сопоставление |

В прошлой раз мы поговорили о том, как сопоставить ключи в Vim. Для этого мы использовали команду map, и начали мы ее изучение с работы в обычном режиме. Надеюсь вы немного поиграли с map, прежде чем перешли к этой главе, и наверняка, вы заметили, что сопоставления также работают и в визуальном режиме.

Теперь же мы хотим иметь возможность уточнить, когда применять сопоставление, и для этого нам надо использовать nmap, vmap, и imap. Они говорят Vim использовать отображение только в обычном, визуальном или режиме вставки соответственно.

Запустите эту команду:

:nmap \ dd

Теперь наведите курсор на текст, убедитесь, что вы находитесь в обычном режиме, и нажмите < \ >. Vim удалит текущую строку.

Теперь войдите в визуальный режим и попробуйте нажать < \ >. Ничего не происходит, так как мы сказали Vim использовать эту команду только в обычном режиме.

:vmap \ U

Перейдите в визуальный режим, выделите текст, затем нажмите < \ >. Vim преобразует текст в верхний регистр!

Попробуйте < \ > ключ в обычном и визуальном режиме и обратите внимание, что теперь его поведение зависит от того, в каком режиме вы находитесь.

Мышечная память

Поначалу идея сопоставления одного и того же ключа для выполнения разных действий в зависимости от того, в каком режиме вы находитесь, может показаться ужасной идеей. Но на практике оказывается, что это очень удобно. Как только вы начнете часто использовать Vim, вы больше не будете думать об отдельных клавишах, которые вы вводите. Вы будете думать: "удалить строку", а не "нажать dd". Ваши пальцы и мозг изучат ваши сопоставления, и сочетание клавиш займет ваше подсознание.

Режим вставки

Теперь, когда мы рассмотрели, как отображать ключи в обычном и визуальном режиме, давайте перейдем к режиму вставки. Запустите эту команду:

:imap <c-d> dd

Вы наверно надеетесь что: Когда мы находимся в режиме вставки, что бы удалить строку нам достаточно нажать < Ctrl+d >. И это было бы удобно, так как не надо возвращаться в обычный режим, чтобы удалить строку.

Попробуйте, это не сработает. Вместо этого он просто поместит две буквы dd в наш текст.

Проблема в том, что Vim делает именно то, что мы ему сказали. Мы сказали: "Когда я нажимаю <c-d>, я хочу, чтобы vim набрал dd" , он это и сделал. А, обычно, при выполнении этой команды мы находились в обычном режиме, а сейчас же мы находимся в режиме вставки и поэтому мы видим dd а не удаление строки.

Что бы imap выполнил то, что мы задумали нам надо перед dd перейти в обычный режим.

:imap <c-d> <esc>dd

С помощью <esc> мы сообщили Vim что хотим перейти в обычным режим. Протестируйте это. Это работает, но не до конца, мы забыли вернуться в режим вставки. Давайте исправим это:

:imap <c-d> <esc>ddi

< i > В конце переводит Vim в режим вставки, и наше сопоставление, наконец, завершено.

Упражнения

Настройте сопоставление так, чтобы находясь в режиме вставки и при нажатии <c-u>, текущее слово преобразовывалось в верхний регистр. Не забывайте < U >, что выделение в визуальном режиме переведет текст в верхний регистр. Я нахожу это чрезвычайно полезным, особенно когда пишу имя длинной константы, например MAX_CONNECTIONS_ALLOWED. Я просто ввожу константу в нижнем регистре, а затем перевожу ее в верхний регистр, это всяко удобней чем удерживать shift все время.

Добавьте это сопоставление в свой ~/.vimrc

Настройте сопоставление так, чтобы вы могли перевести слово в верхний регистр <c-u> в обычном режиме. Это будет немного отличаться от предыдущего сопоставления, так как вам не нужно переходить в обычный режим. В конце вы должны быть в обычном режиме, а не в режим вставки.

Добавьте это сопоставление в свой ~/.vimrc

| ч5. map, основы | Содержание | ч7. *noremap Строгое сопоставление |