一直困扰我的一件事vi/vim:
如果我“猛拉”(又名“复制”)一些文本,然后移动到文件中的另一个位置并执行“粘贴”,我的光标仍停留在开始我刚刚粘贴的文本。这与大多数现代编辑器的做法不同,后者将光标放在结尾我粘贴的文本。
例如,假设“复制缓冲区”包含单词“awesome”,我想将其粘贴到短语中的单词“an”之后:
This is an editor
例如,在编辑器,粘贴后:
This is an awesome editor
^ Cursor is here
在六:
This is an awesome editor
^ Cursor is here
我可以改变吗六 表现得像(例如)编辑器 在这方面?
答案1
在 vim 中,使用gp
andgP
代替p
andP
将光标留在粘贴的文本后面。如果您想交换绑定,请将以下行放入您的.vimrc
:
noremap p gp
noremap P gP
noremap gp p
noremap gP P
奇怪的是,在 vim 中,即使在兼容模式下,p
也P
将光标保留在字符缓冲区的最后粘贴的字符上。
我不知道如何在其他 vi 版本中更改此设置。
答案2
']
或者'>
在这里也可能有用。
从:h motion.txt
:
'] `] 到先前更改或拉出的文本的最后一个字符。
'> `> 到当前缓冲区中最后选定的可视区域的最后一行或最后一个字符。对于块模式,它也可能是最后一行的第一个字符(以便能够定义块)。请注意,适用“选择”,该位置可能就在可视区域之后。
答案3
我很确定这是设计使然。如果您使用“p”(小写 P)进行粘贴,则应该粘贴后当前位置或行。但是,如果您使用“P”(大写 P)进行粘贴,则会粘贴前当前位置或行。如果您想要的行为是让光标位于新粘贴文本的末尾,请尝试养成使用“P”而不是“p”的习惯。
我敢打赌,如果你挖得足够深,你可以找到一个 vim 配方放入你的 .vimrc 中,它总是将光标移动到粘贴的末尾,即使你使用“p”。
答案4
根据https://unix.stackexchange.com/a/5060/457327和我的习惯,我绘制:
nnoremap p P
" nnoremap p <left>P (does not work)
" p: paragraph
nnoremap vP Vip
nnoremap <leader>v Vip
nnoremap P v$<left>P
" like Y D C