Como recuperar um comando anterior (sem execução) para alterá-lo?

12

Não consigo lembrar o truque em que consegui o último comando sem executá-lo:

digamos que eu queira ser capaz de acessar o comando! 1255 ao pressionar a tecla de seta para cima e modificar o comando. Então, qual é o truque para chamar o comando, fazê-lo ser mostrado na linha de comando, mas não executado e depois acessível através da seta para cima?

Eu tentei colocar um eco, mas depois eu tenho um eco antes do comando, não me lembro como fazê-lo corretamente.

    
por Arturas M 09.10.2015 / 22:12

5 respostas

19
!1255:p

Isso será feito

! é a rechamada da história
1255 é o número da linha que% :p imprime, mas não executa

Em seguida, você pode usar a seta para cima para obter o comando anterior (não executado) de volta e alterá-lo conforme necessário.

Costumo combinar isso com hg ("Histórico Grep") - meu alias favorito.

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

Isso procura texto em uma linha do histórico recente, independentemente do caso, e é usado desta maneira:

Quando quero procurar comandos vi recentes para editar um determinado arquivo e, em seguida, quero reutilizar um deles para editar o mesmo arquivo, mas com uma extensão de arquivo diferente.

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

Eu também defino hga ("Histórico Grep All") para pesquisar toda a minha história:

$ alias hga
alias hga='history | grep -i'

mas eu não uso muito porque minha história é (intencionalmente) muito grande e eu recebo muita saída que depois afeta a rolagem de volta através de páginas no meu terminal.

    
por 09.10.2015 / 22:34
12

Pressionando Ctrl + R (que é a vinculação de chave de busca incremental inversa do emacs como @gnp apontada nos comentários) no terminal permite que você pesquise o histórico de um comando específico. O comando será mostrado e pode ser editado antes da execução. Você verá algo assim:

Fonte

    
por 09.10.2015 / 22:43
7

o comando fc faz o que você quer

fc -l <number> listará o histórico de comandos em torno desse número

fc <number> abrirá essa entrada de linha de comando em vim (ou seja qual for o editor padrão, assim você poderá editá-la e, sobre :wq , estará disponível para você com a seta para cima. / p>     

por 09.10.2015 / 22:28
7

No bash Ctl+alt+e a expansão do shell, digitando !1255 e pressionando essa combinação substituirá a linha atual pelo conteúdo da entrada do histórico 1255

    
por 09.10.2015 / 22:42
4

Você deseja usar o comando fc ao especificar a lista em vez de executar (-l)

fc -ln -1
    
por 09.10.2015 / 22:30