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.

elliot42
quelle
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

elliot42
quelle
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.

Benjamin W.
quelle
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