How to use arguments from previous command?

前端 未结 11 1790
一个人的身影
一个人的身影 2020-12-04 04:35

I know that Esc + . gives you the last argument of the last command.

But I\'m interested in first argument of the last command. Is there a key

11条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-04 05:09

    Just as M-. (meta-dot or esc-dot or alt-dot) is the readline function yank-last-arg, M-C-y (meta-control-y or esc-ctrl-y or ctrl-alt-y) is the readline function yank-nth-arg. Without specifying n, it yanks the first argument of the previous command.

    To specify an argument, press Escape and a number or hold Alt and press a number. You can do Alt--to begin specifying a negative number then release Alt and press the digit (this will count from the end of the list of arguments.

    Example:

    Enter the following command

    $ echo a b c d e f g
    a b c d e f g
    

    Now at the next prompt, type echo (with a following space), then

    Press Alt-Ctrl-y and you'll now see:

    $ echo a
    

    without pressing Enter yet, do the following

    Press Alt-3 Alt-Ctrl-y

    Press Alt-- 2 Alt-Ctrl-y

    Now you will see:

    $ echo ace
    

    By the way, you could have put the echo on the line by selecting argument 0:

    Press Alt-0 Alt-Ctrl-y

    Edit:

    To answer the question you added to your original:

    You can press Alt-0 then repeatedly press Alt-. to step through the previous commands (arg 0). Similarly Alt-- then repeating Alt-. would allow you to step through the previous next-to-last arguments.

    If there is no appropriate argument on a particular line in history, the bell will be rung.

    If there is a particular combination you use frequently, you can define a macro so one keystroke will perform it. This example will recall the second argument from previous commands by pressing Alt-Shift-Y. You could choose any available keystroke you prefer instead of this one. You can press it repeatedly to step through previous ones.

    To try it out, enter the macro at a Bash prompt:

    bind '"\eY": "\e2\e."'
    

    To make it persistent, add this line to your ~/.inputrc file:

    "\eY": "\e2\e."
    

    Unfortunately, this doesn't seem to work for arg 0 or negative argument numbers.

提交回复
热议问题