Bash / Readline für "Vorwärtsbewegen durch durch Leerzeichen begrenztes Wort?"


4

Wenn Sie in bash / readline durch einen Befehl navigieren möchten, haben Sie häufig Dinge wie:

cat /home/foo/bar.txt /home/bar/baz.txt

Wenn sich mein Cursor am Ende der Zeile befindet (^ e) und ich zum Anfang des zweiten Arguments zurückkehren möchte, wie gehe ich zum (nächsten / vorherigen) Leerzeichen über?

Readline verfügt über integrierte Funktionen Meta-f(vorwärts) und Meta-b(rückwärts). Diese werden jedoch an den Schrägstrichen in den Pfaden angehalten und nicht bis zum Leerzeichen verschoben.

vim hat Wund Bwird dies tun, aber der Bewegungsmodus von vim ist in readline / bash standardmäßig nicht aktiviert.


Wenn Sie damit vertraut sind vi, warum nicht in den viModus wechseln (und dort bleiben) ?
Juli

Antworten:


9

Sie können VIM-Bewegungsbefehle in readline / bash verwenden, auch wenn Sie sich noch im Bewegungsmodus von Emacs befinden. Die relevanten Readline-Befehle sind vi-fWordund vi-bWord. Sie können sie an Tastaturkürzel binden, wie CTRL-fund CTRL-bmit den folgenden in Ihrem .bash_profile:

bind '"\C-f":vi-fWord'
bind '"\C-b":vi-bWord'

Beachten Sie, dass das doppelte Anführungszeichen von Bedeutung ist.

Sie können bestätigen, dass die Bindungen funktionieren, indem Sie ausführen bind -p


1
Da ich meine readline-Konfiguration gerne vollständig in ~ / .inputrc haben möchte, können Sie die Bindung und die umgebenden einfachen Anführungszeichen löschen und direkt zu ~ / .inputrc
Roshan,

Im Fall hilft es sonst jemand Sie diese Arbeit in Fisch Schale durch Zugabe zu bekommen bind \cb backward-bigwordund bind \cf forward-bigwordzu Ihrem~\.config\config.fish
timbram

4

Es gibt Readline-Befehle, mit denen Sie Wörter so verschieben und behandeln können, wie die Shell sie zum Teilen behandelt: shell-forward-wordund shell-backward-word1 .

Wenn Sie binden wollen , dass sie Ctrl+ Meta+ fund Ctrl+ Meta+ bzu vermeiden , die bestehenden Bindungen zu überschreiben, können Sie

bind '"\M-\C-f": shell-forward-word'
bind '"\M-\C-b": shell-backward-word'

in der Befehlszeile, oder fügen Sie hinzu

"\M-\C-f": shell-forward-word
"\M-\C-b": shell-backward-word

in die entsprechende inputrcDatei (in der Regel ~/.inputrc).

Je nach Einstellung von convert-meta, \M-muss mit ersetzt werden \e.


1 Eingeführt in Bash 4.0.


1
Gutes Zeug! Beachten Sie, dass diese Funktion in Bash 4.0 eingeführt wurde, sodass sie auf der Standardversion von Mac OS Bash nicht funktioniert.
Sitaktif
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.