| ч10. сокращения {iabbrev} | Содержание | ч12.тренируем пальцы |
Я знаю, что мы много говорили о сопоставлениях, но сейчас мы собираемся снова их попрактиковать. Сопоставления - это один из самых простых и быстрых способов сделать редактирование Vim более продуктивным, поэтому полезно немного сосредоточиться на них.
Одна концепция, которая появлялась в нескольких примерах, но о которой мы не говорили, - это отображение последовательности из нескольких ключей.
Выполните следующую команду:
:nnoremap jk dd
Теперь убедитесь, что вы находитесь в обычном режиме, и быстро нажмите < jk >. Vim удалит текущую строку.
Теперь попробуйте нажать только < j > немного подождите и если вы не нажмёте быстро < k > после < j >, то Vim решит, что вы не хотите активировать сопоставление, и вместо этого запустит обычную функциональность клавиш (перемещение по строкам).
Это сопоставление делает перемещение по тексту с задержкой, поэтому давайте удалим его. Выполнив следующую команду:
:nunmap jk
Теперь ввод < jk > в обычном режиме будет перемещать курсор вниз, а затем вверх по строке, как обычно.
Более сложное сопоставление
До сих пор мы видели кучу простых сопоставлений, так что пришло время взглянуть на что-то более сложное. Выполните следующую команду:
:nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel
Вот это уже что то интересное! Во-первых, протестируйте это в работе. Перейдите в обычный режим, наведите курсор на слово в тексте и введите [ <leader>" ]. Vim заключит слово в двойные кавычки!
Как это работает? Давайте разделим его на части и рассмотрим, что каждая часть делает:
viw<esc>a"<esc>bi"<esc>lel
- [ viw ]: Переходит в визуальный режим и выделяет текущее слово
- [ <esc> ]: выход из визуального режима, при котором курсор остается на последнем символе слова
- [ a ]: Перейти в режим вставки после текущего символа
- [ " ]: вставьте < " > в текст, потому что мы находимся в режиме вставки
- [ <esc> ]: возврат в обычный режим
- [ b ]: вернитесь к началу слова
- [ i ]: введите режим вставки перед текущим символом
- [ " ]: снова вставьте < " > в текст
- [ <esc> ]: возврат в обычный режим
- [ l ]: перемещение курсора вправо, это помещает наш курсор на первый символ слова
- [ e ] : переместить в конец слова
- [ l ] : перемещение вправо, которое помещает наш курсор на конечные кавычки
Вспомните: поскольку мы использовали nnoremap вместо nmap, так что теперь не имеет значения, сопоставили ли вы какой-либо из ключей в этой последовательности с чем-то другим или нет. Vim будет использовать функциональность по умолчанию для всех из них.
Надеюсь, вы сможете увидеть, какой потенциал имеют сопоставления Vim, а также насколько нечитаемыми они могут стать.
Упражнения
Создайте сопоставление, подобное тому, которое мы только что рассмотрели, но для одинарных кавычек вместо двойных.
Попробуйте использовать vnoremap для добавления сопоставления, которое заключит любой текст, который вы визуально выделили, в кавычки. Для этого вам, понадобятся команды [ `< ] и [ `> ], поэтому ознакомьтесь с ними через [ :help `< ] .
Сопоставьте < H > в обычном режиме, чтобы перейти к началу текущей строки. Поскольку < h > перемещения влево, то < H > можно считать "как продолжение < h >, но более большим" .
Сопоставьте < L > в обычном режиме, чтобы перейти к концу текущей строки. Поскольку < l > перемещает курсор вправо, то < L > перемещает курсор вправо больше чем просто < l >.
Узнайте, какие команды вы только что переписали, прочитав [ :help H ] и [:help L]. Решите, нужны ли они вам.
Добавьте все эти сопоставления в свой ~/.vimrc файл, и обязательно используйте для этого наши сопоставления <leader>ev .. ZZ .. <leader>sv
| ч10. сокращения {iabbrev} | Содержание | ч12.тренируем пальцы |