Как удалить (не разрезать) в Vim?

Как удалить строку, не помещая ее в буфер по умолчанию?

Пример:

line that will be copied.

line that I want to be substitued with the previous one.

Что я пытаюсь сделать:

yy
dd
p

Но Vim заменяет недавно скопированную строку удаленным (вырезанным). Я знаю, что я могу использовать такие буферы, как "1yy, dd, затем "1p, но я всегда забываю поместить скопированную строку в буфер, тогда мне нужно сначала вставить мое содержимое (строка, которая будет скопирована), а затем удалить то, что я хочу (строка, которую я хочу заменить предыдущей).

Как я могу удалить текст в Vi (m) без его копирования?

Другой связанный с этим вопрос заключается в том, как я могу переслать удаление слова в режиме вставки? Мне нужно что-то похожее на Ctrl + w.

Ответ 1

Используйте "регистр черных дыр", "_, чтобы действительно удалить что-то: "_d.
Используйте "_dP, чтобы вставить что-то и сохранить его для дальнейшего вставки.

Во втором вопросе вы можете использовать <C-o>dw. <C-o> используется для выполнения нормальной команды, не выходя из режима вставки.

Вы можете настроить свои собственные сопоставления, чтобы сохранить ввод текста, конечно. У меня есть следующие данные:

nnoremap <leader>d "_d
vnoremap <leader>d "_d
vnoremap <leader>p "_dP

Ответ 2

Регистр черных дыр "_ выполнит трюк, но есть лучшее решение:

Когда вы входите в строку с помощью команды p, вы вставляете содержимое (volatile) регистра по умолчанию "", которое было перезаписано dd. Но вы все равно можете вставить из (нестабильного) регистра yank "0, который не будет перезаписан командой delete dd.

Итак, это команды, которые вы хотите использовать в соответствии с вашим примером:

yy
dd
"0p

Ответ 3

Это одна из вещей, которые мне не нравились в vim... Я закончил отображение dd в регистр черных дыр в моем .vimrc, и жизнь была хорошей, поскольку:

nnoremap d "_d
vnoremap d "_d

Ответ 4

Вы можете использовать "_d, чтобы предотвратить перезапись вашего дернутого текста. Вы можете хранить выдернутый или удаленный текст в любом регистре, который вы хотите, с помощью ", а _ - это регистр "черной дыры", куда вы отправляете вещи, которые вам не нужны.

Для получения дополнительной информации вы можете ввести :help "_ или :help deleting

Ответ 5

будут отображены следующие отображения:

  • d = > "delete"
  • лидер d = > "cut"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

Кроме того, хорошая практика заключается в том, что ключ "лидер" установлен в запятую, например:

let mapleader = ","
let g:mapleader = ","

эти 2 фрагмента сделают команду ", d" вашей новой командой.

Если вы хотите использовать эти сопоставления для общей конфигурации системного буфера обмена, см. дальнейшие подробности в https://github.com/pazams/d-is-for-delete

Ответ 6

yy
Vx
p

Когда в визуальном режиме x удалит выделение, поэтому, если вы хотите удалить целую строку, сначала нажмите V, чтобы выбрать линию в визуальном режиме, а затем нажмите x, чтобы удалить выделение.