No Bash, posso copiar o último argumento digitado para a posição do cursor?

5

Suponha que eu tenha o seguinte no meu terminal:

> cp my_file_name originals/#

Onde o # representa o cursor.

Existe uma combinação de teclas para inserir my_file_name na posição do cursor, para que eu não precise digitá-lo novamente? Estou ciente de ALT + . para obter o último argumento do comando anterior, mas quero o argumento anterior do comando atual!

    
por Rich 02.09.2010 / 11:40

7 respostas

9

Uma maneira de fazer isso é usar a expansão de chaves :

cp {,originals/}my_file_name
    
por 02.09.2010 / 11:58
11

Você pode usar Ctrl + W para cortar o argumento e armazená-lo em sua área de transferência e, em seguida, Ctrl + Y para colar novamente:

cp my_file_nameCtrl+W Ctrl+Y originals/Ctrl+Y
    
por 02.09.2010 / 17:59
5

Uso complicado, mas configuração mais simples:

Você pode ligar um pressionamento de tecla (eu usarei Ctrl - Q ) para a função readline copy-backward-word e faça isso:

Alt - 2 Ctrl - Q Ctrl - y Ctrl - Alt - h

Isso significa:

  • digit-argument copy-backward-word (copie as duas palavras anteriores)
  • yank (colar)
  • backward-kill-word (livre-se da palavra extra)

Para ligar o pressionamento de tecla na linha de comando:

bind '"\C-q": copy-backward-word'

ou adicione isso ao seu ~/.inputrc :

"\C-q": copy-backward-word

Uso mais simples, mas configuração mais complicada:

Você pode fazer essa sequência longa de teclas em uma macro acionada por um pressionamento de tecla (eu usarei Alt - q aqui e usará o Ctrl - q ligação acima):

Em um prompt de shell:

bind '"\eq": "\e2\C-q\C-y\e\C-h"'

ou no seu ~/.inputrc :

"\eq": "\e2\C-q\C-y\e\C-h"

Lembre-se, você também precisará ligar Ctrl - q como acima.

Agora, para copiar a palavra antes da atual, tudo o que você precisa pressionar é Alt - q .

    
por 02.09.2010 / 17:23
1

Aqui está outra maneira, embora eu não esteja certo de por que você está procurando fazer o que você está tentando fazer, já que o nome do arquivo está implícito em seu exemplo de comando cp (e funcionaria como esperado).

> F=my_file_name && cp $F Workspace/$F

Isso também pode ser expandido para renomear o arquivo:

> F=my_file_name && cp $F Workspace/$F.new
    
por 02.09.2010 / 15:19
0

Você pode tentar isso:

cp my_file_name Ctrl + W Ctrl + Y originals/ Ctrl + Y

Mas isso não funciona quando você já está no final da linha. Talvez algo semelhante possa funcionar embora. (e com cópia, não cortada)

Edite: Tente Alt + B , Ctrl + W , Ctrl + Y , End , Ctrl + Y - uma solução complicada!

    
por 02.09.2010 / 11:52
0

Eu tenho isso no meu ~/.inputrc :

"\ej":"!#:$\e^"

!# é a linha atual, :$ é a última palavra e \e^ é history-expand-line .

    
por 08.04.2017 / 05:27
0

Faça assim:

    cp my_file_name originals/!#:1

! # é a linha atual,: 1 é o primeiro argumento.

    
por 29.01.2018 / 08:35

Tags