Как удалить (не разрезать) в 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
, чтобы удалить выделение.