2012-06-12 14 views
9

Recentemente ho passato a PowerShell da quando il mio Cygwin bash ha iniziato a darmi errori di compilazione insensati quando si utilizzava Maven. Ho trovato come salvare e ripristinare la cronologia dei comandi in (https://stackoverflow.com/questions/9259723/is-there-a-windows-shell-tool-can-keep-history), che sembra funzionare (utilizzando "Cronologia" mostrerà i comandi recenti dopo un inizio pulito).Accesso alla cronologia di PowerShell con la freccia su

Quello che non riesco a fare è accedere a questa cronologia con la freccia su come faresti se il comando fosse usato nella sessione corrente.

Qualche idea?

+0

Stai uscendo dalla sessione PS e ricomincia da capo? –

+0

Sì. esci e riavvia. – Siebe

+0

Ho paura che quello che stai chiedendo non esiste. Se non si esce dalla sessione, la funzionalità della freccia su viene fuori dalla scatola come in _cmd.exe_ anche. –

risposta

2

Non è possibile. Non ci sono API per accedere alla cronologia di un programma di console.

+0

In effetti sembra che non sia possibile. vabbè, immagino che andrò a debuggare Cygwin allora, o semplicemente fare un batch per avvolgere i comandi, come digitare 3 comandi di linea ogni volta che avvio è un dolore totale. – Siebe

+0

È anche possibile eseguire una funzione di PowerShell. Puoi metterlo nel tuo profilo per averlo ogni volta che avvii PS. – Joey

+1

A partire da ottobre 2013, questo è finalmente possibile utilizzando il meraviglioso modulo PSReadLine: https://github.com/lzybkr/PSReadLine (vedi risposta alternativa) – jhclark

19

Suggerirei di uccidere questa vecchia abitudine (lo so, muoiono duramente) e di utilizzare la funzionalità specifica di PowerShell che è stata creata per questo. In effetti è davvero fantastico. Questo è # * [scheda], ci sono 2 opzioni qui (scheda tra parentesi ([tab]) significa che il pulsante di scheda deve essere premuto):

#pattern_from_command[tab] 

- cicli> PowerShell attraverso tutti i comandi della storia che contengono "pattern_from_command".

-> EG: In PowerShell: digitare #echo, premere tab -> Powershell passa attraverso tutti i comandi nella cronologia che contengono "echo" (ovviamente se presente).

#<id>[tab] 

-> PowerShell completa dei comandi con id < id >.

-> EG: In PowerShell: digitare # 3, premere scheda -> Powershell scrive il terzo comando (3) nella cronologia a riga di comando (sebbene non eseguirlo direttamente, è sufficiente premere Invio per eseguirlo).

So che non è la stessa cosa che faresti in bash, ma penso che valga la pena provare e abituarsi.

HTH Bartek

+1

Tecnicamente questa è una soluzione al mio problema, ma darò un tiro. Grazie! – Siebe

+3

ma è necessario più premere il tasto e anche non molto conveniente. – netawater

+0

holycrap! santa merda. cacca di hooly. Questo e spettacolare. Come non sapevo di questo. –

6

A partire da ottobre del 2013, questo è ora possibile utilizzare il modulo di meraviglioso PSReadline: http://github.com/lzybkr/PSReadLine

Avrai ancora bisogno di salvare la storia, quando i tuoi PowerShell sessione uscite e caricarlo nel vostro profile.ps1 prima di caricare PSReadline (vedere http://technet.microsoft.com/en-us/library/ee156792.aspx). È possibile registrare un hook per salvare la cronologia quando PowerShell esiste utilizzando un hook come questo: Powershell profile "on exit" event?. A differenza di PowerShell di vaniglia, PSReadLine consente ai tasti su/giù di accedere a questo buffer della cronologia.

+0

Non vedo questa funzione in PSReadline.Aggiunge una funzione di ricerca del modello cronologico della sessione corrente alle frecce su/giù, ma non unisce la cronologia salvata e la cronologia sessione corrente a una singola coda tramite i tasti freccia, a meno che non sia spiegata, ma venga lasciata come esercizio di scripting . Che è ciò che Microsoft ha fatto. –

+0

Charles: True, il caricamento della cronologia non è ancora stato fatto da PSReadline. Senza PSReadline, anche se si carica la cronologia, viene caricata in un buffer separato rispetto a quello utilizzato dalle frecce su/giù, ovvero, se si carica la cronologia, PowerShell tradizionale non può accedervi utilizzando up/down. Con PSReadline, se carichi la cronologia, * è * disponibile usando le frecce su/giù. Quindi, supponendo che tu faccia questo "esercizio di scripting" in 2 righe, PSReadline ti permette di ottenere questo comportamento. Risposta modificata per chiarire. – jhclark

+0

A partire dall'estate 2014, la gestione della cronologia ora è supportata anche in PSReadline. – jhclark

Problemi correlati