No bash, como você exclui uma palavra parcial semelhante a ctrl-w

2

Digamos que eu tenha um diretório com um arquivo nele mylongfilename.blahdeblah.txt agora as teclas digitadas mv [tab] [tab] vai resultar em mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt na minha linha de comando

O que eu gostaria de fazer agora é digitar algo no lugar do segundo blahdeblah Se eu acertar o ctrl-b algumas vezes, voltarei ao. antes de .txt Neste ponto eu quero digitar algo como ctrl-w para excluir o anterior. Ou seja, eu acabaria com mv mylongfilename.blahdeblah.txt mylongfilename..txt

Existe um pressionamento de tecla similar ao ctrl-w que fará isso? (Ctrl-w irá apagar para o espaço anterior - não o que eu quero)

    
por nevster 07.06.2009 / 13:48

5 respostas

3

Você parece estar no modo emacs. Para fazer o que você quer lá, isso funciona:

meta-backspace

(Estritamente falando é M-Del. Veja esta página para mais atalhos de teclado do Emacs. Penso que o modo emacs do Bash suporta todos eles, mas suporta este.)

telemachus ~ $ mv mylongfilename.blahblah.txt mylongfilename.|.txt

O canal mostra que o cursor acabou.

    
por 07.06.2009 / 14:14
2

Bash tem os modos emacs e vi. No modo vi, simplesmente dw para delete word, ou cw para change word. defina -o vi para entrar no modo vi. Provavelmente há um equivalente no modo emacs.

man readline é a referência para o teclado do bash e as edições específicas do bash para readline estão no man bash.

    
por 07.06.2009 / 14:10
1

Do homem bash:

COMP_WORDBREAKS
    The set of characters that the Readline library treats as word separators when
    performing  word  completion.   If COMP_WORDBREAKS is unset, it loses its special
    properties, even if it is subsequently reset.

Alterar isso deve alterar os caracteres usados como quebras de palavras, portanto, se você adicionou '.' para o seu valor atual, então Ctrl-w iria apagar de volta para o '. em vez de voltar ao espaço anterior.

    
por 07.06.2009 / 14:17
1

Você pode tentar trocar as palavras para colocar a parte blahdeblah no final da linha (com Esc-T) e, em seguida, remover o final da linha:

  • mv [tab] [tab]

    mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt

  • [Esc-T] (troca as últimas duas palavras antes do cursor)

    mv mylongfilename.blahdeblah.txt mylongfilename.txt .blahdeblah

  • [Ctrl-w]

    mv mylongfilename.blahdeblah.txt mylongfilename.txt

por 07.06.2009 / 14:26
0

Supondo que você tenha algumas operações 'mv' para fazer nesse diretório, por que não escrever um pequeno script de tradução usando, digamos, 'sed'?

Você encontrará alguns truques aqui . Mas não deixe que isso limite você, mas todos os meios de procurar mais sed e awk também.

    
por 07.06.2009 / 14:06