绑定 Shift-Enter 以插入换行符而不评估当前表达式

lor*_*age 5 bash xterm vi xmodmap

我尝试绑定Shift-Enter以插入换行符而不评估终端和 repl 模式中的当前表达式。通过阅读ArchWiki,我想在我的设置这个~/.Xmodmap文件并重新装载~/.Xmodmapxmodmap ~/.Xmodmap。然而,这不起作用。这是我的详细设置:

内容:

    ~/.Xmodmap:
    keysym Return = Return Linefeed
Run Code Online (Sandbox Code Playgroud)

~/.Xmodmap 通过设置登录时自动获取资源:

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

    fi
Run Code Online (Sandbox Code Playgroud)

在我的~/.xinitrc.

其他相关信息:

(1) 我在我~/.bashrc和我的~/.inputrc. 然而,当去掉这些选项时,结果并没有什么不同。

(2)这里keysym Return = Return Linefeed建议使用。* 其他方法也不起作用。

(3) 我$TERM的设置为xterm-256color

谢谢你的帮助!


*更新:此页面上建议的解决方案(如果仍未找到)无法在此处讨论的特定情况下工作,因为编程语言正在使用其自己的 repl 实现。所以这与手头的案件没有任何关系。

Gil*_*il' 4

简单的答案是输入Ctrl+ V Ctrl+ J

\n\n
\n\n

绑定Shift+Return使其Linefeed发送^J= control-J == \\n(而\\012不是^M== )。这只是您需要做的一部分:默认情况下,两个键都绑定到执行 bash 中的当前行。您需要更改 ^J 的绑定以插入文字 ( = ) 换行符:\\r\\015.inputrc^V\\026

\n\n
"\\n": self-insert\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,将密钥绑定在您的.bashrc

\n\n
bind -m vi-command \'"\\n": self-insert\'\nbind -m vi-insert \'"\\n": self-insert\'\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

Shift将+更改ReturnLinefeed可能会产生不良副作用 \xe2\x80\x94 通常,将Shift+Return等同于很有用Return,这样即使在停机时也可以Return快速键入。Shift我建议改为更改Ctrl+Return以在 XTerm 中插入换行符。您可以在您的~/.Xresources(或您放置 X 资源的任何地方)执行此操作:

\n\n
XTerm.vt100.translations: #override Ctrl<Key>Return: string("\\012")\n
Run Code Online (Sandbox Code Playgroud)\n