Binden von Umschalt-Eingabe zum Einfügen einer neuen Zeile ohne Auswertung des aktuellen Ausdrucks

Binden von Umschalt-Eingabe zum Einfügen einer neuen Zeile ohne Auswertung des aktuellen Ausdrucks

Ich versuche, Shift-Entereine neue Zeile einzufügen, ohne den aktuellen Ausdruck im Terminal und im Repl-Modus auszuwerten. Beim Durchlesen derArchWiki, ich habe versucht, dies in meiner ~/.XmodmapDatei festzulegen und ~/.Xmodmapmit neu zu laden xmodmap ~/.Xmodmap. Dies funktioniert jedoch nicht. Hier ist mein detailliertes Setup:

Inhalt von:

    ~/.Xmodmap:
    keysym Return = Return Linefeed

~/.Xmodmapwird beim Anmelden automatisch durch folgende Einstellung bereitgestellt:

    if [ -s ~/.Xmodmap ]; then
        xmodmap ~/.Xmodmap

    fi

in meinem ~/.xinitrc.

Weitere relevante Informationen:

~/.bashrc(1) Ich habe in meinen und meinen den vi-Bearbeitungsmodus aktiviert ~/.inputrc. Die Ergebnisse unterschieden sich jedoch nicht, als ich diese Optionen herausnahm.

(2) Die Verwendung keysym Return = Return Linefeedwurde vorgeschlagenHier.* Andere Methoden haben auch nicht funktioniert.

(3) Mein $TERMist auf eingestellt xterm-256color.

Vielen Dank für jede Hilfe!


*Update: Die auf dieser Seite vorgeschlagene Lösung (sofern sie noch zu finden ist) kann im dort diskutierten konkreten Fall nicht funktionieren, da die Programmiersprache eine eigene Repl-Implementierung verwendet. Dies hat also keinen Einfluss auf den vorliegenden Fall.

Antwort1

CtrlDie einfache Antwort ist, + V Ctrl+ einzugeben J.


Durch die Bindung Shift+ Returnan Linefeedwird ^J= control-J = \n= gesendet \012(anstatt ^M= \r= \015). Das ist nur ein Teil dessen, was Sie tun müssen: Standardmäßig sind beide Tasten an die Ausführung der aktuellen Zeile in Bash gebunden. Sie müssen die Bindung für ^J ändern, um eine wörtliche ( = ) neue Zeile .inputrceinzufügen :^V\026

"\n": self-insert

Alternativ können Sie den Schlüssel in Ihrem .bashrc: binden.

bind -m vi-command '"\n": self-insert'
bind -m vi-insert '"\n": self-insert'

Das Ändern von Shift+ Returnin Linefeedkann unerwünschte Nebeneffekte haben – es ist oft nützlich, Shift+ Returnals Äquivalent zu zu haben Return, damit Sie Returnschnell tippen können, auch wenn Shiftes nicht erreichbar ist. Ich würde stattdessen empfehlen, Ctrl+ in zu ändern Return, um in XTerm einen Zeilenvorschub einzufügen. Sie können das in Ihrem tun ~/.Xresources(oder wo auch immer Sie Ihre X-Ressourcen ablegen):

XTerm.vt100.translations: #override Ctrl<Key>Return: string("\012")

verwandte Informationen