Vim
如何用 vim 粘貼(覆蓋)?
在
vim
我使用yy
並且p
一直在拉動和粘貼線條。但是,如果我想在文件中的多個位置替換一行,我不能使用yy
p
dd
p
,因為dd
刪除該行到剪貼板/寄存器。雖然我可能應該知道如何更好地使用寄存器,但我覺得可能有一種方法可以p
替換目前行。
預設情況下,粘貼命令使用
"
(“未命名”)寄存器。實際上,任何寫入寄存器的命令也會寫入未命名的寄存器,因此拉取、刪除和更改都會影響它。這就是為什麼您的 yank-delete-paste 序列粘貼已刪除的文本而不是 yanked 的文本。
0
寄存器可以在這裡提供幫助。任何未指定寄存器的 yank 命令都會將 yank 文本放入寄存器0
(除了"
)。它不受刪除或更改操作的影響,因此即使您進行中間刪除或更改,您也可以使用它多次粘貼拉出的行。
yy
: 寄存器0
和"
兩者現在都有拉線。- 移動到要替換的行。
dd
: 寄存器"
現在有被刪除的行,但寄存器0
仍然有被拉出的行。
"0P
:粘貼最初從寄存器中抽出的行0
。 4. 移至下一行進行替換。 5.dd"0P
(同上)(由於在替換緩衝區的最後一行時游標定位的工作方式,您需要使用
"0p
而不是"0P
.)這與Bruce Ediger 的答案非常接近,只是您在最初拉動時不必指定寄存器。使用一個或多個命名寄存器可能非常方便,但如果您需要(例如)將某些行替換為
AAA
,而將其他行替換為BBB
(放入AAA
registera
和BBB
in registerb
(或將其中一個留在 register 中0
),然後相應地粘貼它們)。您還可以
0
在逐行可視模式 (V
) 中粘貼以保存擊鍵:V"0p
.如果您不喜歡鍵入
"0
,您可能會發現映射更方便:noremap <Leader>p "0p noremap <Leader>P "0P vnoremap <Leader>p "0p
另一種方法是刪除
_
(“黑洞”)寄存器。當您刪除它時,"
寄存器不受影響,因此您的 yank-delete-paste 序列仍然可以從未命名的寄存器中粘貼被抽出的文本。
yy
: 註冊0
,"
現在兩者都有拉線。"_dd
: 寄存器沒有變化。
P
:粘貼最初從寄存器中提取的文本"
。同樣,您可能會發現映射更方便:
noremap <Leader>d "_d