在vim中,我将字符串ABCD
复制到剪贴板中。现在我想通过 c-e 替换文本段落中的某些单词(这会删除并立即将我置于插入模式)。但是当我粘贴它时,它将粘贴我刚刚切割的东西覆盖我的ABCD。
我想出的一个解决方案是:
c-e
ctrl-o
"0P
但这似乎太长了。有更快的替代方案吗?
答案 0 :(得分:3)
复制字符串时,将光标放在字符串的开头,然后键入
" ayw的
其中" a 表示注册表的名称(类似于存储空间), yw 表示将单词复制(yank)到该寄存器中。 共有26个寄存器,每个字母对应一个字母。
如果要粘贴内容,请键入
" AP
其中 p 表示要粘贴。然后使用vim repeat命令。重复上一个操作 您可以将字符串存储在不同的寄存器中,并随时粘贴它们。 设置所有寄存器类型的内容
:REG
有关更多信息,请转到
Vim registers: The basics and beyond
{{3}}
答案 1 :(得分:1)
你最后抽出的东西总是在注册0
中提供,所以,在你的情况下,你只需要这样做:
<C-e><C-r>0<Esc>
请参阅:help i_ctrl-r
。
但是,对于一次性投注,有一种更简单的方式:
vep
或者,如果您需要多次进行这些更改:
ve"0p
答案 2 :(得分:1)
使用“冲压”方法;这使您可以保持正常模式,只需一次按键。添加此映射:
nnoremap S diw"0P
然后按S
以“标记”光标所在的任何字词以及您所拉的内容。
所以,完整例程的一个例子:
1. ye
2. <move cursor over the word you wish to replace with the yank>
3. S
当然,如果使用S
,请选择其他内容,例如ww
。
这是一种众所周知的方法;有关变体和详细信息,请参阅此文档:http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text。
答案 3 :(得分:0)
您可以使用yankstack,这简化了您的使用案例。 这样可以在粘贴时轻松地对抗yank缓冲区。 我亲自将密钥重新映射到空间(我的领导密钥)。
以下是我.vimrc
的摘录:
if &runtimepath =~ 'vim-yankstack'
let g:yankstack_map_keys = 0
nmap <leader>p <Plug>yankstack_substitute_older_paste
nmap <leader>P <Plug>yankstack_substitute_newer_paste
endif
在您的情况下,您只需在粘贴文本后右键按空格键。这将替换粘贴到缓冲区中最后一个条目的单词。如果你需要深入了解历史,你可以重复压缩空间。