我在 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-h
and 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)
以使更改生效。
$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)
归档时间: |
|
查看次数: |
4439 次 |
最近记录: |