解决fedora的cscope默认使用了vi(同时设置emacs为用户默认编辑器)

问题说明:

我以前是使用debian系统的,最近新安装了Fedora-19系统,发现cscope默认不使用vim而使用vi,但是系统确实是默认使用vim的。所以想把cscope的默认编辑器问题解决了,或者干脆改成让用户默认使用emacs。


if 不想看原因分析,then

      可以跳过“原因分析”一段。

else if 喜欢使用vim,then

      直接看“默认使用vim”一段不用看别的。

else if 喜欢使用emacs,then

     if 想直接看怎么做的,then

            直接看最后一段“我的简陋做法”

     fi

     从“默认使用emacs的问题”开始看

fi



###### 原因分析 ######

以前使用debian 6,在Debian6系统下/usr/bin/vi是一个符号连接,如果你没有装vim那这个符号连接就指向vi(好像是一个叫vi.tiny的东西,记不清了),如果你装了vim那么这个符号连接就指向vim(好像是vi.basic)。因为现在转投redhat了,所以使用RHEL系统或者使用Fedora系统就成了必然的选择。


两个月前装了Fedora-19,在命令行上敲vi编辑一个文件还好,都是打开的vim。但是我很喜欢使用cscope翻阅代码,cscope有很多环境变量,其中有三个如下:


       CSCOPE_EDITOR
              Overrides the EDITOR and VIEWER variables. Use this if you wish to use a different editor with cscope than that  specified  by  your
              EDITOR/VIEWER variables.


       EDITOR Preferred editor, which defaults to vi.


       VIEWER Preferred file display program (such as less), which overrides EDITOR (see above).


这三个环境变量是说明cscope使用哪个编辑器来打开文件的。大致的意思是EDITOR变量可以定义使用哪个编辑器,如果未定义那么默认是使用vi作为编辑器。VIEWER变量的定义可以覆盖EDITOR定义,作为仅仅显示程序时使用的查看器。CSCOPE_EDITOR变量可以覆盖上面两个变量,可以使用它定义一个区别于系统或用户默认的编辑器。


好了,现在问题来了,我没有定义过这些变量,当我使用cscope时每次都用vi给我打开文件,注意是用vi打开的,连vim都不是。作为一个emacs党,使用vim打开大概看一下代码也就算了,还可以接受,但是使用vi打开实在是接受不了。今天终于得空看了一下问题到底出在哪,平时使用vi直接打开文件时都是自动用的vim,怎么到了cscope这就不给力了呢?


原来Fedora19用了和debian不一样的处理(上面已经说了debian怎么处理的vim和vi了),在Fedora19上/usr/bin/目录下存在这vi和vim两个文件:

-rwxr-xr-x. 1 root root  870696 9月  11 20:29 /usr/bin/vi

-rwxr-xr-x. 1 root root 2253096 9月  11 20:29 /usr/bin/vim

注意这两个文件都是普通文件,都不是符号连接,这点是和Debian不同的。Debian是把/usr/bin/vi做成符号连接,如果装了vim就指向vim的实体程序,如果不装vim就指向vi的实体文件(当然你也可以字节更改)。这样你每次都使用/usr/bin/vi,但实际访问的程序已经不一样了。不过Fedora既然不是这样做的,那估计它就是是用alias做了咯。在终端执行一下which vi可以看到:

alias vi='vim'
    /usr/bin/vim

这就解释了为什么在终端执行vi的时候都是自动使用vim了,但是为什么cscope还是使用vi呢,那就有一种可能解释:cscope不信alias这一套,它会根据上面那几个环境变量的定义自己根据PATH变量来找到是哪个程序。也就是说EDITOR默认是vi,那么cscope就找到了/usr/bin/vi作为它的编辑器。因为debian下/usr/bin/vi是个符号连接,当这个符号连接指向真正的vim时cscope实际上还是使用了vim。但是Fedora-19不是这样,它的/usr/bin/vi就是真正的vi,所以它就只能使用vi了。


######  默认使用vim ######

好了,说够了原因那么怎么解决也就不难了,方法应该挺多,比如:

1)参考debian的方法(debian那样做有它更深层的意义,这里就不多介绍了),把/usr/bin/vi改名成别的名字,然后创建/usr/bin/vi符号连接指向/usr/bin/vim。不过这个方法太土了,而且影响程序的后续更新。

2) 使用cscope的环境变量,在~/.bashrc中加入一行"export EDITOR=vim",把默认的编辑器改了(注意这样会把用户默认的编辑器也改了,如果想单独影响cscope的话可以使用CSCOPE_EDITOR变量),这个方法比较正统。

3)把cscope的程序改了。。。。这个就算了,费力不讨好。

总之方法有很多,我们还是正统点,选择第二种吧。


###### 默认使用 emacs的问题 ######

现在既然要改,作为一个emacs党为什么不改的彻底点,把系统默认的编辑器都换成emacs得了。直接写"export EDITOR=emacs",简单明了但适用一下问题出来了。emacs启动太慢了,特别是有很多配置的情况下,每次让想快速查看一个文件都得等,这个真心受不了。不过emacs可是我们大名鼎鼎得stallman大师开发得,他怎么可能不知道这点,所以emacs出了emacsclient作为对策。可以一次性使用emacs --daemon启动一个emacs后台服务,以后都使用emcasclient打开就省去了很多初始化得工作,让启动变得快速。但是要启动emacsclient需要参数,比如你要想启动在终端界面上不单独启动一个窗口那就需要-t参数,总之需要参数。但是如果你写EDITOR=emacsclient -t ....那就不行了,只能写一个命令得名字,后面不能跟参数。


怎么办?有办法,写一个脚本比如在~/bin/下写一个脚本myemacs.sh,内容可以大致如下:

#!/bin/bash

emacsclient -t -a ""  $@

保存后执行chmod +x ~/bin/myemacs.sh,加上可执行权限。

然后让EDITOR=~/bin/myemacs.sh,这样就可以有参数了。当然上面得脚本写得太粗糙,emacs提供emacs.bash文件,帮我们写了一个可以使用得脚本。可以参考这个:】

https://github.com/oscarfv/emacs/blob/master/etc/emacs.bash

里面就是一个edit()函数,你可以把这个函数自己粘贴到我们上面得脚本里,然后加一句edit $@。或者把它放到系统得某一个地方,然后source这个脚本,最后再加一句edit $@。总之程序参考就在这了,怎么弄就看自己了。


######  我的简陋做法 ######

我的做法是,把这个脚本

https://github.com/oscarfv/emacs/blob/master/etc/emacs.bash

下载下来放到/usr/share/emacs/24.3/etc/emacs.bash,然后在我的用户主目录下“~/”创建一个bin/目录,然后再创建一个myemacs.sh脚本,内容如下:

#!/bin/bash

source /usr/share/emacs/24.3/etc/emacs.bash

edit $@


然后修改~/.bashrc加入如下一行:

export EDITOR=myemacs.sh


注意最后这步的前提是你的PATH环境变量包括~/bin,如果不包括你可以写myemacs.sh的绝对路径。


如果以上步骤不起作用请:

1)修改了.bashrc需要重新引入一下,或者干脆重新打开一个终端。

2)检查你的终端对配置文件的引入顺序,是否有干扰或者根本不使用.bashrc。

3)检查是否在其它可以覆盖EDITOR的地方有设置。

.........

.........



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值