Backspace 在 tmux 命令提示符下不起作用

Gre*_*uhl 3 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 ^?)
Run Code Online (Sandbox Code Playgroud)

我还尝试将.tmux.conf如下所示的 Backspace 键绑定到C-hand C-?,两者都不起作用。 :list-keys在 tmux 内确认映射正在发生。

bind-key -n BSpace send-keys C-?
Run Code Online (Sandbox Code Playgroud)

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

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

Jor*_*del 13

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

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

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

确保tic(这是用于安装终端信息的工具)位于/usr/bin

$ which tic
/usr/bin/tic
Run Code Online (Sandbox Code Playgroud)

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

export PATH="/usr/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

给我的.zshrc

获取终端描述:

$ curl -LO https://invisible-island.net/datafiles/current/terminfo.src.gz && gunzip terminfo.src.gz
Run Code Online (Sandbox Code Playgroud)

安装它们(sudo如果您想为所有用户执行此操作,请以 root 身份执行此操作(通过在前面加上 ):

$ /usr/bin/tic -xe tmux-256color terminfo.src
$ sudo /usr/bin/tic -xe tmux-256color terminfo.src
Run Code Online (Sandbox Code Playgroud)

这个错误:

"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
Run Code Online (Sandbox Code Playgroud)

没什么好担心的。

现在

infocmp -x tmux-256color 
Run Code Online (Sandbox Code Playgroud)

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

set-option default-terminal "tmux-256color"
Run Code Online (Sandbox Code Playgroud)

~/.tmux.conf

确保至少不丢失以下输出之一:

$ tmux info | grep -e RGB -e Tc
Run Code Online (Sandbox Code Playgroud)

如果它们都丢失了,你必须执行以下三项之一:

set-option -a terminal-overrides ",XXX:RGB"
set-option -a terminal-overrides ",*256col*:RGB"
set-option -a terminal-overrides ",alacritty:RGB"
Run Code Online (Sandbox Code Playgroud)

其中 xxx 类似于 xterm-256color (你的终端类型),星号进行模式匹配,最后一个认识到它可能是其他东西(我的是xterm-kitty),但我不确定放在这里到底是什么,因为 sgrep我did for Tc 返回 true。

好吧,应该可以了!该代码直接取自要点,因此所有功劳都归于该作者。将其包含在这里,以防要点以某种方式被删除。


小智 6

正如我从Backspace 中得到的不良行为 #321

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

从:set -g default-terminal "tmux-256color" 更改为: set -g default-terminal "xterm-256color"

这解决了问题。完全删除这条线也有效,但最好是明确的。

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

tmux kill-server
Run Code Online (Sandbox Code Playgroud)

以使更改生效。


Ko1*_*103 6

这对我来说有效。

  1. 添加set -g default-terminal "xterm-256color"到 tmux.conf
  2. 重新打开 tmux 会话。


Gre*_*uhl 3

$TERM问题是因为我的设置、我的.Xdefaults、终端的键绑定(我使用konsole)和tmux发送的内容之间不匹配。我的具体修复需要将 Backspace 设置为^?“到处”而不是“NOT” ^h。此外,tmux$TERM最好设置为 screen-256colors 或 tmux-256colors,因此您需要确保这些终端模式可以看到正确的键映射。

在我的 中.Xdefaults,请注意,这适用于所有 VT100,而不仅仅是 XTerm*VT100,因为我希望 screen、tmux 和 konsole 看到这些条目:

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

*ttyModes: erase ^?
Run Code Online (Sandbox Code Playgroud)

我还必须修复我的绑定键~/.cshrc

bindkey -a "\e[3~" delete-char
stty erase ^?
Run Code Online (Sandbox Code Playgroud)

...并且还将类似的条目添加到~/.inputrc文件中(konsole 读取):

"\e[3~": delete-char
Run Code Online (Sandbox Code Playgroud)