|
Home | Switchboard | Unix Administration | Red Hat | TCP/IP Networks | Neoliberalism | Toxic Managers |
(slightly skeptical) Educational society promoting "Back to basics" movement against IT overcomplexity and bastardization of classic Unix |
See also VIM visual blocks
Copying and Moving sections of text
Moving text involves a number of commands all combined to achieve the end result. This section will introduce named and unnamed buffers along with the commands which cut and paste the text.
Coping text involves three main steps.
- Yanking (copying) the text to a buffer.
- Moving the cursor to the destination location.
- Pasting (putting) the text to the edit buffer.
To Yank text to the unnamed use [y] command.
yy Move a copy of the current line to the unnamed buffer. Y Move a copy of the current line to the unnamed buffer. nyy Move the next n lines to the unnamed buffer nY Move the next n lines to the unnamed buffer yw Move a word to the unnamed buffer. ynw Move n words to the unnamed buffer. nyw Move n words to the unnamed buffer. y$ Move the current position to the end of the line.The unnamed buffer is a temporary buffer that is easily corrupted by other common commands. On occasions the text may be needed for a long period of time. In this case the named buffers would be used. vi has 26 named buffers. The buffers use the letters of the alphabet as the identification name. To distinguish the difference between a command or a named buffer, vi uses the ["] character. When using a named buffer by the lowercase letter the contents are over written while the uppercase version appends to the current contents.
"ayy Move current line to named buffer a. "aY Move current line to named buffer a. "byw Move current word to named buffer b. "Byw Append the word the contents of the named buffer b. "by3w Move the next 3 words to named buffer b.Use the [p] command to paste the contents of the cut buffer to the edit buffer.
p Paste from the unnamed buffer to the RIGHT of the cursor P Paste from the unnamed buffer to the LEFT of the cursor nP Paste n copies of the unnamed buffer to the LEFT of the cursor "ap Paste from the named buffer a RIGHT of the cursor. "b3P Paste 3 copies from the named buffer b LEFT of the cursor.When using vi within an xterm you have one more option for copying text. Highlight the section of text you wish to copy by dragging the mouse cursor over text. Holding down the left mouse button and dragging the mouse from the start to the finish will invert the text. This automatically places the text into a buffer reserved by the X server. To paste the text press the middle button. Remember the put vi into insert mode as the input could be interpreted as commands and the result will be unknown. Using the same technique a single word can be copied by double clicking the left mouse button over the word. Just the single word will be copied. Pasting is the same as above. The buffer contents will only change when a new highlighted area is created.
Moving the text has three steps.
- Delete text to a named or unnamed buffer.
- Moving the cursor the to destination location.
- Pasting the named or unnamed buffer.
The process is the same as copying with the change on step one to delete. When the command [dd] is performed the line is deleted and placed into the unnamed buffer. You can then paste the contents just as you had when copying the text into the desired position.
"add Delete the line and place it into named buffer a. "a4dd Delete 4 lines and place into named buffer a. dw Delete a word and place into unnamed bufferSee the section on modifying text for more examples of deleting text.
On the event of a system crash the named and unnamed buffer contents are lost but the edit buffers content can be recovered (See Useful commands).
|
Switchboard | ||||
Latest | |||||
Past week | |||||
Past month |
Oct 22, 2018 | superuser.com
greg0ire ,Jan 23, 2013 at 13:29
With vim, how can I move a piece of text to a new file? For the moment, I do this:
- select the text
- use
:w new_file
- select the text again
- delete the text
Is there a more efficient way to do this?
Beforea.txt
sometext some other text some other other text endAftera.txt
sometext endb.txt
some other text some other other textIngo Karkat, Jan 23, 2013 at 15:20
How about these custom commands::command! -bang -range -nargs=1 -complete=file MoveWrite <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _ :command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _greg0ire ,Jan 23, 2013 at 15:27
This is very ugly, but hey, it seems to do in one step exactly what I asked for (I tried). +1, and accepted. I was looking for a native way to do this quickly but since there does not seem to be one, yours will do just fine. Thanks! greg0ire Jan 23 '13 at 15:27Ingo Karkat ,Jan 23, 2013 at 16:15
Beauty is in the eye of the beholder. I find this pretty elegant; you only need to type it once (into your .vimrc). Ingo Karkat Jan 23 '13 at 16:15greg0ire ,Jan 23, 2013 at 16:21
You're right, "very ugly" shoud have been "very unfamiliar". Your command is very handy, and I think I definitely going to carve it in my .vimrc greg0ire Jan 23 '13 at 16:21embedded.kyle ,Jan 23, 2013 at 14:08
By "move a piece of text to a new file" I assume you mean cut that piece of text from the current file and create a new file containing only that text.Various examples:
:1,1 w new_file
to create a new file containing only the text from line number 1:5,50 w newfile
to create a new file containing the text from line 5 to line 50:'a,'b w newfile
to create a new file containing the text from marka
to markb
- set your marks by using ma and mb where ever you like
The above only copies the text and creates a new file containing that text. You will then need to delete afterward.
This can be done using the same range and the
d
command:
:5,50 d
to delete the text from line 5 to line 50:'a,'b d
to delete the text from marka
to markb
Or by using dd for the single line case.
If you instead select the text using visual mode, and then hit
:
while the text is selected, you will see the following on the command line:
:'<,'>
Which indicates the selected text. You can then expand the command to:
:'<,'>w >> old_file
Which will append the text to an existing file. Then delete as above.
One liner:
:2,3 d | new +put! "
The breakdown:
:2,3 d
- delete lines 2 through 3|
- technically this redirects the output of the first command to the second command but since the first command doesn't output anything, we're just chaining the commands togethernew
- opens a new buffer+put! "
- put the contents of the unnamed register ("
) into the buffer
- The bang (
!
) is there so that the contents are put before the current line. This causes and empty line at the end of the file. Without it, there is an empty line at the top of the file.greg0ire, Jan 23, 2013 at 14:09
Your assumption is right. This looks good, I'm going to test. Could you explain 2. a bit more? I'm not very familiar with ranges. EDIT: If I try this on the second line, it writes the first line to the other file, not the second line. greg0ire Jan 23 '13 at 14:09embedded.kyle ,Jan 23, 2013 at 14:16
@greg0ire I got that a bit backward, I'll edit to better explain embedded.kyle Jan 23 '13 at 14:16greg0ire ,Jan 23, 2013 at 14:18
I added an example to make my question clearer. greg0ire Jan 23 '13 at 14:18embedded.kyle ,Jan 23, 2013 at 14:22
@greg0ire I corrected my answer. It's still two steps. The first copies and writes. The second deletes. embedded.kyle Jan 23 '13 at 14:22greg0ire ,Jan 23, 2013 at 14:41
Ok, if I understand well, the trick is to use ranges to select and write in the same command. That's very similar to what I did. +1 for the detailed explanation, but I don't think this is more efficient, since the trick with hitting ':' is what I do for the moment. greg0ire Jan 23 '13 at 14:41Xyon ,Jan 23, 2013 at 13:32
Select the text in visual mode, then press y to "yank" it into the buffer (copy) or d to "delete" it into the buffer (cut).Then you can
:split <new file name>
to split your vim window up, and press p to paste in the yanked text. Write the file as normal.To close the split again, pass the split you want to close
:q
.greg0ire ,Jan 23, 2013 at 13:42
I have 4 steps for the moment: select, write, select, delete. With your method, I have 6 steps: select, delete, split, paste, write, close. I asked for something more efficient :P greg0ire Jan 23 '13 at 13:42Xyon ,Jan 23, 2013 at 13:44
Well, if you pass the split:x
instead, you can combine writing and closing into one and make it five steps. :P Xyon Jan 23 '13 at 13:44greg0ire ,Jan 23, 2013 at 13:46
That's better, but 5 still > 4 :P greg0ire Jan 23 '13 at 13:46 Based on @embedded.kyle's answer and this Q&A , I ended up with this one liner to append a selection to a file and delete from current file. After selecting some lines withShift+V
, hit:
and run:'<,'>w >> test | normal gvdThe first part appends selected lines. The second command enters normal mode and runs
gvd
to select the last selection and then deletes.
Oct 21, 2018 | stackoverflow.com
You are talking about text selecting and copying, I think that you should give a look to the Vim Visual Mode .In the visual mode, you are able to select text using Vim commands, then you can do whatever you want with the selection.
Consider the following common scenarios:
You need to select to the next matching parenthesis.
You could do:
v%
if the cursor is on the starting/ending parenthesisvib
if the cursor is inside the parenthesis blockYou want to select text between quotes:
- vi" for double quotes
- vi' for single quotes
You want to select a curly brace block (very common on C-style languages):
viB
vi{
You want to select the entire file:
ggVG
Visual block selection is another really useful feature, it allows you to select a rectangular area of text, you just have to press Ctrl - V to start it, and then select the text block you want and perform any type of operation such as yank, delete, paste, edit, etc. It's great to edit column oriented text.
Marking text (visual mode)
- v - start visual mode, mark lines, then do command (such as y-yank)
- V - start Linewise visual mode
- o - move to other end of marked area
- Ctrl+v - start visual block mode
- O - move to Other corner of block
- aw - mark a word
- ab - a () block (with braces)
- aB - a {} block (with brackets)
- ib - inner () block
- iB - inner {} block
- Esc - exit visual mode
Visual commands
- > - shift right
- < - shift left
- y - yank (copy) marked text
- d - delete marked text
- ~ - switch case
Cut and Paste
- yy - yank (copy) a line
- 2yy - yank 2 lines
- yw - yank word
- y$ - yank to end of line
- p - put (paste) the clipboard after cursor
- P - put (paste) before cursor
- dd - delete (cut) a line
- dw - delete (cut) the current word
- x - delete (cut) current character
typing : would add the block to ex command line and low you touse ex commans with the block inclide mo command is :'<,'> mo 15. This means move visual blok toposition after line 15. the target can be bookmark
:'<,'> mo mark aUsing registers to moving blocks
"<letter>y
7 uu Making it even quicker:
6
5 If +y and "+p are too many keypresses, we can easily remap
4 the copy and paste commands.
3
2
1 vnoremap <C-c> "+y
map <C-fc "+p
1 ...
2
3 You might want to consider using P instead of p.
4
5 For copying to both the clipboard and primary selection.
6
7 ... ... ...
8 vnoremap <C-c> "*y :let @+=@**<CR>
9
0
Google matched content |
[Oct 22, 2018] move selection to a separate file Published on Oct 22, 2018 | superuser.com
Society
Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers : Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism : The Iron Law of Oligarchy : Libertarian Philosophy
Quotes
War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda : SE quotes : Language Design and Programming Quotes : Random IT-related quotes : Somerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose Bierce : Bernard Shaw : Mark Twain Quotes
Bulletin:
Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 : Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law
History:
Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds : Larry Wall : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOS : Programming Languages History : PL/1 : Simula 67 : C : History of GCC development : Scripting Languages : Perl history : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history
Classic books:
The Peter Principle : Parkinson Law : 1984 : The Mythical Man-Month : How to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Haters Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite
Most popular humor pages:
Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor
The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D
Copyright © 1996-2021 by Softpanorama Society. www.softpanorama.org was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.
FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.
This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...
|
You can use PayPal to to buy a cup of coffee for authors of this site |
Disclaimer:
The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the Softpanorama society. We do not warrant the correctness of the information provided or its fitness for any purpose. The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.
Last modified: February 19, 2020