Emacs Python-mode 语法高亮
我在一台运行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 个回答
我刚刚在我的 .emacs 文件里添加了
(set-face-foreground 'font-lock-comment-face "red")
这段代码。
我没有你们用的程序,所以不能测试这个,不过我注意到在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应该可以做到这一点。
祝你好运!
对我来说,在 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