Verzeichnisverzeichnis in zsh

10

Ich benutze es zshseit einiger Zeit gerne und bin sehr zufrieden mit meinen Verlaufseinstellungen:

# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups

Es kommt jedoch häufig vor, dass ich bestimmte Befehle in bestimmten Verzeichnissen verwenden muss. Wenn ich zum Beispiel ~/my_projectdrin bin, rufe ich normalerweise an make target1 && ./run1, aber wenn ich drin ~/second_projectbin, brauche ich normalerweise make target2 && cat foobar | ./run2.

Das heißt: verschiedene Verzeichnisse, aber ähnliche Befehle.

Also tippe ich normalerweise cd ~/my_projectund tippe makeund suche dann rückwärts in der Geschichte, bis ich finde, was ich brauche. Aber wenn es passiert, dass ich gearbeitet habe second_project, finde ich beim Durchsuchen des Verlaufs einige Befehle, die ich nicht benötige.

Meine Frage: Gibt es ein Plugin / einstellung / etwas für zsh, sodass bei der Suche im Verlauf zuerst die im aktuellen Verzeichnis aufgerufenen Befehle angezeigt werden?

Im Idealfall wird jeder zweite übereinstimmende Verlaufsbefehl nach diesen angezeigt, wobei optional eine maximale Anzahl von Prioritätselementen angegeben wird.

Ich würde versuchen, so etwas selbst zu schreiben, aber ich weiß immer noch nicht, wie man benutzerdefinierte zsh-Plugins schreibt, wie man mit Verlauf umgeht und so weiter.

AkiRoss
quelle

Antworten:

6

Es gibt ein Plugin, das behauptet, genau das zu tun, wonach Sie suchen, und das entsprechend dem Verzeichnisverlaufs-Plugin entsprechend benannt ist :

https://github.com/jimhester/oh-my-zsh/commit/baa187e4b903f39422a84b580e6e617ec3738e09

"Pro-Verzeichnis-Verlauf - Verfolgt den vorherigen Befehlsverlauf sowohl pro aktuellem Verzeichnis als auch global, mit der Möglichkeit, im laufenden Betrieb zwischen ihnen zu wechseln, gebunden an Strg-G." sagt ihr Wiki.

Ich habe es (noch) nicht selbst getestet, aber laut den Kommentaren sollte es funktionieren.

superuser0
quelle
1
Nett, danke! Ich werde es versuchen, bevor ich akzeptiere, wenn es Ihnen nichts ausmacht :)
AkiRoss
1
Bis ich etwas verpasst habe, macht das Plugin nicht genau das , was ich brauche, in dem Sinne, dass pro Verzeichnis und globale Historien gegenseitig umgeschaltet werden ctrl-g(und nicht nach Priorität, wie ich gefragt habe). Trotzdem finde ich es immer noch äußerst nützlich und eine gute Antwort auf meine Frage, also danke :)
AkiRoss
Möglicherweise liegt es an Änderungen in ZSH, aber dieses Plugin in der aktuellen Version scheint die Bearbeitung des ZSH-Verlaufs nicht korrekt zu handhaben.
Owen
0

Ich habe gerade ein kleines Plugin geschrieben, das viel von dem macht, was Jim Hesters Plugin macht, aber einen anderen Ansatz verwendet, der viele der im GitHub-Repo dieses Plugins aufgeführten Probleme behebt:

https://github.com/ericfreese/zsh-cwd-history

Es speichert HISTFILEfür jedes Verzeichnis, in dem Sie Befehle ausgeführt haben, ein separates Verzeichnis und fügt einen chpwdHook hinzu, mit dem HISTFILESie beim Wechseln der Verzeichnisse zwischen s wechseln können.

Es bietet auch ein Zle-Widget, das Sie an einen Tastendruck binden können, der HISTFILEzwischen Ihrem ursprünglichen "globalen" HISTFILEund dem HISTFILEfür Ihr aktuelles Arbeitsverzeichnis umschaltet .

Meine Frage: Gibt es ein Plugin / einstellung / etwas für zsh, sodass bei der Suche im Verlauf zuerst die im aktuellen Verzeichnis aufgerufenen Befehle angezeigt werden?

Das zsh-cwd-history-Plugin unterstützt dies derzeit nicht, aber ich hoffe, bald Unterstützung dafür hinzufügen zu können.

Eric Freese
quelle
0

Ich hatte genau das gleiche Problem und schrieb ein ZSH-Plugin, das es löst: https://github.com/tymm/zsh-directory-history

Sie müssen nicht manuell zwischen globalem Verzeichnis und Verzeichnisverlauf wechseln, wenn Sie mein Plugin verwenden.

Im Idealfall wird jeder zweite übereinstimmende Verlaufsbefehl nach diesen angezeigt, wobei optional eine maximale Anzahl von Prioritätselementen angegeben wird.

Dies funktioniert auch sofort mit meinem Plugin.

tymm
quelle