Ich habe nur etwas getippt nach:
mv foo/bar/poit/zoid/narf.txt
und plötzlich wurde mir klar, verdammt, dass ich wieder große Teile dieses Parameters eingeben muss
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
Auch bei tabcompletion ein ziemlicher Schmerz. Ich weiß, dass ich den Parameter kopieren und einfügen kann, indem ich den Text mit der Maus auswähle und mit der mittleren Maustaste klicke, aber das ist nicht gut genug. Ich möchte auf der Tastatur bleiben.
Gibt es eine Möglichkeit, den aktuellen Parameter der Zeile mithilfe der Tastatur einzufügen?
bash
readline
line-editor
k0pernikus
quelle
quelle
mv foo/bar/poit/zoid/{narf.txt,troz.txt}
Stattdessen müssen Sie lange Adressen zweimal eingeben / kopieren.mv foo/bar/poit/zoid/{narf,troz}.txt
. Dies funktioniert besonders gut, wenn wir so etwas haben.../zoid/this_source_file_has_to_be_patched.c{,.orig}
Antworten:
Wenn ich im Voraus geplant habe, verwende ich die Klammererweiterung . In diesem Fall:
Hier ist ein anderer Ansatz unter Verwendung der Standardtastenkürzel
readline
:mv foo/bar/poit/soid/narf.txt
: Startunix-word-rubout
zu löschenfoo/bar/poit/soid/narf.txt
yank
, Raum,yank
wieder gesund zu werdenmv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
backward-kill-word
zweimal, um den letzten zu löschennarf.txt
troz.txt
: Geben Sie den Schwanzteil ein, der anders istWenn Sie nicht ganz so viel Zeit mit der
bash
Shell verbringen , empfehle ich, in regelmäßigen Abständen eine Liste der Standardverknüpfungen zu lesen und einige auszuwählen, die nützlich erscheinen, um sie zu erlernen und in Ihre Routine zu integrieren. Kapitel 8 desbash
Handbuchs ist ein guter Anfang. Wenn Sie die Verknüpfungen kennen, können Sie Ihre Effizienz steigern.quelle
.txt
, können Sie Strg + Links (oder eine andere Verknüpfung, die aufgerufen wird) drückenbackward-word
, ein Zeichen nach links und dann Alt + Rücktaste drücken und eingebentroz
.Die Verlaufserweiterung funktioniert auch für den aktuellen Befehl mithilfe der Ereignisbezeichnung
!#
. Kombinieren Sie dies mit dem Wortbezeichner für das letzte Argument -$
-, um den Parameter zu erhalten, den Sie gerade eingegeben haben. Und Sie können alle regulären Modifikatoren darüber verwenden. Wenn Sie z. B. eine Datei in einem weit entfernten Verzeichnis umbenennen, können Sie einfach Folgendes eingeben:quelle
magic-space
Option in inputrc zum automatischen Erweitern von Verlaufserweiterungen. (Ich konnte die Antwort mit den meisten Stimmen nicht verwenden, da ich festgelegt habe, dass ^ W bei Schrägstrichen unterbrochen wird, da dies normalerweise sinnvoller ist.)alt+backspace
stoppt normalerweise bereits bei Worttrennzeichen wie Schrägstrichen, sodass Sie nicht ändern müssen, wie^W
Sie diese Funktionalität erhalten. Sie können sowohl durch Nicht-Wortzeichen als auch durch Leerzeichen getrennte Wörter löschen lassenWie in Ihrem Beispiel können Sie folgende Konstruktion verwenden:
oder sogar (wie vorgeschlagen Ansgar Esztermann ):
Stattdessen muss keine lange Adresse zweimal eingegeben / kopiert werden.
quelle
Herumspielen brachte ich das zum Laufen:
Schlagen Enter
, um den letzten Parameter zu speichern.
Jetzt benutzen ↑ , um zum letzten Mal in die Zeile zurückzugelangen. Geben Sie ein Leerzeichen ein und verwenden Sie zum Abrufen des zuletzt verwendeten Parameters Folgendes:
Alt + .
Ich hasse es, einen Fehler zu provozieren, aber in diesem Anwendungsfall wird der Job erledigt.
quelle
Sie können einfach Variablen verwenden:
Oder in Ihrem Fall (Note Tab-Wettbewerb funktioniert für den einen Teil):
quelle
Ich habe das in meinem
~/.inputrc
:!#
ist die aktuelle Zeile,:$
ist das letzte Wort und\e^
isthistory-expand-line
.quelle
Für
zsh
mich sind die folgenden Tastenkombinationen hilfreich.Also drücke ich Alt- Mum das letzte Argument zu wiederholen Alt-K wenn ich Teile vom Ende eines Pfades löschen möchte.
Hier finden Sie einen nützlichen Verweis auf einige der Verhaltensweisen, die Sie zuordnen können.
quelle
Eine kurze interaktive zweistufige Lösung
Art:
echo foo/bar/poit/zoid/narf.txt
Dies stellt
foo/bar/poit/zoid/narf.txt
die Alt- .Verknüpfung in der Bash zur Verfügung.Typ:
mv
und Hit Alt- ., Space, Alt-.Du wirst bekommen
mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt
. Jetzt können Sie das letzte Wort einfach ändern.Mitternachtskommandant
Dieses (sehr) nützliche Tool ist ein Dateimanager, der in der Konsole ausgeführt wird. Sie haben die Möglichkeit, Dateinamen und Verzeichnispfade interaktiv in die Befehlszeile zu kopieren. Midnight Commander zeigt Ihnen daher 2 Panels (links und rechts), die den Inhalt verschiedener Verzeichnisse auflisten.
Ein kurzer Leitfaden:
Dies ist bei weitem der schnellste Weg, den ich bisher gefunden habe - nachdem ich mich an die Abkürzungen gewöhnt hatte.
quelle
Verwenden Sie dasselbe im {,} "Duplikator". Dh:
quelle