1

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.

asked Jul 11, 2013 at 21:52

2 Answers 2

2

(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.

answered Jul 11, 2013 at 22:19
1
  • This is great: I didn't know about yank and kill. Commented Jul 11, 2013 at 22:28
1

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>

answered Jul 11, 2013 at 22:33

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.