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

#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».