在编写程序时,总是习惯在文件的左侧显示行号以方便查看(估计是有强迫症了)。Emacs中使用linum提供了这样的功能,在GUI下面显示一切正常,但是在终端中显示时,文件内容与行号靠得太近,不容易区分。而Vim无论在GUI下还是终端下都能提供额外的空格区分行号的文件内容。因此,我想在终端下实现类似Vim的显示效果。
在进行一番搜索后,发现可以通过设置linum-format格式来实现这样的效果,命令如下:
(setq linum-format "%d ")备注:format的格式可以通过命令C-h v format查看。
但是,由于Emacs终端和GUI程序共用一个配置文件,因此GUI显示中就会在行号后多出一个空格,个人觉得很不爽。
之前在配置Vim的时候也遇到过终端和GUI需要不同配置的情况,因此就想通过针对终端和GUI来实现不同的配置。Emacs默认提供的是GUI界面的应用程序,但是可以通过命令行参数-nw, --no-window-system让其运行在终端下。我想命令行参数应该是在启动的时候进行解析的,因此就翻看了startup.el文件,发现它提供了一个window-system变量指定显示的框架。在Emacs使用C-h v windows-system查看该变量的定义,如下所示:
window-system is a variable defined in `C source code'. Its value is x It is a terminal-local variable; global value is the same. Documentation: Name of window system through which the selected frame is displayed. The value is a symbol: nil for a termcap frame (a character-only terminal), 'x' for an Emacs frame that is really an X window, 'w32' for an Emacs frame that is a window on MS-Windows display, 'ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display, 'pc' for a direct-write MS-DOS frame. Use of this variable as a boolean is deprecated. Instead, use `display-graphic-p' or any of the other `display-*-p' predicates which report frame's specific UI-related capabilities.于是我在Emacs的配置文件中加入下面的代码,希望能满足我的要求,
(if (eq (window-system) nil) (setq linum-format "%d "))经测试,一切正常,但是美中不足的是终端中对齐采用的是左对齐,我的强迫症又犯了 :( 于是又开始找寻右对齐的方式。发现原来大牛们都觉得linum的速度太慢了,都改换了nlinum,于是我也赶紧换掉,安装了nlinum,然后修改配置为:
(global-nlinum-mode t) (if (eq (window-system nil) (setq nlinum-format "%d "))赶紧测试一下,并没感觉速度有多块,估计我是我文件太小了。虽然速度没体验到,但却满足了我右对齐的要求 :),也还不错啦。