kjo*_*kjo 7 gnu-screen terminal emacs
(编辑以阐明 Emacs 在显示问题中的作用。)
我当前的gnu-screen
会话不知何故损坏了,Emacs 无法正确显示 UTF-8 字符。
我已经确认,在新启动的gnu-screen
进程中,Emacs 正确显示 UTF-8 字符,但目前gnu-screen
用新会话替换损坏的会话会非常具有破坏性,而是
我正在寻找进一步解决此损坏
gnu-screen
会话问题的方法,并希望能够解决它。
FWIW,我在下面提供了更多背景信息,包括对我迄今为止为诊断问题所做的工作的描述。
gnu-screen
几天前我在我的OS X工作站上开始了这个会话
% screen -U
Run Code Online (Sandbox Code Playgroud)
...(就像我一直做的那样)。从那以后,我ssh
使用
% screen -U -dR
Run Code Online (Sandbox Code Playgroud)
(同样,这是我一直在做的)。今天早上我在我工作的工作站(gnu-screen
进程实际运行的机器)上做了这件事。
今天,自从我创建这个gnu-screen
会话以来,我第一次需要处理包含大量非 ascii UTF-8 字符的文件。就在那时,我发现这个gnu-screen
会话一定以某种方式被破坏了,因为它将所有这些字符显示为?
,导致无法使用的显示。
(正如我已经提到的,这些 UTF-8 丰富的文件可以通过新启动的gnu-screen
会话正确显示,所以我很确定显示问题gnu-screen
出在我称之为“损坏”的特定会话中。另外,我确认“???
显示”出现在我附加gnu-screen
会话的每个终端中,因此问题不在于托管gnu-screen
会话的终端程序。最后,我还确认问题不在于某个特定的 Emacs 会话:损坏的gnu-screen
会话,每个新的 Emacs 会话都将 UTF-8 字符显示为?
,这与特定 Emacs 会话的问题相反。)
我已经确认这utf8
是on
通过运行
:utf8 on on
Run Code Online (Sandbox Code Playgroud)
的输出:info
是
(1,5)/(210,52)+10000 +(-)flow app log UTF-8 0(zsh)
Run Code Online (Sandbox Code Playgroud)
而且,FWIW:
% /usr/local/bin/screen --version
Screen version 4.00.03 (FAU) 23-Oct-06
Run Code Online (Sandbox Code Playgroud)
另外,我应该指出新的
我还能做些什么来解决这个问题?
更新: Drav Sloan 和 Stephane Chazelas 都询问了我的语言环境设置:
% locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
目前,对于 OS XI,不要设置任何与语言环境相关的变量。
在 Linux 系统上,我.zshenv
确实设置了
export LANG=en_US.utf8
export LC_ALL=en_US.utf8
Run Code Online (Sandbox Code Playgroud)
...但如果我在 Darwin 上的 .zshenv 中放置相同的行,我会收到错误消息,大意是“设置语言环境失败”。我依稀记得为 Darwin/Lion 找到正确的语言环境设置的问题而痛打了几个小时。“不设置任何内容”可能是解决问题的“最不可怕”的解决方案,毕竟gnu-screen
,即使没有明确的语言环境设置,至少新会话确实可以正确显示 UTF-8 字符。但显然我需要弄清楚如何在 Darwin/Lion 中正确设置语言环境...
UPDATE2: 好的,我想我找到了上面提到的错误的原因:在 Darwin/Lion 中,字符串en_US.utf8
无效;相反,它应该是en_US.UTF-8
。
小智 4
我在运行时遇到了同样的问题:
git clone https://github.com/jwiegley/git-scripts.git
cd git-scripts
perl git-forest
Run Code Online (Sandbox Code Playgroud)
我用这个作为我的测试。基本上,如果你正确设置了 utf8,你应该会得到漂亮的线条。如果没有,你会得到丑陋的盒子或字符。
解决方案是您需要在开始新屏幕会话之前LC_ALL
设置为。创建屏幕会话后我厌倦了这样做,但运气不佳。en_US.UTF-8
以下是我为实现此目的所遵循的步骤:
1)运行locale
查看当前设置。我得到了这个(这解释了为什么我遇到问题:
LANG=en_US.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
Run Code Online (Sandbox Code Playgroud)
2)在创建新的screen session之前,需要重新定义LC_ALL
为en_US.UTF-8
如果你使用的是csh
shell
setenv LC_ALL en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
如果你使用的是bash
shell
export LC_ALL="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)
3)再次运行来 验证LC_ALL
设置是否正确locale
:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
4)现在运行一个新的屏幕会话并运行测试git-forest
,您应该看到漂亮的线条