símbolo do shell para o item recém digitado anteriormente?

5

Existe uma maneira que eu possa especificar para basear a reutilização do item que eu acabei de digitar? Por exemplo, se eu quiser renomear um arquivo, adicionando alguns caracteres como prefixo, quero fazer algo como

$> mv file.txt new_{prev}

e termine com new_file.txt .

Existe tal símbolo?

    
por user394 25.01.2012 / 19:22

3 respostas

11

Você pode usar chaves ( {} ), mas de uma maneira um pouco diferente. Nas chaves, prefix{x,y,z...}suffix expandirá para colocar cada parte separada por vírgula entre prefix e suffix :

$ mv {,new_}file.txt

Isso expandirá para mv file.txt new_file.txt . Você também pode fazer isso com intervalos de números ou letras, {a..d} expandirá para a b c d , {1..4} será expandido para 1 2 3 4 . Você pode usar apenas um ou outro dentro de um nível de chaves, mas você pode aninhar:

$ echo {a,c,{1..3}}
a c 1 2 3

Para saber mais sobre a expansão de chaves, consulte esta pergunta: suporte a expansão de outros comandos além do mkdir?

    
por 25.01.2012 / 19:43
7

Você pode definir uma função de edição que copia a palavra anterior sob o cursor.

copy_preceding_word () {
  local prefix suffix word
  prefix="${READLINE_LINE:0:$READLINE_POINT}"
  suffix="${READLINE_LINE:$READLINE_POINT}"
  if [[ $prefix =~ ([^[:space:]]+)[[:space:]]+[^[:space:]]*$ ]]; then
    word=${BASH_REMATCH[1]}
    READLINE_LINE="$prefix$word$suffix"
    ((READLINE_POINT += ${#word}))
  fi
}
bind -x '"\e\C-_": copy_preceding_word'
    
por 26.01.2012 / 01:52
1

Eu tenho isso no meu ~/.inputrc :

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

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

    
por 16.06.2014 / 02:58

Tags