iTerm2: Zeile löschen?

78

Ich versuche, ⌘+Deletein iTerm2 eine Zuordnung (Rücktaste) zum Löschen am Anfang der Zeile (wie in Browsern und Texteditoren) in iTerm2 vorzunehmen, und ich kann keinen funktionierenden Escape-Code dafür finden. Ich habe 1K ( ^[1K) basierend auf dem, was ich in Wikipedia gelesen habe, ausprobiert . Es wird nur ein "K" gedruckt.

Edit: Ich habe gefunden Ctrl+U. Nun erfahren Sie, wie Sie es abbilden können. Vielleicht Hex-Code 21 (U ist der 21. Buchstabe), also 0x15?

Steven Lu
quelle
3
versuchen Sie es CTRL+A CTRL+Kin der Zwischenzeit. OderCTRL+C
Carlos
1
Strg + K ist sicher gut zu lernen. Aber ich bin eher daran gewöhnt, cmd + zu löschen. Ich muss es haben! Es funktioniert überall anders!
Steven Lu
1
Hier sind einige weitere, die Sie vielleicht nützlich finden. ALT+Backspace-> Sende Hex 0x17, ALT+RightArrow-> Sende Exc Seq f, ALT+LeftArrow-> Sende Exc Seq b
Carlos
Alt + Löschen hat bereits sofort funktioniert. Ich habe erst kürzlich ^ [b und ^ [f gesetzt, und sie funktionieren großartig. Ich möchte wirklich, dass speziell Cmd + Löschen die gesamte Zeile löscht.
Steven Lu
@ Carlos, guter Punkt mit Strg + C und ich habe das eigentlich ziemlich viel gemacht. Es ist jedoch ein anderes Verhalten und ich möchte auch nicht versehentlich Dinge beenden. Zum Beispiel, wenn ich in einer Art Dolmetscher bin und die eingegebene Zeile löschen möchte. Strg + C funktioniert nur in einem bestimmten Zustand, und genau von dieser Art von Zustandsabhängigkeit versuche ich wegzukommen. Zustandsabhängigkeit ist der Fluch der Benutzerfreundlichkeit.
Steven Lu

Antworten:

125

Ich hab es geschafft. Ich habe keine Ahnung, warum Hex-Code-Zuordnungen in iTerm2 die zugehörigen Strg + -Tastenzuordnungen erzeugen, aber sie tun es. Keine Ahnung, was 0x00 bedeutet, da es nicht wie erwartet A zugewiesen ist. (obwohl ich glaube, dass Unix seine eigenen Konventionen in Bezug auf die Behandlung von Null-Bytes hat - wir xargsakzeptieren beispielsweise ein Null-Byte-Begrenzungsformat von find- Es wäre ordentlich, wenn wir dies mit iTerm2 an einen Hotkey binden könnten)

Ich konnte feststellen, dass Strg + U fast genau die Aufgabe erledigt, die ich möchte (es löscht die gesamte Zeile, anstatt nur das zu löschen, was vor dem Cursor steht, aber was auch immer ... Strg + Y als Bonus kann alles zurückbringen). Dann sehe ich neugierig , dass ich Hex - Codes hatte 0x1und 0x5abgebildet ^Aund ^Ejeweils für meine Cmd + Links und Cmd + Recht ... so 0x15ist ^U!

Steven Lu
quelle
1
Ich wünschte, ich könnte dies noch 5 Mal verbessern. Ich verbringe so viel Zeit damit, danach zu suchen. Wie berechnet man 0x15 von 0x1 und 0x5?
Bizi
2
Haha, uist nur der 21. Buchstabe des Alphabets! Ich glaube also, dass der Ausdruck richtig ist.
Steven Lu
2
Für Informationen, die nach der gleichen Logik bis zum Ende der Zeile gelöscht werden, ist Strg-K ... K der 11. Buchstabe des Alphabets oder 0xB in Hexadezimalzahl. Weisen Sie also Hex 0xB 'Befehl-Entf->' zu, um bis zum Ende der Zeile zu löschen.
user2707671
1
@bizi Ausgehend von Steven Lus Antwort, wobei 'u' der 21. und 'k' der 11. Buchstabe des Alphabets ist, sind die gewünschten Hex-Codes hex (21) und hex (11), die sich zu '0x15' und '0xb ergeben '. Ich habe festgestellt, dass ich diese öfter xpython -c "import string; print(hex(string.ascii_lowercase.find('x') + 1))"~/.bashrc~/.bash_profilealias hexletter='python -c "import string,sys; print(hex(string.ascii_lowercase.find(sys.argv[-1]) + 1))"'
nachgeschlagen habe. Aus Gründen der
41

Durch die Zuordnung von Hex-Code 0x15zu + ←Deletein den meisten Shells wird die gesamte Zeile gelöscht (Inhalt links und rechts vom Cursor). Obwohl manchmal nicht so kompatibel, finde ich diese Zuordnung:

+ ←DeleteHex-Codes senden:

0x18 0x7f

führt die gewünschte Funktionalität aus. Wenn Sie ZSH ausführen, müssen Sie dies wahrscheinlich auch zu Ihrer .zshrc-Datei hinzufügen:

$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

Standardmäßig ist ZSH backward-kill-linenichts zugeordnet.

Darüber hinaus können Sie auch alles rechts von Ihrem Cursor löschen, indem Sie Folgendes zuordnen:

+ fn+ ←Deleteoder + Delete→um Hex-Codes zu senden:

0x0b

Ich schrieb einen umfassenden Leitfaden für das Hinzufügen meisten OSX Standard Keybinding zu Ihrem Terminal Hinzufügen hier

Travis
quelle
Interessant. Diese Hex-Werte entsprechen Strg + X (Abbrechen), ENTF (siehe ASCII-Diagramm). Es ist ziemlich vernünftig, diese Sequenz als eine wirksamere Form von DEL zu interpretieren, obwohl dies das erste ist, von dem ich höre. Wenn ich es jedoch in das Terminal eingebe (ohne irgendwelche Bindungen zu setzen, unter Linux), piept Zsh mich nur an und Bash fügt nur ein ein ^Xund dann löscht die Rücktaste es einfach . Ich habe dies mit einer Tastenkombination in iTerm versucht (die die Sequenz ohne menschliche Verzögerung zusammen sendet) und sehe das gleiche Verhalten. Dies zeigt mir, dass Bash auch eine Bindung dafür erfordern würde.
Steven Lu
Aber Sie haben vollkommen Recht, das backward-kill-lineist derjenige, mit dem Sie echte Parität herstellen können ⌘ + ←Delete. Die zusätzliche Konfiguration ist nur ein bisschen umständlich, aber überhaupt nicht schlecht.
Steven Lu
Aus irgendeinem Grund wird es aus der Geschichte gelöscht. Wenn ich den Pfeil nach oben benutze, bekomme ich den Eintrag, den ich gelöscht habe, nicht mehr
Xitcod13
35

In OSX sind ⌥ + ⌫ und ⌘ + ⌫ die Verknüpfungen zum Löschen eines Wortes bzw. einer Zeile. ⌘ + ← und ⌘ + → stehen für den Anfang und das Ende von Zeilen. Standardmäßig ist iTerm2 nicht auf diese Weise konfiguriert, und es sind viele irreführende Anleitungen online. Folgendes habe ich auf meinem Computer gefunden.

  1. Öffnen Sie die Einstellungen (⌘ +,) und wechseln Sie zur Registerkarte Schlüssel.
  2. Fügen Sie eine globale Tastenkombination hinzu und geben Sie einfach Ihre Tastenkombination ein
  3. Wählen Sie in der Dropdown-Liste Aktion die Option Hex-Code senden aus

Die Hex-Codes für ...

  1. Ein Wort löschen: 0x17.
  2. Zeile löschen: 0x15.
  3. Zum Zeilenanfang gehen: 0x01.
  4. Zum Ende der Zeile gehen: 0x05. Öffnen Sie einfach einen neuen Tab und es sollte funktionieren!

Hier ist ein Screenshot zur Verdeutlichung: Alt-Text

Ryan Efendy
quelle
du hast meinen Tag gerettet!
Jerry
25

Unter Mac OS verwenden die meisten Editoren die allgemeine Verknüpfung + Delete: Löschen zum Zeilenanfang. In iTerm2 können wir zu dieser Tastenkonfiguration wechseln

Geben Sie hier die Bildbeschreibung ein

Shawn Wang
quelle
Das ist toll. Ich habe manuell Voreinstellungen hinzugefügt, um "Natural Text Editing" zu erhalten, und diese Voreinstellung hat alles, was ich brauche, auf einmal geladen.
Claviska
15

Ich hoffe das kann dir helfen

map ⌥ <- Löschen, um Hex-Codes zu senden: 0x1B 0x08

Ich hatte einen Test dafür und es ist richtig.


18.09.2013 Update

Dadurch wird ein Wort gelöscht, keine Zeile.

JZAU
quelle
1
Das ist interessant! Was Sie beschreiben, entspricht Alt + Strg + H, was mein spezielles PuTTY-Setup auch beim Drücken von Alt + Strg + Rücktaste verursacht. In meiner zsh-Shell wird ein Wort (nicht die gesamte Zeile) zurückgesetzt.
Steven Lu
Ich werde bemerken, dass Strg + H ^Hfür viele Terminals eigentlich "Rücktaste" bedeuten soll. Das Alt- / Meta- / Escape-Präfix, das daraus ein "Kill-Word" macht, erscheint sinnvoll, obwohl nicht klar ist, wie weit es unterstützt wird.
Steven Lu
1
Es löscht ein Wort, keine Zeile, aber genau das, wonach ich gesucht habe :)
Hyouuu
Danke, danke, danke, danke, danke. Ich habe keine Ahnung, was sich geändert hat, aber dies war das genaue Verhalten auf meinem alten Mac (und tatsächlich funktioniert es in diesem Textfeld), aber aus irgendeinem Grund war dies auf meinem neuen Mac völlig anders. Jeder andere Vorschlag veranlasste es, "foo / bar / baz" als ein Wort anstatt als 3 zu behandeln.
Dan
4

Wie gezeigt ^Ulöscht die Linie. Sie können den Befehl einfach mit dem Better Touch Tool neu zuordnen .

Es hat auch coole Funktionen für die Automatisierung, Maus-, Pad- und Tastaturzuordnung. Enthält auch eine Fensterfunktion für intelligente Rahmen.

Rudolf Real
quelle
Ich denke, einige Leute suchen nach einer integrierten Lösung und möchten keine zusätzlichen Tools verwenden, daher die Abwertung. Leider ist dies nicht immer möglich und das Delegieren an ein zweites Tool ist ein guter Cheat.
Rudolf Real