Como posso recuperar um comando de histórico numerado para edição?

15

Eu freqüentemente pesquiso alterações com history | grep 'string'

Eu recebo uma lista de comandos no meu histórico, juntamente com o número da linha do histórico, por exemplo

history | grep 'git'

  755  git status
 1535  git push origin master
 1570  git merge origin/one-146
 1667  git reset --hard origin/master

Agora posso recuperar e executar um comando de uma só vez com !nnn , por exemplo:

!755
git status
# On branch master
nothing to commit, working directory clean

Minha pergunta é: Como posso recuperar um comando de histórico numerado e permanecer na linha de comandos para edição e não executá-lo imediatamente 'como está', do jeito que ! faz, então que eu posso mudar algumas coisas por causa do retorno?

    
por Michael Durrant 08.12.2013 / 19:30

4 respostas

9

Desde então, adotei outra abordagem para isso - usando ![line-number]:p

Isso imprime a declaração e a adiciona ao histórico, mas não a executa de fato. Eu então faço seta para cima e mudo como desejar.

Combino isso com meu hg alias ( alias hg='history | grep ' ) para recuperar comandos do histórico com base em algum texto.

Exemplo:

$ hg checkout

17140   git checkout README.rdoc
17143   git checkout master
17201   git checkout README.rdoc
17204   git checkout master
17923   git checkout .bashrc
18151   git checkout v311

Eu uso isso além de ctrl - r (pesquisa de histórico inverso) porque às vezes eu prefiro ver uma lista imediata de todas as possibilidades para uma dada string apenas a saída em 1 linha que ctrl - r é exibida. Depois de hg [string] , eu faria ![line-number]search_string como no hg checkout mostrado acima.

    
por 16.05.2014 / 00:09
7

Se você definir a opção histverify , por exemplo,

shopt -s histverify

então todas as substituições de histórico são trazidas para edição em vez de serem executadas imediatamente. Você precisaria então pressionar Enter duas vezes ao invés de uma vez depois de digitar !755 para executar o comando.

Você pode enviar um texto arbitrário para a lista de histórico com history -s . Combine isso com fc -nl para listar uma entrada de histórico específica.

history -s "$(fc -nl 755 755)"

pressione Up para recuperar o que é agora a última entrada do histórico.

    
por 09.12.2013 / 00:31
4

Você pode pesquisar através do histórico usando Ctrl + R . Se a entrada do histórico for longa, use o mouse (não o teclado, que interrompe a pesquisa) para copiar e colar parte do comando para editar novamente.

Como @rijsg comentou, você pode usar as setas (esquerda e direita) ou chaves equivalentes para parar a busca e começar a editar.

    
por 08.12.2013 / 19:35
2

Se você configurar seu arquivo .bashrc para usar o editor vi na linha de comando, ele tornará as edições da linha de comando muito menos complexas.

1º, assim que "definir -o vi" estiver ativado, você pode simplesmente pressionar "< esc > k" , então continue batendo "k" para subir o histórico como se fosse, se você passar por uma entrada, use "j" para descer .

NOTA: ao usar o vi, existem dois modos: comando e edição para entrar no modo de comando aperte a tecla ESCAPE KEY ONCE, então a, A, i, I, etc. para inserir.

Almofada de cursor simples no vi: esquerda = h, abaixo = j, acima = k, direita = l link

Eu adicionei todas as entradas necessárias para fazer isso funcionar em: link

Assim, com base nas informações muito úteis acima, Consegui usar "histórico" e RECUPERAR uma linha de "histórico", SEM executá-lo. (obrigado por esse post!)

se shopt estiver listado e histverify está "off" a! irá EXECUTAR imediatamente,

se você adicionou ao seu .bashrc ou digitou: shopt -s histverify ,   então uma ! permite uma edição, por exemplo:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

- > 5

quando eu bato! 5 o seguinte comando aparece, mas NÃO executa

### se histverify estiver "on".

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

Lembre-se que Linus e Richard criaram ferramentas Linux e GNU para aproveitar o UNIX. O editor vi (criado por Bill Joy) é uma das melhores ferramentas para dominar como é em TODAS as distribuições do UNIX  e Linux.

Todos os outros editores da linha de comando precisam ser carregados e requer software adicional. Usando uma GUI no Linux (diferente do Firefox, Thunderbird e OpenOffice) é como rebocar o seu Diesel 4x4 com um Fusca 1968 ... vai funcionar, mas com certeza não faz sentido.

Lembre-se do que Kernigan disse sobre uma GUI, "o que você vê é tudo que você ganha".

    
por 11.06.2016 / 06:47