Modifica l'ordine del recupero della cronologia dei comandi della shell di Windows


7

Una delle cose che mi fa impazzire nella riga di comando in MS-Windows è l'ordine in cui la shell di Windows (sia quella standard che PowerShell) recupera i comandi dalla cronologia quando si utilizzano i tasti freccia su e giù.

Il modo standard in cui mi è piaciuto, come avviene praticamente in tutte le altre shell del mondo, è che l'ultimo comando viene inserito nello stack della cronologia, quindi premendo su si recupera l'ultimo comando che ho eseguito, "su" di nuovo recupererà quello precedente e così via. Se si sceglie un comando dalla cronologia e lo si invia di nuovo, il comando viene copiato nella parte superiore dello stack e se si preme verso l'alto al prompt successivo, è possibile visualizzare l'ultimo comando e quindi il comando precedente all'ultimo. Se dopo aver sfogliato la cronologia, premi "giù" oltre il comando più recente nello stack della cronologia, verrai reindirizzato al tuo prompt vuoto (o qualunque cosa avessi prima di iniziare la cronologia di esplorazione).

Nella shell di Windows funziona in modo strano: se nella cronologia sono presenti 3 comandi, ad esempio chiamiamoli "A", "B" e "C" - e si utilizza il tasto freccia su per selezionare il comando "B" ed eseguire di nuovo, quindi utilizzare nuovamente il tasto freccia su al prompt successivo, la shell visualizzerà "B". Ma questo non è l'ultimo comando che hai eseguito (anche se "B" è stato effettivamente copiato nuovamente nello stack della cronologia) come se premi di nuovo "su" ti verrà mostrato "A" e non "C". Se scorri verso il basso (per le voci successive) vedrai di nuovo "B", seguito da "C" quindi seguito da "B", che è stato l'ultimo comando inserito - ma non puoi andare oltre: lì '

La mia domanda: esiste qualche impostazione che è possibile impostare per modificare questo comportamento?

Sono consapevole dell'opzione di ottenere bash o qualcosa del genere e usarlo su Windows, ma a causa di vincoli esterni (come in - è quello di cui ho bisogno per scrivere i miei script), devo lavorare in PowerShell o in un altro Windows shell che può invocare gli script di PowerShell.


Direi che la risposta è "probabilmente no".

Non riesco a risolvere il tuo problema principale, ma una scorciatoia da ricordare è premere CRTL-Home per cancellare la riga corrente.
zdan,

A proposito, questo è un altro esempio del perché rendere PowerShell completamente basato sugli oggetti non è stata una buona idea: introducendo nuovi meccanismi complessi introducete anche nuovi comportamenti frustranti e casi limite.
Guss,

Sono d'accordo che è esasperante quando sei abituato a un prompt * nix, ma penso che ci sia una logica. Credo che "ti riporti" al comando nello stack, quindi stai semplicemente navigando su e giù nell'elenco. Non aggiunge un nuovo elemento in fondo e ti porta lì, a meno che non cambi qualcosa o digiti qualcosa di nuovo. Una volta che ricordi di starci nella storia, puoi abituarti. Ma è un cambiamento molto difficile per la memoria muscolare!
scipilot,

Risposte:


5

C'è un modo diverso di controllare lo stack della cronologia, non è quello che volevi, ma è un'opzione diversa che dovresti provare.

In Proprietà (o Predefinito) quando si fa clic con il pulsante destro del mouse nell'angolo in alto a sinistra, è presente l'opzione "Elimina vecchi duplicati" e lo stack cambierà il suo comportamento.

nel tuo esempio esibendosi "A", "B", "C". e poi due volte per eseguire "B", lo stack apparirà: "B","C","A" (first up will be "B")


1
Non è esattamente quello che volevo, ma è così vicino che non importa molto - la mia lamentela principale è che premere FRECCIA SU dopo aver eseguito un comando dalla cronologia non ripristina la "voce della cronologia corrente" in "dopo l'ultima voce" ma a "dopo l'ultima voce selezionata" (ma prima di quella successiva). Questo risolve il problema mantenendo il cursore della cronologia virtuale "dopo l'ultima voce selezionata", ma spostando tale voce alla fine, facendo sì che anche il cursore della cronologia sia "dopo l'ultima voce". Grazie!
Guss,

A metà strada, ma è molto meglio. Grazie Ofir!
km

3

Inoltre, non dimenticare F7. Questo apre un DOSmenu in stile che mostra la cronologia dei comandi (ESC per farlo sparire). Verrà mostrato il comando "ultimo" immesso o selezionato con la freccia su, quindi vedrai immediatamente dove ti trovi nel contesto della freccia su / giù.

Apparentemente questo deriva da qualcosa chiamato DOSKEY , un'utilità scarsamente documentata. Ad esempio, oltre a su, giù e poi invio per eseguire il comando, ho scoperto che un tasto freccia destra o sinistra lo metterà al prompt senza eseguire (quindi è possibile modificarlo). PgUp / PgDn / Home / End navigherà nell'elenco in modo ovvio e ho appena scoperto (non l'ho visto documentato da nessuna parte) che se si preme la prima lettera di un comando, scorrerà i comandi che iniziano con quella lettera ( quindi immettere un comando come ze fun start now!per passare a quel punto della storia facilmente premendo zin teh F7).

Forse però, se si prevede di rivivere gran parte della storia, è meglio farlo

doskey /history > editme.bat

di subire le imbragature e le frecce e copiare / incollare da detto disco (o fare in modo che i tuoi servi lo modellino in una sceneggiatura).

Ci sono un paio di altri trucchi del prompt dei comandi nell'articolo di Joel Spolsky probabilmente non sono ampiamente conosciuti. Non sapevo dell'espansione dei caratteri jolly, quindi puoi usare il completamento della scheda digitando gli ultimi caratteri di un nome o il mezzo.

Trovo pittoresco il prompt di Windows, ma lo considero un vicolo cieco e imparo tali curiosità solo quando sembra che ridurrà la mia interazione con esso. Data l'opportunità, credo che sia meglio installare Cygwin per ottenere una shell più espressiva e un ambiente meno fastidioso, nonché competenze e script che sarai in grado di utilizzare altrove.


1. Grazie - Non ero a conoscenza di F7 e sembra utile - se non altro per ridurre l'orribile confusione che è la navigazione della cronologia della console di Windows. 2. il doskeycomando non funziona per me, probabilmente perché sto usando PowerShell e non cmd.exe (vedi OP). 3. Il link che hai fornito non è per Joel Spolsky, ma il suo co-cospiratore Jeff Atwood. È comunque un ragazzo fantastico, e le informazioni sono utili anche se relative solo a cmd.exe - quindi grazie ancora. 4. Infine, per quanto riguarda Cygwin, vedere l'ultimo paragrafo del PO. \ n \ n Sembra che non mi sia rimasta altra alternativa che girare la mia console.
Guss,

È così meravigliosamente retrò! Lo adoro. Sono contento che si siano presi la briga di tenerlo su PS.
scipilot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.