Vim Tips Wiki
Advertisement

Previous TipNext Tip

Tip: #344 - Cut or copy lines without counting the lines

Created: October 15, 2002 11:57 Complexity: basic Author: Kdr Version: 5.7 Karma: 126/53 Imported from: Tip#344

If you ever need to cut / copy / delete / paste lines without knowing the actual number of lines, here is what you should do.


1. In the command Mode, Go to the beginning of the first mark (lets say line 50).

2. Type: mk

3. Go to the end of your selection (lets say 100), using j's or Ctrl -F or anything. You don't need to count the lines.

4. Type: "ay'k (i.e. Double Quotes, <reg name from a-z>, <y-yank or d-delete>, single quote, k

5. The above command copies those lines into register a.

6. If you do "ad'k , it will delete them from the current location and copies them into register a.

7. You can paste those lines wherever you want just as you print from registers, i.e. "ap


I use this a lot, since I don't need to count the number of lines.


-Kdr

Comments

Be sure to check out visual mode. V will allow to select a range of lines, which you can then "ay, etc. This is one of the coolest features of vim.

tunacat--AT--yahoo.com , October 15, 2002 18:13


A related thought: I like to think of " as into and ' as till. So, something like "ay'k can be thought of as "into a yank till k"

Feral--AT--firetop.dontspamme.com , October 15, 2002 19:33


I normally don't count the lines, but use a range using line numbers like ".,100y" ('.' means line number at cursorpos). The range can be relative (".,+5"), of course you know the number of lines then. So I don't have to move the cursor around just for yanking and put it again to the position whre I want to drop the lines.

Visual marking with the mouse is a powerful alternative, because you don' have to copy/delete complete lines. You also can visually mark rectangle blocks of text by pressing <CTRL-V> in visual mode.

Remember: VIM automatically copies the visually marked text, so you can simply drop it by clicking the middle mouse button at cursor position without using named registers.

ramming--AT--web.de , October 15, 2002 23:24


Vim doesn't automatically copy the selected text unless 'clipboard' and 'guioptions' settings have specific values. (I believe they are autoselect and a, respectively.)

Anonymous , October 17, 2002 6:02


h guioptions

only 'a' needs to be added. my 'guioptions=gmrLtTa', clipboard is empty.

Anonymous , October 22, 2002 3:17


Other good way is use / to find the place to which delete/copy, e.g., d/This sentence should be left<CR>. For smaller deletes, dt<letter> and df<letter> are also useful.

Anonymous , October 23, 2002 1:24


An easier-to-remember way: Forget about registers. Go to desired start line, hit ma ("mark this line as 'a'"), then go to desired end line, and hit y'a or d'a ("yank or delete to the line marked 'a'"). Paste using p.

A character-level way: (not line-level) Go to desired start character, hit ma (same as above), then go to desired end character (can be in a different line), and hit y`a or d`a (notice that it's the "tick", not the "apostrophe"). Paste using p.

sjspam at geeky point net , December 21, 2002 22:27


If you need to select a series of consecutive lines, type V}

Lyle

lylez--AT--kc.rr.com , January 21, 2003 21:31


I don't get it. Why would I use this incredibly convoluted method instead of just using visual mode?


Anonymous , January 20, 2004 6:50


Less keystrokes of course :)

Anonymous , February 23, 2004 11:19


Go to the start of block mark it as `mx` ( mark to buffer x ) then go to the end of block which you want to copy or delete and mark it as `my` ( mark to buffer y), do `x ( this moves to mark x i.e., start of block) and they do y`y ( copy the block) or d`y (delete the block)

I find it helpful and saves a lot of time

ls_manian At yahoo.com , July 1, 2004 2:31


Advertisement