Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90989998
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-07 07:58:15

openserver下一直没有一个强大的编程工具,自带的vi在编程时实在效率不高,VIM是一个与vi类似的编辑器,这是一个开放源软件,目前最新版本是6.4,最新版的Vim已经具有了非常多的功能, 这些功能使程序员能更加轻松, 便捷地使用它们. 正是这些丰富强大的功能使vim成为无数程序员的至爱,但是vim没有openserver下可用二进制包,那么就让我们用源代码来构建一个吧(本文尽可能详细,预览图就借用一下这张算了 ,目前还不知道怎么实现预览功能,如有哪位知道,告诉一声,谢谢)

环境:sco openserver 5.06, 已装好开发系统,
 安装补丁RS506A,OSS651B(可不装), OSS646C(必须装,因为装gcc用得装)
 如果是5.05要装rs505a, oss646b
 以上补丁可以在 中找到
   
所需要用到的工具:
 gwxlibs-1.3.1Ba, 这是装gcc必需要的,custom安装,并且要在装gcc之前就装好,因为我是装5.07的,所以不清楚单独装一个gcc编译器,是否可以不装
 下载地址:
 gcc, 如果你有5.07的系统盘,可以直接装GNU Development Tools (ver 5.0.7Kj)好,如果没有的话,就到  去下载一个, custom安装
 ctags-5.5.4, 虽然sco自带了一个,但是不支持taglist插件的参数,所以最好还是重新下载,自已编译一个,下载地址是:,以bin方式上传到sco机器上,假定上传到/tmp, 等下和vim一起编译
 bzip2、unzip,gzip, 这三个都是解压工具,它们的源代码地址在下面,如果你有兴趣,也可以用源代码构建。
  bzip2:   
  unzip:   
  gzip:   
 编译虽不复杂,但比较繁琐,建议大家到下面这个网站去下载来用,
  
 下面讲一下在这个网站下载到的这三个工具软件的安装,
   以二进制方式把bzip2-0.9.5d-VOLS.tar,gzip.tar,unzip-5.3-VOLS.tar这三个文件传到sco机器的/tmp目录下
   以root用户登录,
   cd /tmp
   tar xvf bzip2-0.9.5d-VOLS.tar,  然后用custom安装
   tar xvf unzip-5.3-VOLS.tar,     用custom安装
   tar xvf gzip.tar
   cp gzip /usr/bin
               
环境变量:请把/usr/gnu/bin添加到PATH变量中,因为gcc就是装在这里的
 我是用ksh,在.profile文件尾增加以下两句话:
   PATH=$PATH:/usr/gnu/bin
   export PATH
 退出再重新登录,建议用root用户登录, 其它shell参照添加,
 好象装准备的都准备好了,请先用gcc编译一个程序试下,看gcc是否工作正常,如果正常的话,就进行下一步的工作
       
1、到去下载vim的源代码,目前版本6.4,下载地址为:       
  
 传到sco机器上,假定为/tmp目录下,请记住,ftp时要用bin模式,因为windows的ftp默认是ascii模式
 然后telnet,建议用root用户,执行以下命令
  cd /tmp
  file vim-6.4.tar.bz2
 如果输出不是"vim-6.4.tar.bz2:        bzip2 compressed data",  而是"vim-6.4.tar.bz2:        cannot open for reading", 就说明上传时不是bin模式,删除再传,然后继续下面的步骤
  bunzip2 vim-6.4.tar.bz2
  tar xvf vim-6.4.tar
  cd vim64
          
  CC=gcc
  CFLAGS='-O6 -static -fomit-frame-pointer -march=i586 -mcpu=i586 -DSCO -DMAXPATHLEN=1024'
  LDFLAGS='-static'
  export CC CFLAGS LDFLAGS
 建议使用静态编译,
  ./configure --prefix=/usr --host=i586-pc-sco3.2v5.0   --with-view-name=vview --with-ex-name=vex --with-features=huge  --enable-cscope --enable-multibyte --with-x=no  --enable-gui=no --with-tlib=curses --disable-nls
  gmake或make
  gmake install

  cd /usr/share/vim
  cp vim64/vimrc_example.vim vimrc
        
 然后再编译ctags,
  cd /tmp
  gzip -d ctags-5.5.4.tar.gz
   tar xf ctags-5.5.4.tar
  cd ctags-5.5.4
  ./configure --prefix=/usr
  gmake
  gmake install

2. 安装taglist, tabbar, SQLUtilities, align这四个插件
  taglist:  
  tabbar:   
  SQLUtilities:  
  align:   
 然后传到sco机器/tmp目录下,telnet后执行如下命令
  cd /usr/share/vim
  mkdir vimfiles
  cd vimfiles
  unzip /tmp/taglist_40b3.zip
  unzip /tmp/sqlutil_141.zip
  gzip -d /tmp/Align[1].tar.gz
  tar xf /tmp/Align[1].tar
  cd plugin
  cp /tmp/tabbar.vim .
  cd /usr/share/vim/vimfiles/doc
 运行vim, 执行“:helptags .”这个命令,至此vim已经基本安装完毕,至于还有什么好的插件,请大家推荐使用
 还有个sql_iabbr插件,是用来在编辑时对sql关键字自动大写替换的,有兴趣可以用一下,不过我觉得有时候会引起误用,所以没有在些例出来,使用方法是在/usr/share/vim/vim64/ftplugin/目录下建一个esqlc目录,然后把sql_iabbr.vim传到这个目录
               
3、请做以下修改,以便vim能对esqlc文件有更好的支持
 使vim能对esql文件自动增加cindent支持(使用C语言的自动缩进)
  cd /usr/share/vim/vim64/indent
  cp c.vim esqlc.vim
 使taglist插件可以支持esql文件
  用vim打开/usr/share/vim/vimfiles/plugin/taglist.vim文件,移到348行,增加以下三行
  " esqlc language
  let s:tlist_def_esqlc_settings = 'c;d:macro;g:enum;s:struct;u:union;t:typedef;' .
                    \ 'v:variable;f:function'

 在/usr/share/vim/vimrc文件的末尾增加以下这句话,否则tabbar插件不能正常工作
  let g:Tb_ModSelTarget = 1
  let g:Tb_ForceSyntaxEnable = 1
       
/usr/share/vim/vimrc是vim的公共配置文件,私人配置文件在用户起始目录的.vimrc文件中
 第一次使用请建立.vimrc,里面的内容可以参照本文最后我现在现在.vimrc的内容
 按上面设置好后,如果在root用户下运行正常,而非root不可用,则要检查/usr/share及/usr/share/vim这些目录的权限,要755才可以
       
4、配置了cscope, 提高开发效率
 Cscope 是一个类似 ctags 的工具。 你可以把它想作是超过频的 ctags,因为它功能比ctags 强大很多。在 Vim 里,通过 cscope 查询结果来跳转就象跳转到其他的标签完全一样; 它被保存在标签堆栈里。这样你就可以象使用 |tags| 一样在函数等等之间便捷的跳转。下面举例说明如果配置cscope
 假设用户目录下/u/infdev, 该目录下有二个子目录存放有源代码,分别是online,admin, 用以下语句建立cscope数据文件
 cd /u/infdev
  find online -name "*.c" -o -name "*.ec" -o -name "*.h" > cscope.files
  find admin  -name "*.c" -o -name "*.ec" -o -name "*.h" >> cscope.files
  cscope -b
 /u/infdev目录下就会生成两个文件,cscope.files, cscope.out
 在用户的.vimrc最后增加以下内容
  set cst
  set csto=0
  set cscopequickfix=s-,c-,d-,i-,t-,e-
  cs add /u/infdev/cscope.out /u/infdev
  set path+=~/include,../incl,../inc

 vim中cscope相关命令简介:
 所有命令都是通过主命令 ":cscope" 的子项完成的。主命令最短的缩写是 ":cs"。
 ":scscope" 完成同样的功能的同时还可以分割窗口 (缩写: "scs").
 可用的子命令有:
  add : 添加一个新的 cscope 数据库/连接。
  用法 :cs add {file|dir} [pre-path] [flags]
    [pre-path] 用来通知 cscope 使用 -P [pre-path] 选项。 [flags] 可以用来给 cscope 传递额外的选项。
  例子 :cscope add /usr/local/cdb/cscope.out
     :cscope add /projects/vim/cscope.out /usr/local/vim
     :cscope add cscope.out /usr/local/vim -C

  find : 查询 cscope。除了第 5 个之外的所有 cscope 查询功能都 可以使用。第 5 个是 "Change this grep pattern"。
  用法 :cs find {querytype} {name}
    {querytype} 和 cscope 的控制台界面以及 nvi 缺省命令 都是一致的。
     0 或 s: 查找 C 符号
     1 或 g: 查找定义
     2 或 d: 查找本函数调用的函数
     3 或 c: 查找调用指定函数的函数
     4 或 t: 查找字符串
     6 或 e: 查找 egrep 模式
     7 或 f: 查找文件
     8 或 i: 查找包含指定文件的文件
  例如  :cscope find c vim_free
     :cscope find 3 vim_free    这两个例子执行同样的查询。
       
  kill : 终止一个 cscope 连接 (或终止所有 cscope 连接).
  用法 :cs kill {num|partial_name} 要终止一个连接,需要给处连接号或者部分的连接名称。部分名称可以是数据库文件路径的任何一部分。所以要当心使用这个功能! 如果给定的连接号是 -1,那么所有的cscope 连接都会被终止。
       
  reset: 重新初始化所有连接。 用法 :cs reset
  show : 显示当前的连接。 用法 :cs show
       
5、插件的基本使用方法
 taglist:  用:TlistToggle 打开左边的tag窗口,再输一次自动关闭,按ctrl+w可以在窗口之间进行切换,也可以按照如下方法定义一个快捷键
  nnoremap :TlistToggle
 tabbar:   按ESC+1,ESC+2,ESC+3, ... ESC+0 在十个窗口切换,如果开了tag窗口,则可能要按一下回车,才能回到tabbar的当前编辑窗口
 SQLUtilities:这是一个用来格式化sql语言的,\sf 格式化当前行,如果sql语言占3行,则用3\sf

至此,基本工作已经完成了,你已经可以用vim来编辑一个ec文件,用ctrl+]来查找函数定义,用ctrl+t来返回,是不是很方便啊

下面列出我现在所用.vimrc,
let Tlist_Enable_Fold_Column = 0    "使taglist插件不显示左边的折叠行,
let Tlist_WinWidth = 20             "taglist窗口宽度
let Tlist_Show_One_File = 1         "taglist插件只显示当前文件的tag
let g:Tb_ForceSyntaxEnable = 1

colorscheme evening
set encoding=euc-cn                 "vim所使用的字符:euc-cn(simplified Chinese (Unix only)),如果有问题可以删除

set foldmethod=indent               "折叠使用indent风格
set foldlevel=10                    "多少层才自动折叠?[0m

set tabstop=4                       "tab占用4个字符宽度
set softtabstop=4
set shiftwidth=4
set expandtab                       "不使用tab,使用空格替代tab

set cinoptions=:N                   "使得自动缩进时swithc和case在同一列上,个人爱好,可以不设
set listchars=tab:>-,trail:-        "每个制表符会以 >--- 显示1, 同时行尾空格以 - 显示, set list打开
" set whichwrap=h,l                 
set nobackup                        " do not keep a backup file, use versions instead      

set cst
set csto=0
set cscopequickfix=s-,c-,d-,i-,t-,e-
cs add /u/infdev/cscope.out /u/infdev
set path+=~/include,../incl,../inc

nmap   :%s/\s\+$//         "删除行末多余空字符
nmap   [i                      "显示当前变量的定义
nmap   :TlistToggle        "打开tag窗口
nmap   gg=G                    "格式化整个文件,为误用,特意加shift键
nmap   =a{                     "格式化当前{}之内的文本
nmap   :cs find d =expand("")       "查找本函数调用的函数
nmap   :cs find c =expand("")       "查找调用指定函数的函数
nmap   :make               "make 当前目录的文件
nmap :cnext              "跳到下一个编译错误
nmap :cc                 "看完整的错误信息
nmap :clist              "看所有错误信息



下面附上常用的vim功能键

  K  跳转到函数的man页

  gg=G  按indent缩进格式化整个文件
    == 格式化整行
   =a{  格式化当前{}程序块

  gf 查找文件,在.vimrc中用set path=/u/infdev/**/**/** 来设置搜索路径

  /* 折行功能可以将一节浓缩为一行, 只显示其大概. */
  zo 打开折行
  zc 关闭折叠
       
  在编辑模式下用ctrl+o可以暂时进行命令模式
       
  [{  命令跳转到当前代码块的开头,
  ]}  会跳转到当前代码块的末尾.
  [[  向前查找一个函数的开始
  ]]  向后查找一个函数的开始
  ][  向前查找一个函数的结尾,
  []  向后查找一个函数的结尾,  
  {   到前一个空行上
  }   到下一个空行上
  #   到与当前单词相同的上一个单词上
  *   到与当前单词相同的下一个单词上
  %   可以让光标从它当前所在的括号跳转到与它相匹配的括号上去,

  CTRL+]  跳转tags定义的地方=        ctrl+t返回调用tag的地方

  gD 查询变量,只在本文件中
  gd 查询变量, 只在本函数中
       
  [i        查询变量的定义
  [    跳到变量定义的地方

  set makeprg=nmake  后面nmake可自己定义,一般不用定义
  :make   编译程序
  :cnext  跳到下一个编译错误
  :cc   看完整的错误信息
  :clist  看所有错误信息

  :e  b     在命令行用tab可以补全  按ctrl+d列出所有匹配
  q:  列出命令窗口
       
Vim有一种记录宏的机制。你键入"qa"开始把一段宏记录入寄存器变量`a'中。按下来你可以象平常一样键入你要的操作, 只是这些操作都会被Vim记录进它命名为`a'的宏中, 再次再下"q"键, 就结束了宏`a'的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有26个可用的寄存器供你记录宏。

阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~