Замена Vim до конца строки в обычном режиме

У меня есть текст, выдернутый с помощью yiw. Теперь в другой строке я хочу заменить текст с текущей позиции курсора до конца строки, поэтому я пробую v$p. Однако это также удаляет новую строку в конце строки, чего я не хочу. Как мне решить эту проблему?


vim
person piedpiper    schedule 22.08.2020    source источник


Ответы (2)


Вы можете:

  • отрегулируйте визуальную область, прежде чем ставить:

    v$hp
    
  • используйте движение :help g_, если у вас нет завершающего пробела:

    vg_p
    
person romainl    schedule 22.08.2020

Вы можете удалить в нулевой регистр, а затем вставить с помощью "_Dp

В качестве альтернативы, если вы хотите сохранить текст, который вы удаляете, вы можете удалить его в обычном буфере и вставить из буфера 0 с помощью D"0p

Я нахожу регистровые ключи неуклюжими, поэтому у меня есть карты для них в моем .vimrc:

" leader means "another option key like cmd or meta, but one you get to choose"
let mapleader = "\<Space>"
" get the yank register, not the thing you just deleted
nnoremap <Leader>p "0p
nnoremap <Leader>P "0P
" don't copy the thing you're gonna delete into the delete register
nnoremap <Leader>d "_d
nnoremap <Leader>D "_D

С этими привязками он становится Dp или D p в зависимости от того, хотите ли вы сохранить удаленный текст.


Если вы вообще не хотите возиться с регистрами, всегда есть простой PlD.

person jeremysprofile    schedule 22.08.2020
comment
PlD самый классный (хотя и не эстетически приятный). Я не хотел возиться с регистрами, но, вероятно, попробую то, что вы описали! - person piedpiper; 24.08.2020