Eu estava apenas digitando algo como:
mv foo/bar/poit/zoid/narf.txt
e de repente percebi, caramba, eu tenho que digitar grandes partes desse parâmetro novamente
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
Mesmo com a conclusão incompleta, muita dor. Sei que posso copiar e colar o parâmetro, selecionando o texto e clicando com o mouse, mas isso não é bom o suficiente. Eu quero permanecer no teclado.
Então, existe uma maneira de copiar e colar o parâmetro atual da linha usando o teclado?
bash
readline
line-editor
k0pernikus
fonte
fonte
mv foo/bar/poit/zoid/{narf.txt,troz.txt}
vez de digitar / copiar o endereço longo duas vezes.mv foo/bar/poit/zoid/{narf,troz}.txt
. Isto funciona especialmente bem se tivermos algo como.../zoid/this_source_file_has_to_be_patched.c{,.orig}
Respostas:
Se planejei com antecedência, uso a expansão de chaves . Nesse caso:
Aqui está outra abordagem usando os
readline
atalhos de teclado padrão :mv foo/bar/poit/soid/narf.txt
: iniciarunix-word-rubout
para excluirfoo/bar/poit/soid/narf.txt
yank
, espaço,yank
novamente para obtermv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
backward-kill-word
duas vezes para excluir o últimonarf.txt
troz.txt
: digite a parte da cauda que é diferenteSe você gastar algum tempo não trivial usando o
bash
shell, recomendo ler periodicamente uma lista dos atalhos padrão e escolher alguns que parecem úteis para aprender e incorporar à sua rotina. O capítulo 8 dobash
manual é um bom lugar para começar. Conhecer os atalhos pode realmente aumentar sua eficiência.fonte
.txt
, pressione Ctrl + Esquerda (ou qualquer outro atalho que chamabackward-word
), depois Esquerda um caractere, Alt + Backspace e digitetroz
.A expansão do histórico também funciona no comando atual, usando o designador de evento
!#
. Combine isso com a designação de palavra para o último argumento -$
- para obter o parâmetro que você acabou de digitar. E você pode usar todos os modificadores regulares sobre ele; portanto, se, por exemplo, você estiver renomeando um arquivo em um diretório distante, basta digitar:fonte
magic-space
opção do bash no inputrc para expandir automaticamente as expansões do histórico. (Eu não poderia usar a resposta mais votados porque eu definir ^ W para quebrar em barras já que é geralmente mais útil.)alt+backspace
normalmente já pára em separadores de palavras como barras, assim você não precisa mudar a forma como^W
obter essa funcionalidade, você pode ter os dois não-palavra-caráter de exclusão ou espaços em branco delimitado palavrasComo no seu exemplo, você pode usar a próxima construção:
ou mesmo (como sugerido Ansgar Esztermann ):
em vez disso, digite o endereço longo duas vezes.
fonte
Brincando, consegui que isso funcionasse:
Pressione Enter
para armazenar o último parâmetro.
Agora use ↑para ser digitado pela última vez na linha de volta. Digite um espaço e, para obter o último parâmetro usado, use:
Alt + .
Detesto provocar um erro, mas ele faz o trabalho nesse caso de uso.
fonte
Você pode usar facilmente variáveis:
Ou, no seu caso (a competição de guias de notas funciona para uma parte):
fonte
Eu tenho isso no meu
~/.inputrc
:!#
é a linha atual,:$
é a última palavra e\e^
éhistory-expand-line
.fonte
Para
zsh
, acho as seguintes combinações de teclas úteis.Então eu apertei Alt- Mpara repetir o último argumento Alt- Kse eu quiser excluir partes do final de um caminho.
Aqui está uma referência útil para alguns dos comportamentos que você pode mapear.
fonte
Uma solução interativa curta de duas etapas
tipo:
echo foo/bar/poit/zoid/narf.txt
Isso torna
foo/bar/poit/zoid/narf.txt
disponível para o Alt- .atalho no bash.digite:
mv
e sucesso Alt- ., Space, Alt-.Você receberá
mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt
. Agora você pode modificar a última palavra facilmente.Comandante da meia-noite
Essa ferramenta que pode ser (muito) útil é um gerenciador de arquivos em execução no console. Permite copiar nomes de arquivos e caminhos de diretório interativamente na linha de comando. O Midnight Commander mostra, portanto, 2 painéis (esquerdo e direito), que listam o conteúdo de diferentes diretórios.
Um pequeno guia:
Essa é de longe a maneira mais rápida que encontrei até agora - depois que me acostumei com os atalhos.
fonte
Use a mesma coisa no {,} "duplicador". Ou seja:
fonte