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.

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.

1
  • This is great: I didn't know about yank and kill.
    – user74094
    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>

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .