Vim

如何用 vim 粘貼(覆蓋)?

  • January 6, 2022

vim我使用yy並且p一直在拉動和粘貼線條。但是,如果我想在文件中的多個位置替換一行,我不能使用yy p dd p,因為dd 刪除該行到剪貼板/寄存器。雖然我可能應該知道如何更好地使用寄存器,但我覺得可能有一種方法可以p替換目前行。

預設情況下,粘貼命令使用"(“未命名”)寄存器。實際上,任何寫入寄存器的命令也會寫入未命名的寄存器,因此拉取、刪除和更改都會影響它。這就是為什麼您的 yank-delete-paste 序列粘貼已刪除的文本而不是 yanked 的文本。

0寄存器可以在這裡提供幫助。任何未指定寄存器的 yank 命令都會將 yank 文本放入寄存器0(除了")。它不受刪除或更改操作的影響,因此即使您進行中間刪除或更改,您也可以使用它多次粘貼拉出的行。

  1. yy: 寄存器0"兩者現在都有拉線。
  2. 移動到要替換的行。
  3. dd: 寄存器"現在有被刪除的行,但寄存器0仍然有被拉出的行。

"0P:粘貼最初從寄存器中抽出的行0。 4. 移至下一行進行替換。 5. dd"0P(同上)

(由於在替換緩衝區的最後一行時游標定位的工作方式,您需要使用"0p而不是"0P.)

這與Bruce Ediger 的答案非常接近,只是您在最初拉動時不必指定寄存器。使用一個或多個命名寄存器可能非常方便,但如果您需要(例如)將某些行替換為AAA,而將其他行替換為BBB(放入AAAregisteraBBBin register b(或將其中一個留在 register 中0),然後相應地粘貼它們)。

您還可以0在逐行可視模式 ( V) 中粘貼以保存擊鍵:V"0p.

如果您不喜歡鍵入"0,您可能會發現映射更方便:

noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p

另一種方法是刪除_(“黑洞”)寄存器。當您刪除它時,"寄存器不受影響,因此您的 yank-delete-paste 序列仍然可以從未命名的寄存器中粘貼被抽出的文本。

  1. yy: 註冊0"現在兩者都有拉線。
  2. "_dd: 寄存器沒有變化。

P:粘貼最初從寄存器中提取的文本"

同樣,您可能會發現映射更方便:

noremap <Leader>d "_d

引用自:https://unix.stackexchange.com/questions/26654