#vim #macros
#vim #макросы
Вопрос:
Существует важная часть сопоставления vim:
:map <C-j>r f{^
Я заметил, что когда {
символ не найден в строке, остальная часть сопоставления не выполняется.
Есть ли способ, как принудительно продолжить сопоставление, даже если символ поиска не найден? (В этом случае выполните возврат к началу файла)
Комментарии:
1. во-первых, это не макрос, это сопоставление. можете ли вы вставить полный файл map cmd, чтобы мы могли видеть, что вы хотите сделать? теперь вы просто хотите перейти к
{
затем перейдите к 1-му непустому, что не имеет смысла.2. Это не имеет смысла, но он все еще ведет себя так, как он описывает, что мне кажется странным.
3. @Kent спасибо за исправление моей терминологии, изменено на
mapping
. Ну, я только что опубликовал соответствующую частьmapping
, я думаю, что за это можно отвечать, не зная контекста. Я не хочу объяснять это здесь, потому что я пытался свести вопрос к сути.
Ответ №1:
Да, Vim прерывается при ошибке в сопоставлении. Вы можете использовать :silent! normal! ...
для продолжения независимо от ошибок. С помощью последовательности :normal!
команд вы даже можете проверить (например, переместился ли курсор) и отреагировать на это. Эскиз:
:map <C-j>r :exe 'normal! maf{'<Bar>if getpos("'a") == getpos(".")<Bar>echo "no move"<Bar>endif<CR>
Обратите внимание, что это плохо масштабируется. Вам лучше переместить команды в :function
.
Кроме того, вам, вероятно, следует использовать :noremap
; это делает сопоставление невосприимчивым к переназначению и рекурсии.
Буквальный ответ на этот вопрос был бы:
:map <C-j>r :silent! exe "normal f{^"<CR>
Комментарии:
1. Спасибо, мне действительно нужно было немного поиграть с этим, пока я не нашел реальное решение, поэтому я включил его в ответ.