Wie kann ich Bash, Zsh oder Tmux so konfigurieren, dass die letzte übereinstimmende Kennung auf dem Bildschirm vervollständigt wird ? Stellen Sie sich dieses häufige Szenario vor:
$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
* [new branch] issue540 -> origin/issue547314
e9204cf..4d42c3f v2.1 -> origin/v2.1
Wie kann ich Bash / Zsh / Tmux issue547
einfach auf der CLI ausführen lassen ? Wenn ich drücke, Tabnachdem $ git checkout is
Git hilfreich abgeschlossen issue
wurde, muss ich die Ziffern jedoch selbst vervollständigen, da alle vorherigen Ziffern tatsächlich mit vorhandenen Git-Zweigen übereinstimmen .
In VIM wird das Drücken von Ctrl+ Pfür omnicomplete wie bei der vorherigen Übereinstimmung abgeschlossen, sodass in diesem Fall issue547314
tatsächlich abgeschlossen wird. Wie kann ich dieses Verhalten in Bash, in Zsh oder in Tmux bekommen ?
Ich verwende derzeit Bash 4.2 und Tmux 1.10 auf Ubuntu Server (normalerweise 12.04 LTS). Ich kann bei Bedarf auf den neuesten Ubuntu Server LTS (14.04) aktualisieren.
EDIT : Ich hätte nichts gegen eine Lösung, die Bash, Zsh oder Tmux verwendet, solange es nicht schwierig ist, zu verwenden. Also Taboder Ctrl+ Poder eine andere solche Verknüpfung wäre in Ordnung, aber nicht Alt+ Meta+ Super+ Shift+ א.
Antworten:
Ich denke, diese Funktion, nach der OP sucht, heißt in der Emacs-Welt dabbrev-expand :
xterm
hat auch einedabbrev-expand
Funktion, ist aber etwas weniger schlau als das Gegenstück von Emacs, aber es ist sehr nützlich für mich und einer der Gründe, zu denen ich gewechselt binxterm
. Innerhalb desxterm
Fensters kann eine benutzerdefinierte Tastenkombination verwendet werden~/.Xresources
, umdabbrev-expand
eine bestimmte Zeichenfolge aufzurufen . Zum Beispiel habe ich den folgenden Eintrag in meinem~/.Xresources
(ich verwendeuxterm
eine Unicode-Version von xterm):Innerhalb des
xterm
Fensters kann ichM-/
(ALT + /
) zum Aufrufen verwendendabbrev-expand
.xterm
sucht nach allen auf dem Bildschirm sichtbaren Zeichenfolgen, die mit den von mir eingegebenen Buchstaben beginnen. Beispiel:Wenn ich
M-/
jetzt drückte,xterm
würde sich erweiterna_v
zua_very_long_string
. Leider ist, wie gesagt,xterm
nicht so schlau und seinedabbrev-expand
Funktion funktioniert nur bei vollen Saiten. In Ihrem Fallis
würde also auf erweitertissue540
und nicht,issue547314
weil diesissue547314
ein Teil von istorigin/issue547314
(denken Sie daran, wie\b
bei regulären Ausdrücken, es ist ein bisschen ähnlich, obwohl die meisten Engines für reguläre Ausdrücke beide Vorkommen vonissue
Zeichenfolgen in abfangen würden\bissue.+\b
). Aber können Sie eingebenor
und dann presM-/
.xterm
wird zunächst erweiternor
zuorigin/v2.1
, dann ist dies nicht das, was wir so drücken SieM-/
wieder undxterm
es zu erweiternorigin/issue547314
. Wenn Sie jetzt Bash verwenden, können Sie Folgendes tunM-b
:C-w
und TeilC-e
zu entfernenorigin/
. Zusammenfassend lässt sich sagen, dass dasdabbrev-expand
Innerexterm
nicht so gut ist wie bei Emacs (und Vim, denke ich), aber es ist immer noch schneller als das Umschreiben langer Saiten von Hand und weniger anfällig für Tippfehler. In den meisten Fällen wird es direkt auf die gewünschte Zeichenfolge erweitert, ohne dass redundante Teile entfernt werden müssen. Sie müssen sich nur daran gewöhnen - schauen Sie sich die Zeichenfolge an, die Sie am Cursor haben möchten, und prüfen Sie, ob ihr nichts anderes vorangestellt ist und ob es sich um einen vorhergehenden Teil handelt, und entfernen Sie ihn nach der Erweiterung.Beachten Sie, dass diese Funktion standardmäßig
xterm
nicht kompiliert istdabbrev-expand
und Sie sie explizit aktivieren müssen. Die Version vonxterm
in Ubuntu-Repositorys wird jedoch mit kompiliertdabbrev-expand
und Sie können sie sofort verwenden.quelle
xterm
unduxterm
nicht für dabbrev-expand kompiliert, ich konnte das Feature in nicht erwähnen-help
. Wie kann ich die Kompilierungsflags sehen (wie beivim --version
)? Beachten Sie, dass ich auch in die Config - Linie versucht ,~/.Xresources
wieMeta <KeyPress> /: dabbrev-expand() \n\
wie gefunden hier aber das hat nicht geholfen, auch nicht .xrdb -merge .Xresources
in xterm.zsh
hat diese Einrichtung.Bash als ähnliche Einrichtung namens Bash Completion. Sie können davon Gebrauch machen, indem Sie die TabTaste drücken, wenn Sie Befehle für Befehle angeben, wenn Sie diese eingeben.
Beispiel
Wenn ich anfange zu tippen
ls
und dann Tabzweimal zu drücken, wird Bash eine Liste der übereinstimmenden Dateien (und Befehlszeilenschalter) für jeden Befehl bereitstellen, den Sie verwenden möchten:Und hier ist das Beispiel mit Schaltern:
Konfiguration?
Meine Installation enthielt bereits eine Regel für
git
:Die Installation dieser Datei wurde durchgeführt, als ich das
git
Paket installiert habe . Ich bin auf Fedora 19, aber andere Distributionen sollten dies auch tun.In der Regeldatei wird erläutert, dass die automatische Vervollständigung in den folgenden Situationen erleichtert wird:
Das sollte also "nur funktionieren" für Sie.
quelle
Mit extrakto können Sie so etwas machen :
prefix + tab
, um extrakto zu startentab
um es in das aktuelle Fenster einzufügen,enter
um es in die Zwischenablage zu kopieren,ctrl-o
um den Pfad / die URL zu öffnen oderctrl-e
zu bearbeiten mit$EDITOR
quelle