Alterar a ordem de recuperação do histórico de comandos do shell do Windows

7

Uma das coisas que me deixam louco na linha de comando do MS-Windows é a ordem em que o shell do Windows (padrão e PowerShell) recupera comandos do histórico quando você usa as teclas de seta para cima e para baixo.

A maneira padrão que eu gostei, como é feito basicamente em todas as outras shells no mundo, é que o último comando é colocado na pilha do histórico, e então pressionar para cima irá recuperar o último comando que eu rodei, "up" novamente recuperará o anterior e assim por diante. Se você escolher um comando do histórico e enviá-lo novamente, o comando será copiado para o topo da pilha e, se você pressionar o próximo prompt, verá o último comando e, em seguida, o comando anterior à última. Se depois de percorrer o histórico você pressionar "para baixo" após o comando mais recente na pilha de histórico, você retornará ao seu prompt vazio (ou o que quer que você tenha lá antes de iniciar o histórico de navegação).

No shell do Windows, funciona estranhamente diferente: se você tem 3 comandos no histórico - por exemplo, vamos chamá-los de "A", "B" e "C" - e você usa a tecla de seta para cima para selecionar o comando "B "e executá-lo novamente e, em seguida, use a tecla de seta para cima novamente no próximo prompt, o shell exibirá" B ". Mas este não é o último comando que você executou (apesar de "B" ter sido copiado de novo para a pilha do histórico), como se você pressionasse "up" novamente, você mostraria "A" e não "C". Se você navegar para baixo (para entradas posteriores) você verá "B" novamente, seguido por "C" e depois por "B" novamente, que foi o último comando digitado - mas você também não pode ir mais longe: não há como voltar atrás para um prompt vazio, exceto excluir o que você tem na linha ou pressionar CTRL-C.

Minha pergunta - existe alguma configuração que pode ser definida para alterar esse comportamento?

Estou ciente da opção de apenas obter bash ou algo parecido e usá-lo no Windows, mas devido a restrições externas (como em - isso é o que eu preciso escrever meus scripts), eu tenho que trabalhar no PowerShell ou outro shell do Windows que pode invocar scripts do PowerShell.

    
por Guss 13.08.2012 / 12:27

2 respostas

5

Existe uma maneira diferente de controlar a pilha do histórico, não é o que você queria, mas é uma opção diferente que você deve verificar.

Em Propriedades (ou Padrão), quando você clica com o botão direito do mouse no canto superior esquerdo, há uma opção "Descartar duplicados antigos" e a pilha mudará seu comportamento.

no seu exemplo, executando "A", "B", "C" . e depois duas vezes para cima para executar "B" , a pilha irá aparecer: "B","C","A" (first up will be "B")

    
por 20.08.2012 / 13:57
3

Além disso, não se esqueça de F7 . Isso mostra um menu DOS -style mostrando o histórico de comandos (ESC para fazê-lo desaparecer). O comando 'last' inserido ou selecionado com a seta para cima será mostrado, assim você verá imediatamente onde você está no contexto de seta para cima / para baixo.

Aparentemente, isso vem de algo chamado DOSKEY , um utilitário mal documentado. Por exemplo, além de cima, baixo e depois entrar para executar o comando, descobri que uma tecla de seta para a direita ou para a esquerda irá colocá-lo no prompt sem executar (para que você possa editá-lo). PgUp / PgDn / Home / End navegará pela lista da maneira óbvia, e eu acabei de descobrir (não vi isso documentado em nenhum lugar) que se você pressionar a primeira letra de um comando, ele irá percorrer os comandos começando com essa letra ( então digite um comando como ze fun start now! para pular facilmente para esse ponto no histórico pressionando z em teh F7 ).

Talvez, se alguém prevê reviver muito da história, pode ser melhor para

doskey /history > editme.bat

do que sofrer as eslingas e flechas, e copiar / colar do referido registro (ou faça com que seus seguidores o usem em um roteiro).

Existem alguns outros truques de prompt de comando no artigo de Joel Spolsky provavelmente não são amplamente conhecidos. Eu não sabia sobre a expansão de curingas, portanto, você pode usar o preenchimento de tabulação digitando os últimos caracteres de um nome ou o meio.

Acho as janelas curiosas, mas considero isso um beco sem saída, e só aprendo essas curiosidades quando parece que isso vai reduzir minha interação com ele. Dada a oportunidade, acredito que é melhor instalar o cygwin para obter um shell de expressão e um ambiente menos irritante, além de habilidades e scripts que você poderá usar em outro lugar.

    
por 06.07.2013 / 21:35