我很确定这一定存在,但如果它不存在,也许有一个宏...
我最喜欢的 vim 功能之一是在可视模式之前插入(
<C-v>
,选择行,<C-I>
,键入一点,然后 Esc)。
我的问题是我想粘贴之前的剪贴板内容,而不是“插入”。我试过
<C-P>
但没有爱。
我已经阅读了备忘单,到处搜索,浏览了这里的问题但没有找到它,但我肯定是在寻找错误的东西。
一般情况下,P命令(大写,不同于p)将剪贴板中的内容粘贴到光标位置之前。那是你要找的吗? (我不太清楚你说按 Command+I 是什么意思,因为我的键盘没有 Command 键。)
我假设你的意思是在可视块模式下使用
I
在多行上插入相同的文本,其中点击 p
只是粘贴到当前行而不是所有选定的行。
在插入模式下,您可以点击
C-r
后跟一个寄存器来插入该寄存器的内容,所以如果您想粘贴未命名的缓冲区,您可以输入
C-r"
同样,从剪贴板粘贴
C-r*
通过像往常一样输入插入,然后使用
C-r
,您将获得所有选定行的文本。
看看
:h registers
看看你可以使用哪些寄存器。
似乎晚了,但我遇到了同样的问题。
例如有两行的文件:
福
酒吧
4-1。 按 p => bfooar
4-2。 按 P(Shift+P) => foobar 这是我所期望的。
TLDR:大写 P(shift + p)
基于Alligator解决方案,使用地图。
例如在 3 种情况下粘贴字符串
_s_
:
" |-- original --|-- pasted after C --|-- pasted before C --|-- pasted replacing C --|
" |--------------|------------------------------------------------------------------------|
" |-- --|-- select column C --|-- select column B --|-- select column C --| --> step 0 (after copying/yanking a string)
" |-- --|-- press <leader>py --|-- press <leader>py --|-- press p --| --> step 1 if yanked
" |-- --|-- press <leader>pc --|-- press <leader>pc --|-- press "+p --| --> step 1 if copied to clipboard
" ABCD ABC_s_D AB_s_CD AB_s_D
" ABCD ABC_s_D AB_s_CD AB_s_D
" ABCD ABC_s_D AB_s_CD AB_s_D
每个寄存器的映射(分别被抽取或复制)是:
xnoremap <leader>py A<C-r>*<Esc>
xnoremap <leader>pc A<C-r>+<Esc>
在前面的示例中,我将粘贴在列之后(即使粘贴在C列之前,我也可以在B列之后粘贴)。如果需要粘贴before只需在2个映射中将
A
更改为I
。
而不是
"+p
,如果以前可以使用普通的p
:将+
复制到*
寄存器(在表的最后一个案例中需要):
nnoremap <leader>z :let @*='<C-r>+'<CR>
例如,我们需要在单词Fish之前的4行插入My:
def EatMyFish(x):
return x - 1
a = EatFish(1)
b = EatFish(2)
c = EatFish(3)
d = EatFish(4)
def EatMyFish(x):
EatMyFish(1)
ctrl-v
垂直选择3j
选择列中的所有FI
进入所有 4 行的编辑模式ctrl-o
一个动作的正常模式(记住:o =一次或一次)P
在光标前插入(不小p
)或
ctrl-r "
在插入模式下,而不是上面的 6-7无论如何,现在我们有:
def EatMyFish(x):
return x - 1
a = EatMyFish(1)
b = EatMyFish(2)
c = EatMyFish(3)
d = EatMyFish(4)