我目前的工作,常常需要通过SecureCRT,登录到IBM的AIX UNIX操作系统进行编程。工作所用到的两个服务器的AIX版本是5.2和5.3。这两个版本对于我下面讨论的问题,情况都是一样的,没有区别。
AIX本身提供了VI编辑器。但本人喜欢VIM,所以想方设法的安装它。安装步骤如下:
1. 到VIM的官网:ftp://ftp.vim.org/pub/vim/unix/下载一个最新版,目前是vim-7.1.tar.bz2。
2. 在AIX服务上,你一般没有直接安装软件的权限。但没关系,找一个你能创建目录的地方,比如是/home/myName/
创建一个soft目录,专门用来安装你自己喜欢的软件。把vim-7.1.tar.bz2解压到/home/myName/soft/vim71,进入源代码所在目录:/home/myName/soft/vim71/src。这时,你有两种方法来编译VIM:
方法一:使用AIX自带的编译器xlC
#1.执行configure
$ export CC=xlC #使用AIX自带的xlC编译器
$ export CFLAGS=-q64 #如果你的服务器是64位CPU,务必使用这个选项
$ ./configure –prefix=<安装路径> –enable-multibyte #可以执行./configure –help 查看更多选择
#<安装路径>是你有写权限的目录,比如这里是/home/myName/soft/vim71
#使用–enable-multibye的用途是,可以使用VIM的encoding,fileecncodings等设置,后面会提到。
#2.执行make
$ make
$ make install #这一步,会按照第1步中–prefix所指定的安装路径安装可执行文件和man文件
方法一:使用gcc编译
#第一步要改成:
#1.执行configure
$ export CC=gcc #使用gcc编译器
$ export CFLAGS=-maix64 #如果你的服务器是64位CPU,务必使用这个选项
$ export LDFLAGS=-maix64 #如果你的服务器是64位CPU,务必使用这个选项,链接器选项
$ ./configure –prefix=<安装路径> –enable-multibyte
3. 在执行VIM前,检查DISPLAY环境变量的值,(如果你的DISPLAY变量值为空,可以跳过此步)。
当我打开VIM时,发现没响应,像是卡住了。但执行命令kill -30 <VIM的进程序号>后,它又立即激活。后面发现是,是环境变量DISPLAY在作怪。
由于服务器还安装了Oracle,而ORACLE的一些终端登录要用到DISPLAY变量:
图一、
为了不影响其他同事使用ORACLE,把 <安装路径>/bin/下的可执行文件vim更名为vim71,并在<安装路径>/bin/目录下,新建一个名为vim的shell脚本,对vim71进行封装:
-――file:vim—–
#! /bin/sh
export DISPLAY=;
<安装路径>/bin/vim71 “$@”
exit;
把这个shell脚本的使用仅限更改为可执行:chmod +x vim。在~/.profile文件中,添加PATH:PATH+=<安装路径>/bin/。
这样当我们执行vim命令时,其实是在执行这个shell脚本,而这个脚本首先把DISPLAY变量置为空,从而vim71就可以正常启动了。也可以对vimdiff等可执行程序,www.linuxidc.com进行此类封装。
还有一个更好的方法,不必改变原来的可执行文件名。在你的/home/myName/soft/下新建一个bin目录,专门存放你自己安装的所有可执行文件的链接。并把这个/home/myName/soft/bin目录添加到~/.profile文件的PATH变量中:PATH+=/home/myName/soft/bin。然后把shell脚本放在这个目录下即可,shell脚本里的vim71改为vim。
4. VIM可以在AIX上,实现语法高亮吗?
不用怀疑,完全可以!
使用SecureCRT,把终端类型设置为vt100。在$VIM/vimrc里,进行如下配置:
if &term =~ “xterm” || &term =~ “vt100” || &term =~ “ansi”
if has(“terminfo”)
set t_Co=8
set t_Sf=^[[3%p1%dm
set t_Sb=^[[4%p1%dm
else
set t_Co=8
set t_Sf=^[[3%dm
set t_Sb=^[[4%dm
endif
endif
注意^[是这样输入的:Ctrl+v,按Esc键,详情可以在VIM中执行命令:help xterm-color。
5. 默认安装的VIM,已经可以在AIX上查看中文。但当光标在中文上移动时,中文会变成乱码,怎么办?
例如正常显示是这样的:
图二、
当光标在“//或边界覆盖”上移动时,会变成下面这个样子:
图三、
研究了很多方法,最后发现把SecureCRT的字体改成新宋体,可以解决这个问题,注意字符集要选择CHINESE_GB2312那个:
图四、
6. 在AIX上安装的VIM中,能否做到,在执行x命令或Backspace命令时,一次删除一个汉字?
这个问题,研究了很久,网上有说到设置ecoding的方法(前提了安装VIM时,指定了–enable-multibye选项),这个方法在我的LINUX虚拟机上,是有效的(但还是要求字体为新宋体):
“suport chinese language
set fileencodings=ucs-bom,utf-8,cp936,latin1 “VIM所打开的文件的编码,按顺序解释
set encoding=cp936 “VIM的内部编码,即缓冲区里的文件的编码
set fileencoding=cp936 “VIM用何种编码来保存文件
set termencoding=cp936 “终端的编码类型
7. 在AIX上安装的VIM中,map映射键失效,怎么办?
这是终端的键盘选择不正确所致。解决方法,在SecureCRT中,模拟键盘选择“Xterm”:图五、
但非常苦恼的是,在我工作的AIX服务器上,这个方法不起作用!用h,l命令,要移动两次才能越过一个汉字,用Backspace要执行两次,才能删除一个汉字,很痛苦!