Uma maneira de fazer isso é usar a expansão de chaves :
cp {,originals/}my_file_name
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!
Uma maneira de fazer isso é usar a expansão de chaves :
cp {,originals/}my_file_name
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
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 .
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
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!
Eu tenho isso no meu ~/.inputrc
:
"\ej":"!#:$\e^"
!#
é a linha atual, :$
é a última palavra e \e^
é history-expand-line
.
Faça assim:
cp my_file_name originals/!#:1
! # é a linha atual,: 1 é o primeiro argumento.
Tags bash