我在使用 emacs 时遇到了这个奇怪的问题,非常希望得到帮助。我在 Windows PC 上的 VirtualBox 上设置的 ubuntu 服务器上的终端中运行 emacs。我尝试了 Cygwin 和 Git-Bash(两者都有 mintty),但在两个终端上都遇到了同样的问题。
我遇到的问题是,当我激活我的 emacs 自定义主题之一时,文本会变得乱码且无法阅读。它主要是注释文本,似乎与其他文本融合在一起。但是,当我切换到 emacs 自带的默认主题之一时,问题就消失了。所以这似乎是自定义主题(gotham 和整个 tomorrow-night 包)的问题,因为我还注意到自定义主题受到我使用的 mintty 主题的影响,而标准 emacs 主题不受这些影响。因此,当我启用 gotham 主题时,我打开 mintty 选项并在那里切换颜色主题,gotham 的颜色也会受到影响。如果我尝试对例如 wombat 主题(随 emacs 一起提供)执行相同操作,更改 mintty 主题对 emacs 颜色完全没有影响。
我认为问题与 emacs 主题有关。问题不应该来自使用 mintty 主题,因为我尝试过使用默认选项(仅启用 xterm-256color)启动终端,但自定义 emacs 主题也出现了同样的问题。这可能是 xterm-256color 的问题,但我无法检查这一点,因为当仅启用标准 8 位颜色时,emacs 根本不会加载任何主题。但再说一次,如果 mintty 有问题,那么所有 emacs 主题都应该受到影响,而不仅仅是我下载的自定义主题。
所以我想知道是否有人知道在 emacs 配置或主题文件本身中是否有任何设置允许 emacs 忽略终端颜色?任何建议都将不胜感激。我目前正在分析标准 emacs 主题与自定义 emacs 主题,看看是否能找到任何东西,但我对 lisp 不够熟悉,无法真正理解我在寻找什么。
更新 - 经过更多尝试后,我发现有问题的主题似乎缺失或无法加载一些颜色。我在用 滚动浏览不同主题时看到了这一点M-x customize-themes
。一些主题会保留以前工作主题的一些背景和文本颜色,并将它们混合在一起,从而产生乱码文本。无法阅读的文本以不同的颜色和字体打印在两层上。
答案1
使用 tmux 实现斜体显示
由于 mintty 支持斜体2.7.6
简短而甜蜜的答案
编辑 $TERM.terminfo 以包含
sitm=\E[3m
&ritm=\E[23m
然后重新编译tic
编辑你的 .tmux.conf(我更改了默认副本和用户副本)以包含:
set -g default-terminal "tmux-256color"
rm -rf /tmp/tmux-*
然后重新启动 tmux 服务器就可以工作了。免责声明:我只在 cygwin 上测试过,没有在实际的 Linux 系统上测试过。
背景故事和冗长的解释。
我今天花了大约一个小时来解决这个问题,希望它能帮助其他人更快地解决这个问题。
简短而甜蜜的背景;我安装了一个大量使用斜体的新配色方案。
和大多数事情一样,总会有麻烦。配色方案与我的 cygwin 设置配合得很好,没有任何问题直到我打开了 tmux。Tmux 确实无法很好地处理语法高亮或斜体(无需配置)。所以接下来要做的是进行一些研究。在我的旅行中,我遇到了以下这些很少 链接。
第一个链接到第二个,从技术上讲,它包含了解决我的问题所需的所有信息。不过,这对我来说不太可接受,因为第一个要求你编写自己的特殊 terminfo 文件,一旦你开始 ssh 到其他地方,该文件将无法识别。所以这完全正确,但我想可能有一种方法可以编辑当前终端的 terminfo 来添加斜体支持。经过进一步的研究,我发现这这正是我所寻找的,但并没有彻底解决问题。
出于直觉,我去了 tmux 的 github 项目并搜索了“斜体”,然后找到了问题 #1137。我建议通读整个帖子,因为除了斜体字之外,它还有一些非常有用的信息。
将我的 .tmux.conf 中的 $TERM 值更改为“tmux-256color”并将rm -rf
tmux 目录置于 tmp 中后,tmux 启动并显示所有斜体!
答案2
解决了!这个问题出现在一些使用斜体的主题中,这显然破坏了文本的渲染。我认为在这种情况下问题可能是由 Mintty 引起的,但我不确定。在更改主题中所有字段后,问题已:slant italic
解决:slant normal
。
我也发现了这个解释https://github.com/mintty/mintty/issues/152:
问题是,终端基本上是为矩形字符单元设计的,因此倾斜的字母并不适合。在 mintty 中尝试斜体字体时,部分字母会超出其字符单元的范围,因此它们最终也会被切断或无法正确擦除。”
编辑:查看其他答案以寻求解决方案。我的答案更多是一种解决方法,而不是实际修复。