退格键在tmux命令提示符下不起作用

时间:2018-07-24 00:38:47

标签: tmux

tmux命令提示符下的Backspace键出现问题。退格键删除tmux中的先前字符(按预期方式),但不会删除tmux命令提示符上的字符。例如,<PREFIX>:lists<DEL>不会删除's'字符。在这种情况下,使用C-h代替Delete键删除's'字符。 C-?不会删除's'字符。我已经在tmux窗口中完成了一些调试:

$TERM=screen-256color
infocmp reports kbs=\177                  (good)
appres XTerm | grep backarrowKeyIsErase   reports as true (good)
appres XTerm | grep ptyInitialErase       reports as true (good)
stty -a | grep erase                      reports as "^H" (bad, I think I want ^?)

我还尝试将.tmux.conf中的Backspace键绑定到C-hC-?上,如下所示,但都无效。 tmux中的:list-keys确认映射正在发生。

bind-key -n BSpace send-keys C-?

在调用stty erase ^?之前和之后,我也完成了tmux的操作,但这并不影响行为。最后,我完全删除了.tmux.conf,但仍然得到相同的行为。

命令行是否使用了会影响BSpace功能的另一组键绑定?

4 个答案:

答案 0 :(得分:1)

问题是因为我的$TERM设置,我的.Xdefaults,终端的键盘绑定(我使用konsole)和任何tmux发送之间都不匹配。我的特定修复要求在所有位置都将Backspace设置为^?,而不是^h。此外,tmux的$TERM最好设置为screen-256colors或tmux-256colors,因此您需要确保这些终端模式可以看到正确的按键映射。

在我的.Xdefaults中,请注意,这适用于所有VT100,而不仅仅是XTerm * VT100,因为我希望屏幕,tmux和konsole能够看到以下条目:

*VT100.Translations: #override \n\
   <Key>BackSpace:       string(0x7F) \n\
   <Key>Delete:          string("\033[3~")

*ttyModes: erase ^?

我还必须在~/.cshrc中修复绑定键:

bindkey -a "\e[3~" delete-char
stty erase ^?

...,还向~/.inputrc文件添加一个类似的条目(konsole读取):

"\e[3~": delete-char

答案 1 :(得分:1)

我从Backspace bad behaviour #321那里得到的信息:

每当我进入tmux会话时,我都会遇到相同的问题(使用退格键并从自动完成中获取附加字符)。我删除了.tmux.conf,问题消失了,所以我在.tmux.conf中更改了以下内容

从:设置-g默认终端“ tmux-256color”更改为:设置-g 默认终端“ xterm-256color”

这解决了问题。完全删除此行也可以,但是 明确一点似乎更好。

对我有用。 注意:更改设置后,您可能需要运行

tmux kill-server

使更改生效。

答案 2 :(得分:1)

很多答案对我都不起作用,但我终于找到了适用于 MacOs 的 Gist。这里的重点是 RGB 颜色,但我认为在 set-option default-terminal "screen-256color" 中使用 .tmux.conf 时颜色关闭和退格键不起作用的根本原因是您的计算机缺少有关 {{1 }} 终端,您必须手动安装。与在不同的配置文件中到处添加代码行并祈祷一切正常相比,这是一个更强大和全面的解决方案。

https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95

这个想法是 MacOS 自然没有最新的 ncurses 程序/没有对 tmux 终端的正确描述,因此您必须自己下载并安装它。这些步骤直接取自 Gist:

确保tmux(用于安装终端信息的工具)位于tic

/usr/bin

就我而言并非如此,所以我添加了

$ which tic
/usr/bin/tic

到我的export PATH="/usr/bin:$PATH"

获取终端描述:

.zshrc

安装它们(如果您想为所有用户安装,请以 root 用户身份安装(通过添加 $ curl -LO https://invisible-island.net/datafiles/current/terminfo.src.gz && gunzip terminfo.src.gz ):

sudo

这个错误:

$ /usr/bin/tic -xe tmux-256color terminfo.src
$ sudo /usr/bin/tic -xe tmux-256color terminfo.src

没什么好担心的。

现在

"terminfo.src", line 1650, terminal 'pccon+base': enter_bold_mode but no exit_attribute_mode
"terminfo.src", line 1650, terminal 'pccon+base': enter_reverse_mode but no exit_attribute_mode

应该显示一些输出 然后添加

infocmp -x tmux-256color 

set-option default-terminal "tmux-256color"

确保这些输出中至少有一个没有丢失:

~/.tmux.conf

如果它们都不见了,您必须执行以下三个操作之一:

$ tmux info | grep -e RGB -e Tc

其中 xxx 类似于 xterm-256color(您的终端类型),星号进行模式匹配,最后一个识别出它可能是其他东西(我的是 set-option -a terminal-overrides ",XXX:RGB" set-option -a terminal-overrides ",*256col*:RGB" set-option -a terminal-overrides ",alacritty:RGB" )但我不确定在这里放什么,因为我为 Tc 做的 ```grep`` 返回 true。

好吧,应该这样做!该代码直接取自 Gist,因此所有功劳都归功于该作者。将其包括在此处以防 Gist 以某种方式被删除。

答案 3 :(得分:0)

对我来说,退格在 vim 中有效,但在 vim + tmux 中无效。超级用户的这个答案修复了它 [1] - 链接在这里。

<块引用>

您可以将退格键映射到您需要的位置,就像凯文所说的那样。看起来您需要将其映射到 ^? (而不是^H)

为此,请使用以下命令:

stty erase "^?"

这可以添加到您的启动脚本(.login 或 .tcshrc 或 .bashrc,或其他文件,具体取决于您使用的 shell)。

[1] https://superuser.com/a/793283/1012390