Das Navigieren in mehreren Ebenen verschachtelter Verzeichnisse ist oft mühsam. Unter Firefox ist dies einfach, da sie Lesezeichen haben. Also, was ich tun möchte, um eine Datei mit Lesezeichen zu versehen, ist Folgendes einzugeben:
$ go --add classes "repo/www/public/util/classes"
Um in dieses Verzeichnis zu gelangen, würde ich Folgendes eingeben:
$ go classes
Früher habe ich symbolische Links verwendet, um etwas Ähnliches zu erreichen, aber ich möchte mein Home-Verzeichnis nicht überladen. Es gibt viele andere Funktionen, die sich als nützlich erweisen könnten. Zum Beispiel möchte ich in der Lage sein, mit dem Tippen zu beginnen go cl
und dann die Tabulatortaste zu drücken, um automatisch zu vervollständigen. Manchmal habe ich mehrere Kopien eines Repositorys ausgecheckt und daher wäre es für das Programm nützlich, wenn ich mehrere Kontexte erstellen und das Lesezeichen relativ zum Kontextbasisverzeichnis setzen könnte.
Gibt es so etwas schon, bevor ich meine eigenen Skripte zusammenbaue?
Antworten:
Ich habe zu lange nach einem Shell-Lesezeichen gesucht und bin mit keiner der Lösungen, die ich gefunden habe, zufrieden.
Schließlich bin ich jedoch auf ein großartiges, universelles Tool gestoßen: den Befehlszeilen-Fuzzy-Finder .
Sie können damit in erster Linie Dateien „unscharf finden“ (überprüfen Sie die reichhaltige GIF-Animation über den obigen Link), aber Sie können auch beliebige Textdaten eingeben und diese Daten filtern. Die Idee der Verknüpfungen ist also einfach: Alles, was wir brauchen, ist eine Datei mit Pfaden (die Verknüpfungen sind) zu pflegen und diese Datei mit einem Fuzzy-Filter zu versehen. So sieht es aus: Wir geben einen
cdg
Befehl ein (von "cd global", wenn Sie möchten), rufen eine Liste unserer Lesezeichen ab, wählen die erforderlichen in nur wenigen Tastenanschlägen aus und drücken die Eingabetaste. Das Arbeitsverzeichnis wird in das ausgewählte Element geändert:Es ist extrem schnell und bequem: Normalerweise gebe ich nur 3-4 Buchstaben des gewünschten Artikels ein und alle anderen sind bereits ausgefiltert. Zusätzlich können wir uns natürlich mit den Pfeiltasten oder mit
Ctrl+j
/ durch die Liste bewegenCtrl+k
.Ausführlicher Artikel zu dieser Lösung für Verknüpfungen / Lesezeichen ist hier: Fuzzy-Verknüpfungen für Ihre Shell .
quelle
Ich denke, Sie suchen nach etwas wie Autojump . Sie müssen sich ein wenig umsehen, um eine Reihe von "Schlüsselgewichten" zu entwickeln, die mit der in einem bestimmten Verzeichnis verbrachten Zeit korrelieren. Wenn Sie dann viel Zeit in diesem "Klassen" -Verzeichnis verbracht haben, können Sie direkt dorthin springen, indem Sie etwas eingeben
Mit können Sie Ihre "Schlüsselgewichte" einsehen
quelle
f
: github.com/clvv/fWie erwähnt, sind Aliase ein guter Mechanismus. Die bash hat auch einen eingebauten Mechanismus rechts zu einer Stelle zu springen:
CDPATH
. Stellen Sie es so einPATH
, aber es wird verwendet,cd
anstatt nach Programmen zu suchen.Aus der Manpage:
Ich selbst habe dies mit einem Verzeichnis kombiniert, das Symlinks zu dem enthält, wohin ich gehen möchte:
Dies hat den Nachteil, dass das Verzeichnis nicht ganz korrekt zu sein scheint, aber mit
cd -P
oder Einstellung korrigiert werden kannset -P
.quelle
alias C='cd -P .'
eher als hinzufügenset -P
, da für System-Symlinks es mir nichts ausmacht, im Symlink-Verzeichnis zu sein.help cd
und verstehe immer noch nicht, was die Option -P bewirkt.mkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
Sie können die vorhandenen Funktionen von Bash zur Suche nach Verlauf und Verlauf kombinieren. Drücken Sie Ctrl-R, um die inkrementelle Rückwärtssuche zu starten, und geben Sie dann den Teil des Pfads ein, der wahrscheinlich eindeutig ist.
Sie können so lange Buchstaben eingeben, bis Sie wieder den letzten
cd
Befehl für dieses Verzeichnis Ctrl-Reingegeben haben , oder Sie können erneut drücken , um zum nächsten Befehl im Verlauf zu springen, der Ihren bisherigen Eingaben entspricht.Ich mache das die ganze Zeit.
Eigentlich gehe ich noch einen Schritt weiter. Sobald ich anfange, Sequenzen von Befehlen zu entdecken, die es wert sind, in der Geschichte festgehalten zu werden, die es jedoch nicht wert sind, sich auf ein Shell-Skript festzulegen, fange ich an, sie mit
&&
und;
Kombinatoren zu verketten, damit ich in umgekehrter Reihenfolge nach einem Teil dieses einen langen Befehls suchen Enterund die gesamte Sequenz ausführen kann Einmal.So erstelle und führe ich beispielsweise eines meiner Programme während der Entwicklung aus:
Ich mache dies aus dem Installationsverzeichnis, das sich unter dem Quellverzeichnis der obersten Ebene befindet. Indem
cd
ich das Teil in eine Sub-Shell einhülle , baue und installiere, stelle ich sicher, dass ich, egal was während dieses Vorgangs passiert, wieder in meiner normalen Shell lande, ohne dass sich etwas ändert. Erst wenn das gelingt (&&), starte ich das erstellte und installierte Programm. Ich kann mit nur dies in meiner Geschichte finden Ctrl-Rdann sta, dass ist alles , was ich in der Regel eindeutig müssen diese Befehlsfolge finden.Ein weiteres Beispiel, wie ich dies benutze, ist die Sequenz, in der RPMs für dasselbe Programm erstellt werden. Der größte Teil der mühsamen Arbeit liegt in Shell-Skripten, aber es gibt immer noch ein paar Befehle, die ich normalerweise eingeben muss, um die gesamte Arbeit des Erstellens und Bereitstellens der erstellten RPMs zu erledigen, die ich jetzt selten neu eingeben muss, da Bash beibehalten wird es in der Geschichte für mich.
Kombinieren Sie all dies mit
export HISTSIZE=bignum
und,shopt histappend
und Sie haben gerade einen elephantine-Befehlsspeicher erstellt.Eine andere Lösung, die ich einmal codiert habe, ist meine Antwort auf eine andere Frage hier . Es muss möglicherweise für Ihre Zwecke angepasst werden und verarbeitet nur
cd
Befehle, wohingegen die Verlaufssuchoption überall und für jeden Befehl funktioniert.quelle
Ich selbst benutze
alias
es, lange Wege zu verkürzen, die ich oft besuche. Sie können Ihren Satz vonalias
es in Ihrembashrc
ablegen, so dass sich bash jedes Mal daran erinnert, wenn Sie sich anmelden. Und zum Glück fügt bash Aliase zur automatischen Vervollständigung hinzu.Ich würde so etwas für Ihren Fall schreiben:
alias go-classes="cd ~/repo/www/public/util/classes"
quelle
Möglicherweise suchen Sie nach Bashmarks (auf Github).
Aus der README:
Bashmarks ist ein Shell-Skript, mit dem Sie häufig verwendete Verzeichnisse speichern und zu diesen springen können. Unterstützt jetzt die Tab-Vervollständigung.
quelle
Dies ist in keiner Weise vollständig oder narrensicher, sondern zunächst nur ein Entwurf. Wenn Sie Folgendes hinzufügen, stehen
~/.bashrc
Ihnen drei Befehle zum Hinzufügen von Lesezeichen zum Löschen und Auflisten von Verzeichnissen zur Verfügung (die auf Shell-Aliasen basieren, sodass Sie auch eine Art automatische Vervollständigung erhalten).Die Bedienung ist ziemlich einfach.
bmadd
Mit einem Argument wird ein nach dem Argument benannter Alias hinzugefügt. Dieser Alias erstellt nur eine CD mit dem Verzeichnis, in dem er festgelegt wurde. Ohne Argument wird der aktuelle Verzeichnisname als Aliasname verwendet.bmdel
Löscht auf ähnliche Weise einen Alias, falls vorhanden, undbmlist
listet die aktuellen Lesezeichen auf.z.B
quelle
Ich bin vor einiger Zeit auf dasselbe Bedürfnis gestoßen und habe beschlossen, ein paar Skripte zusammenzustellen, um mir zu helfen, absolute / relative Pfade zu markieren und sie kürzeren Namen zuzuordnen, an die ich mich leicht erinnern kann.
Das Skript ist sehr einfach zu verwenden und erstellt einfach eine Funktion mit dem Kurznamen, den Sie als Alias für das Verzeichnis angeben, in das Sie springen möchten. Alles, was Sie tun müssen, ist einfach diesen Kurznamen einzugeben und es wird Sie zu dem mit einem Lesezeichen versehenen Verzeichnis weiterleiten.
Hier ist ein Link zur Quelle des Lesezeichen-Skripts. Übrigens, ich habe es The Bookmarker genannt.
Verwendung
Einmal installiert, ist es ziemlich einfach zu bedienen.
So markieren Sie ein Verzeichnis:
So navigieren Sie zu einem markierten Verzeichnis:
So sehen Sie, was markiert wurde:
So löschen Sie ein markiertes Verzeichnis:
Weitere Beispiele, Installationsanweisungen usw. finden Sie in der sehr ausführlichen Dokumentation .
quelle
cdargs
ist das beste Tool für Verzeichnis-Lesezeichen.Verwendungsbeispiele finden Sie in den Lesezeichen für das CD-Befehlsvideo auf YouTube.
Beispielanwendung
cdargs
ist eine ncurses-GUI, mit der Sie visuell in Ihrer Shell navigieren können. Sobald es installiert ist, richten Sie es in einer bestimmten Shell ein, indem Sie ein Shell-Skript verwenden:Dies aktiviert verschiedene Funktionen, die Sie dann von Ihrer Shell aus aufrufen können.
Beschwöre die GUI:
Daraus ergibt sich ein GUI-Typ:
Mit den Pfeiltasten können Sie in der Liste nach oben und unten navigieren. Der linke Pfeil ( ←) geht eine Ebene in der Verzeichnisstruktur nach oben, ein rechter Pfeil ( →) führt einen Drilldown in ein Verzeichnis durch.
Verzeichnisse markieren:
Sie können entweder cdas aktuelle Verzeichnis verwenden, in dem Sie navigieren, oder adas Verzeichnis hinzufügen, das Sie gerade mit dem Cursor markieren.
Betriebsarten:
cdargs
ist in dieser Hinsicht ein bisschen wie vi / vim, wo es diesen Begriff von Modi hat . Es gibt zwei davon: Durchsuchen (B) und Auflisten (L). Sie können sehen, in welchem Modus Sie sich befinden, indem Sie auf das Display unten in Ihrer Shell klicken.Listungsmodus:
Browsermodus:
Sie können den Modus ändern, indem Sie die Tabulatortaste ( TAB) drücken .
Dies ist nur die Spitze des Eisbergs.
man cdargs
Weitere Informationen finden Sie in der Manpage ( ) und in der integrierten Hilfe.quelle
Das beste Werkzeug dafür ist: wcd . Ich habe viele andere Tools getestet, und dieses wird genau so verwendet, wie Sie es wünschen. Es ist in vielerlei Hinsicht besser als alle vorherigen Lösungen.
quelle
Die anderen Antworten sind großartig und spezifisch. Eine andere Sichtweise ist die Verwendung eines Tastaturmakroprozessors, der fast alles kann, was Sie sich vorstellen können.
Testen Sie AutoKey. Es kann Phrasen wie die Autokorrektur oder den Bash-Verlauf eines Textverarbeitungsprogramms ersetzen und ein Python-Skript auf einem von Ihnen definierten Hotkey ausführen, das fast alles kann und Tastatureingaben an Ihr Zeicheneingabegerät sendet - so, als ob Sie sie eingegeben hätten.
Das einzige "Manko", das es (in Bezug auf diese Frage) hat, ist, dass es eine GUI benötigt, um in gnome oder kde zu laufen. Die anderen Antworten haben diese Anforderung nicht.
quelle
Es gibt eine andere Alternative namens z .
Es lernt bei jedem Verzeichniswechsel:
Dann können Sie später mit Fuzzy Matching in dieses Verzeichnis wechseln:
quelle
Apparix ist ein weiteres Tool, das dies tut. Eine der nützlichen Funktionen ist, dass Sie direkt zu den Unterverzeichnissen der Marke springen und in diesen Unterverzeichnissen die Tabulatoren vervollständigen können.
quelle
Eine andere Lösung, die ich glaube, ist
autojump
undz
istfasd
.Es protokolliert, welche Verzeichnisse Sie besuchen, und
z dir-name
wechselt in das Verzeichnis mit dem Namendir-name
, den Sie am häufigsten verwenden. Es hat auch einige Funktionen für häufig verwendete Dateien.Sie können es von folgender Adresse klonen: https://github.com/clvv/fasd
Die Installation ist unkompliziert, klonen, installieren und dann ändern Sie Ihre
.bashrc
(oder.zshrc
etc).quelle
Sie müssen Ihrem
.bashrc
oder einen Alias hinzufügen.bash_profile
.Angenommen, Sie möchten eine Verknüpfung zu
~/Desktop/Coding/Projects
dem aufzurufen, was Sie eingebengoto_Projs
. Sie müssen der im Texteditor geöffneten Datei die folgende Zeile hinzufügen:alias goto_Projs='cd ~/Desktop/Coding/Projects'
Jetzt tun Sie, was Ihr Texteditor von Ihnen verlangt, um zu speichern (
/User/<yourusername>/
oder~/
natürlich) und zu beenden. Wenn die Shell-Eingabeaufforderung zurückgegeben wird, gehen Siesource ~/.bash_profile
Ihr Alias sollte nun wie oben beschrieben zum Aufrufen verfügbar sein.
quelle
Ich benutze die Methode, einen Kommentar am Ende des Befehls anzufügen und dann aufzurufen
ctrl R
, um die Suche nach dem Kommentar umzukehren. Dies hat folgende Vorteile:ctrl R
ctrl R
undtab
on the fly, um kleinere Änderungen am Befehl selbst vorzunehmen, sodass der Kommentar eine Art allgemeine Verknüpfung zu einer Familie ähnlicher Befehle darstelltquelle