como recuperar o último argumento no bash com vi setting

7

Eu uso a configuração set -o vi no bash. O atalho Alt+. (lembrando o último argumento do comando anterior) aqui não funciona como no modo emacs, então qual é o equivalente para o vi?

    
por Kossak 15.09.2014 / 15:51

2 respostas

4

Adicione esta linha depois de set -o vi :

bind -m vi-command ".":yank-last-argument # or insert-last-argument

Então você pode usar Alt + . como no modo emacs.

Ou use a expansão do histórico, trabalhando em ambos:

!$:p
    
por 15.09.2014 / 15:59
9

Existem vários métodos para obter o último argumento do último comando:

1. inputrc: insert-last-argument & yank-last-arg

Copie o seguinte código no seu arquivo ~/.inputrc

set editing-mode vi
# Insert Mode
set keymap vi-insert
"\e.":yank-last-arg
"\e_": yank-last-arg

Você pode usar o meu arquivo inputrc . E aqui o manual do inputrc para insert-last-argument e yank-last-arg

2. Designadores de palavras: !!: $ & ! $

Por exemplo:

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !$
echo arg5
arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:$
echo arg5
arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:^
echo arg1
arg1

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:2-4
echo arg2 arg3 arg4
arg2 arg3 arg4

O manual do Designador de palavras da Shell mostra:

!!:$

designates the last argument of the preceding command. This may be shortened to !$.

0 (zero)

The 0th word. For many applications, this is the command word.

n

The nth word.

^

The first argument; that is, word 1.

$

The last argument.

%

The word matched by the most recent ‘?string?’ search.

x-y

A range of words; ‘-y’ abbreviates ‘0-y’.

*

All of the words, except the 0th. This is a synonym for ‘1-$’. It is not an error to use ‘’ if there is just one word in the event; the empty string is returned in that case. x

Abbreviates ‘x-$’

x-

Abbreviates ‘x-$’ like ‘x*’, but omits the last word.

3. Parâmetros especiais da shell: $ _

Por exemplo:

┌─ (marslo@MarsloJiao ~) ->
└─ # echo very-very-very-very-very-long-argument
very-very-very-very-very-long-argument

┌─ (marslo@MarsloJiao ~) ->
└─ # echo $_
very-very-very-very-very-long-argument

┌─ (marslo@MarsloJiao ~) ->
└─ # ls /usr/local/etc/

┌─ (marslo@MarsloJiao ~) ->
└─ # cd $_

┌─ (marslo@MarsloJiao /usr/local/etc) ->
└─ #

No manual de Parâmetros especiais da Shell :

_

(An underscore.) At shell startup, set to the absolute pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Subsequently, expands to the last argument to the previous command, after expansion. Also set to the full pathname used to invoke each command executed and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file.

    
por 23.09.2014 / 11:47