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-h
和C-?
上,如下所示,但都无效。 tmux中的:list-keys
确认映射正在发生。
bind-key -n BSpace send-keys C-?
在调用stty erase ^?
之前和之后,我也完成了tmux
的操作,但这并不影响行为。最后,我完全删除了.tmux.conf
,但仍然得到相同的行为。
命令行是否使用了会影响BSpace功能的另一组键绑定?
答案 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)。