Bash: Löschen vom Cursor bis zum Zeilenende mit einem Tastaturkürzel

91

Betrachten Sie die folgende Bash-Eingabeaufforderung, wobei ^der Ort der Eingabeaufforderung angegeben ist:

$ git commit -am "[bug 123456] Do this and that with the bug"
                               ^

Angenommen, ich möchte erneut mit einer anderen Commit-Nachricht einen Commit für denselben Fehler ausführen. Gibt es eine Möglichkeit, den Text von der Cursorposition bis zum Zeilenende zu löschen?

Adam Matan
quelle

Antworten:

145

Verwenden Sie Ctrl+ K, um vom Cursor bis zum Ende der Zeile zu löschen.

Mit Ctrl+ Ulöschen Sie vom Cursor zum Zeilenanfang.

user128285
quelle
Was ist die Schlüsselkombination zu setzen?
ShooShoSha
@ShooShoSha, versuchen Sie Shift + Insert
user128285
Was sind die Bedeutungen von K und U, ich kann mich nicht erinnern, wenn ich nächste Woche die Bedeutungen nicht kenne, wie ich mich an sie erinnere?
WorkplayLifecycle
2
@hylepo Keine Ahnung, aber mein Mnemon ist Brexit - the UK leaves Europe- U löscht bis zum Anfang und K bis zum Ende.
Snowcrash
47

Dies hängt davon ab, ob Sie in Ihrer Shell den Bearbeitungsmodus vi ( set -o vi) oder emacs ( set -o emacs) verwenden.

Standardmäßig verwendet Ihre Shell standardmäßig den Emacs-Bearbeitungsmodus.

  • Im Emacs-Modus kann das Löschen bis zum Zeilenende mit dem Befehl ctrl- ausgeführt werden k.

  • Wenn Sie jedoch zufällig den Bearbeitungsmodus vi in ​​Ihrer Befehlsshell verwenden, können Sie dasselbe Ergebnis erzielen, indem Sie Folgendes eingeben Esc(wodurch Sie in den Befehlsmodus versetzt werden), gefolgt von d- $(wenn Sie die gesamte Zeile löschen möchten, geben Sie ein dd).

Wenn Sie sich nicht sicher sind, welchen Bearbeitungsmodus Sie derzeit in Ihrer Shell verwenden, geben Sie den Befehl set -oüber die Befehlszeile ein, und Sie können feststellen, welchen Bearbeitungsmodus Sie derzeit verwenden:

set -o
...snip...
emacs           on
...snip...
vi              off

Um den Bearbeitungsmodus für die Befehlszeile zu ändern, geben Sie einfach Folgendes ein:

set -o vi

oder

set -o emacs
Kevin Bowen
quelle
4
Wenn Sie eine Mnemonik wünschen, Ksteht das für kill (die Zeile, die an der Cursorposition beginnt).
Gregor Botero
5
Funktioniert im vi-Befehlsmodus Dgenauso wied$
glenn jackman
3
+1 für das tatsächliche Schreiben der richtigen Antwort und das Erläutern, dass Shellopts diese möglicherweise ändern.
TC1
1
>> Danke. Es scheint, dass ich vi verwende, also macht STRG + K den Trick. - Adam Matan Adam, das ist der Emacs-Modus, in dem du bist, nicht vi.
catch22
1
In Kubuntu oneiric (konsole) funktionieren sowohl Strg + K als auch ESC Shift + D. ESC d löscht einen Teil der Zeile (möglicherweise bis zu einem ';'). (Wenn Sie danach ein $ eingeben, wird das $ nur an die Konsole gesendet.) Ich habe eine ganze Weile lang versucht, herauszufinden, wie das geht. Vielen Dank!
Joe
3

Falls Sie nur mit Zsh und Bash vertraut sind, finden Sie hier die entsprechenden Tastenzuordnungen, die Sie (möglicherweise) benötigen:

bash

bind '"\C-k"':kill-line

zsh

bindkey "\C-k"      vi-kill-eol

andere wichtige Informationen

So rufen Sie eine Liste der Tastenzuordnungen ab:

# bash
bind -p

# zsh
bindkey
Sridhar Sarnobat
quelle
Ich bin verwirrt. Sollte es "^k" für Bash nicht für Control + K sein?
wjandrea
Entschuldigung, das ist meine persönliche Bindung. Ich hätte die Standardbindung verwendet, war aber mit der Bash-Syntax nicht vertraut. Da Sie erwähnt haben, was es sein soll, habe ich Ihr Wort dafür genommen und meinen Beitrag bearbeitet.
Sridhar Sarnobat
1
Oh ok. Ich kenne es selbst nicht, aber ich habe es überprüft und es sollte sein"\C-k"
wjandrea