Bash: Wort vor dem Cursor löschen

76

Betrachten Sie die folgende Bash-Befehlszeile, wobei ^ die Cursorposition angibt:

svn commit -m very/long/path/to/some/file "[bug 123456] Fix the pixel issue"
              ^

Ich möchte eine andere Datei mit derselben Nachricht festschreiben. Wie kann ich das aktuelle Wort von der Cursorposition bis zur nächsten Stelle löschen? Gibt es auch eine Abkürzung zum rückwärtigen Löschen, bilden Sie den Cursor auf die erste Stelle rückwärts?

Update: ctrl + wlöscht rückwärts, aber welche Verknüpfung löscht ein Wort vorwärts?

Adam Matan
quelle
2
Ctrl uist eine Option zum Löschen von der Cursorposition zum Anfang ...
verrückt nach natty
23
Versuchen Sie alt + d, das könnte nützlich sein, wenn der Emacs-Bearbeitungsmodus eingestellt ist.
@Mik Wie aktivierst du den Emacs-Modus?
Adam Matan
@AdamMatan aktiviert set -o emacses, aber es ist normalerweise die Standardeinstellung. Wenn nicht, können Sie diese Zeile in .bashrcoder .bash_aliaseseinfügen, die Datei als Quelle angeben oder das Terminal neu laden. Die Verknüpfungen, mit denen Sie möglicherweise im vi-Modus vertraut sind, sind dann jedoch nicht verfügbar, obwohl solche wie Strg + C nicht verfügbar sind, da es sich nicht um Bash-Verknüpfungen handelt.

Antworten:

56

Ich habe eine ähnliche Frage auf unix.stackexchange.com beantwortet :

Bash verfügt über Readline-Befehle, die standardmäßig nicht gebunden sind. Sie finden sie unter der folgenden Referenz: http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands

Der gesuchte Befehl heißt "shell-backward-kill-word". Sie müssen zuerst die Verknüpfung auswählen. Verwenden wir die Tastenkombination Strg + p, da es sich um den "vorherigen Befehl" handelt - genau wie der Aufwärtspfeil.

bind '"\C-p": shell-backward-kill-word'

Der einzige Unterschied ist, dass Sie stattdessen den Befehl "shell-kill-word" verwenden müssen, da Sie forward löschen möchten.

Es gibt auch einen "kill-word" -Befehl mit Meta+ dVerknüpfung (versuchen Sie Esc+, dwenn Sie keine Meta-Taste haben). Es wird nur ein Teil des Pfades auf einmal gelöscht.

Nykakin
quelle
31
Alt-d funktioniert für mich
Ricab
8
Im Allgemeinen ist in der Welt der Tastaturen, auf denen Meta nicht existiert, Alt = Meta.
Nate CK
In der Welt, in der Sie viele verschiedene Tastaturen haben, ist eine praktische und ziemlich nützliche Tatsache, dass Esc als Präfix auch als Meta fungiert.
Tripleee
1
Kurz gesagt, fügen Sie zB Folgendes zu Ihrer $ HOME / .inputrc-Datei hinzu: Damit "\ew": shell-kill-word löscht Alt-w vorwärts ein Wort, ähnlich wie STRG-w rückwärts ein Wort löscht (und anders als Alt-d, das das Löschen vorwärts ausführt, aber bei zB anhält) a / oder - und andere Zeichen)
user964970
7

Getestet die esc+ dund alt/ opt+ dauf OSX Mavericks und sie funktionieren auch dort.

visyoual
quelle
12
Option + dgibt mir ∂ auf OSX
Ivan
4
-1 OSX ist kein Ubuntu. Sie können gerne einen Kommentar hinzufügen, dies ist jedoch keine Antwort.
Wjandrea
Sie müssen zuerst das Kontrollkästchen "Option als
Metaschlüssel verwenden
control + dauf dem Mac Sierra
mfink
2
@IvanBalashov, wenn Sie iterm verwenden, setzen Sie Ihren let opt-Schlüssel auf esc +. Unter Profile> Schlüssel
tessie