#vim #neovim
#vim #neovim
Вопрос:
У меня есть эти сопоставления:
vnoremap <leader>dab "hy:v/<c-r>h/d<cr>
vnoremap <leader>daa "hy:g/<c-r>h/d<cr>
Который удаляет несколько строк с помощью поиска по регулярному выражению, однако строки просто удаляются, и я бы хотел, чтобы они попали в реестр, чтобы я мог удалить их после выполнения этих команд.
Может ли это быть достигнуто с помощью этого регулярного поиска и удаления?
РЕДАКТИРОВАТЬ: Я вижу, что они добавлены в разные регистры, могу ли я сохранить ex-команду в один регистр?
Комментарии:
1. Простой подход, который имеет несколько недостатков:
vnoremap <leader>daa "hyqeq:g/<c-r>h/d E<cr>
который сохраняет удаленные строки в@e
2. Круто, что работает! можете ли вы объяснить?
Ответ №1:
Объясняю свое решение vnoremap <leader>daa "hyqeq:g/<c-r>h/d E<cr>
:
"hy
сохраняет визуальный выбор в@h
qeq
эквивалентно удалению содержимого@e
d E
послеg//
есть команда:d
, но она использует регистр в@E
верхнем регистре, что означает, что она добавит в него новое содержимое вместо перезаписи
Однако у этого есть некоторые недостатки:
- Использование
<c-r>h
в сопоставлении может привести к прерыванию работы команды, например, если выделенный фрагмент содержит косую черту; вы можете избежать нескольких неприятных случаев, добавивV
шаблон, но это далеко от совершенства:vnoremap <leader>daa "hyqeq:g/V<c-r>h/d E<cr>
- Перед
@e
регистром добавляется дополнительная пустая строка
Комментарии:
1. Премного благодарен. Несколько слов о
V
?2. Смотрите
:help /magic
. Это делает шаблон «nomagic».