Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

At the bash prompt the command history can be explored using the up and down arrow keys. (I also often use CTRL+R.) Is it possible to do this without replacing the character string to the left of the cursor.

For example, I may have found two files using ls:

$ ls ../../blah/foo/bar/CMakeLists.txt

$ ls /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

I'd now like to shunt the second path into the first file. I begin by pressing the up arrow; then CTRL+A; and removing ls from the start using delete:

$ /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

I'd now like to use >> to append this path to the CMakeLists.txt file; which I will later edit from within a text editor. The command I'd like to create is:

$ echo /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h >> ../../blah/foo/bar/CMakeLists.txt

It would be nice if I could scroll interactively through the history to locate the CMakeLists.txt path while leaving the .../c++config.h part untouched.

One possibility would be to use !! and !-N event designators, but if possible I'd much prefer something interactive; such as the up and down arrows; or CTRL+R.

share|improve this question
add comment

2 Answers

up vote 2 down vote accepted

(I'll use the key nomenclature used in the Readline documentation, namely that the Control key is represented by a C, so C-k is CTRL-K)

Find the first one with C-r, then C-d or Del 3 times to delete the ls. Then C-k to kill (cut) the rest of the line. Then C-r to search for the other one. C-e to move to the end of the line. Type >>. Then C-y to yank (paste) in the first path.

So, C-k (kill) and C-y (yank) are probably your best tools for this job.

share|improve this answer
    
This is great: I didn't know about yank and kill. –  user74094 Jul 11 '13 at 22:28
add comment

If you are familiar with vi, you can set bash to vi mode with set -o vi and then use regular vi commands.

For example in your case f.y$ to yank the path in the first command line, then go the the next line with j, type $p to append the previously yanked text at the end of the line and finally clean-up the line with 0cwecho<esc>f a>><esc>

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.