Emacs Python-mode 语法高亮

7 投票
3 回答
5869 浏览
提问于 2025-04-16 13:17

我在一台运行Ubuntu 10.04的桌面电脑上安装了GNU Emacs 23(包名是emacs23),在一台没有图形界面的Ubuntu 10.04服务器上安装了emacs23-nox。这两台机器上都有相同的~/.emacs文件。我在两台电脑上都用-nw来运行Emacs。我没有在任何一台机器上安装python-mode,因为我了解到这个功能在Emacs 23中是自带的。

在桌面电脑上,Python中的注释(以#开头)会被高亮显示为红色。而在服务器上,注释则是普通的白色文本,看起来和其他没有高亮的文本一样。有没有人能给点建议,为什么服务器上的注释没有正确高亮显示(nox版本)?

更新:这似乎是个终端相关的问题。我通过byobu这个屏幕替代工具,从terminator远程登录到服务器。如果我在服务器上用TERM="xterm-256color" emacs来运行Emacs,注释就会高亮显示,但其他颜色看起来就很奇怪。

更新:添加export TERM="xterm-256color"解决了这个问题。不过语法高亮的颜色看起来很奇怪:紫色、淡紫色和浅棕色。我的当前行高亮条现在变成了浅黄色/绿色。虽然注释是红色的,但其他颜色就不太对劲了 :)

更新:解决了。设置TERM="xterm-color"后,颜色就正常了,包括注释的高亮显示。服务器默认的TERM值是“screen-bce”,这个设置没有高亮注释。

更新:未解决。 byobu提供了各种功能键的快捷键,可以方便地创建新的屏幕会话并在它们之间切换。当TERM设置为xterm-color时,这些功能键就失效了。所以我想我只能接受在Emacs中Python代码的注释不高亮了。

3 个回答

1

我刚刚在我的 .emacs 文件里添加了

(set-face-foreground 'font-lock-comment-face "red")

这段代码。

2

我没有你们用的程序,所以不能测试这个,不过我注意到在screen-bce和xterm-color之间,功能键的定义有些不同。你可以试试下面的步骤,把screen-bce的设置复制到xterm-color。

使用infocmp这个程序,你可以查看两个TERM设置之间的terminfo设置差异:

infocmp -d screen-bce xterm-color

你可以用infocmp把terminfo文件解码成源代码,然后对它进行修改,试着让它的行为和另一个终端一样。首先,解码xterm-color的terminfo文件。

infocmp xterm-color > xterm-color.src

编辑xterm-color.src文件,把kf1到kf19这些功能键的定义改成和screen-bce一样。用infocmp查看screen-bce的定义。

infocmp screen-bce

最后,使用tic程序来编译。

tic xterm-color.src

如果你以非管理员用户身份运行,它会把编译好的terminfo文件放到$HOME/.terminfo目录下。在我的系统上,似乎Ubuntu会自动识别这个文件。等你满意了,也可以把它安装到标准的/usr/share/terminfo目录下。以管理员身份运行tic应该可以做到这一点。

祝你好运!

2

对我来说,在 byobu 里面运行 emacs -nw 并设置 TERM=xterm 可以让语法高亮显示正确的颜色(比如 Python 和 Bash 的注释部分都是红色,而不仅仅是 # 符号),而且功能键也能正常使用。需要注意的是,我是把 TERM 设置成一个别名来运行 emacs,而不是在 .bashrc 文件里全局设置:

alias emacs='TERM=xterm; emacs -nw'

另外,可以参考这个帖子:Terminal emacs colors only work with TERM=xterm-256color

撰写回答