Reputation: 3988
I'm so sure that this must exist, but if it doesn't maybe there is a macro for it...
One of my most favourite features of vim is the insert before when in visual mode (<C-v>
, select the lines, <C-I>
, type a little, then Esc).
My issue is that I want to paste the clipboard contents before, not 'insert'. I tried <C-P>
but no love.
I have read cheat sheets, searched everywhere, looked through the questions on here and haven't found it, but I could definitely be searching for the wrong thing.
Upvotes: 35
Views: 28553
Reputation: 31
for example, we need insert My in 4 lines before word Fish:
def EatMyFish(x):
return x - 1
a = EatFish(1)
b = EatFish(2)
c = EatFish(3)
d = EatFish(4)
def EatMyFish(x):
EatMyFish(1)
or
anyway, now we have:
def EatMyFish(x):
return x - 1
a = EatMyFish(1)
b = EatMyFish(2)
c = EatMyFish(3)
d = EatMyFish(4)
Upvotes: 0
Reputation: 386
Based on Alligator solution, using maps.
E.g. to paste the string _s_
in 3 cases:
" |-- 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
Where the mappings for each register (yanked or copied respectively) are:
xnoremap <leader>py A<C-r>*<Esc>
xnoremap <leader>pc A<C-r>+<Esc>
In previous examples I pasted after column (even pasting before column C, I workaround to paste after column B). If desired to paste before just change A
to I
in the 2 mappings.
Instead of "+p
, one could use plain p
if previously: copied +
to *
register (needed in last case of table):
nnoremap <leader>z :let @*='<C-r>+'<CR>
Upvotes: 0
Reputation: 31
May seems late, but I faced the same problem.
e.g. A file having two lines:
foo
bar
4-1. Press p => bfooar
4-2. Press P(Shift+P) => foobar Which is what I expected.
TLDR: Upper case P (shift + p)
Upvotes: 1
Reputation: 1399
I assume you mean using I
in visual block mode to insert the same text on multiple lines, where hitting p
simply pastes on the current line rather than all the selected lines.
In insert mode, you can hit C-r
followed by a register to insert the contents of that register, so if you wanted to paste the unnamed buffer, you'd enter
C-r"
Similarly, to paste from the clipboard
C-r*
By entering insert as you normally would, then using C-r
, you'll get the text on all of the selected lines.
Take a look at :h registers
to see what registers are available to you.
Upvotes: 21
Reputation: 993095
Generally, the P command (upper case, different from p) pastes the contents of the clipboard before the cursor position. Is that what you're looking for? (I'm not quite sure what you mean when you say you press Command+I, as my keyboard doesn't have a Command key.)
Upvotes: 178