Cut and paste multiple lines in vim

前端 未结 5 1326
旧时难觅i
旧时难觅i 2021-01-30 03:03

I\'m running vim 7.3 on a Mac 10.7.2 and I\'m having some trouble cutting and pasting several lines.

On my old Linux setup (which was stolen so I don\'t know versions)

相关标签:
5条回答
  • 2021-01-30 03:27

    You could type:

    d<n>d
    

    where <n> is the number of lines that you want to cut, and then you could paste them with:

    p
    

    For example, to cut and paste 3 lines:

    d3d
    p
    
    0 讨论(0)
  • 2021-01-30 03:33

    Have you considered using visual mode?

    You could just go:

    • Press V
    • Select everything you want to cut without counting
    • Press d
    • Go to where you want to paste
    • Press p

    This should yield approximately half as many keystrokes as the dd method since you press one key per line rather than two. Bonus points if you use 5j (or similar) to select multiple lines at a time.

    0 讨论(0)
  • 2021-01-30 03:33

    To cut and paste by line numbers (do :set number to see the line numbers), for lines x to y do:

    :x,yd
    

    or if your cursor is already on line x, do

    :,yd
    

    Then go to where you want to paste and press p

    0 讨论(0)
  • 2021-01-30 03:37

    Not sure if this is close enough to what you're trying, but one thing you could do is use a specific register, and capitalize your register name. That tells vim to append to the register rather than replace it, so if you have the lines:

    one
    two
    three
    

    you can enter

    "qdd
    "Qdd
    "Qdd
    

    and then subsequently if you enter

    "qp
    

    it will paste back the original lines

    0 讨论(0)
  • 2021-01-30 03:49

    I agree with @Ben S. that this is the preferred way to accomplish this but if you are just looking to replicate your old behavior you can remap dd to append to a specified register, and then map p to paste from that register and clear it.
    This will have the disadvantage of causing p to only work with things deleted using dd (using d} to delete to the end of the paragraph would not put the text in the correct register to be pasted later).

    Add the following to your vimrc

    noremap dd "Ddd             "Appends the contents of the current line into register d
    noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out
    

    if you don't want pasting to clear out the contents of the register

    noremap p "dp               "Paste from register d 
    

    but this will cause that register to grow without ever clearing it out

    0 讨论(0)
提交回复
热议问题