vim开发环境

安装 (环境是debian7.4)


从http://www.vim.org/下载vim-7.4.tar.bz2,解压。

进入src/目录(在外层目录也可以),./configure,make,make install(安装需要root身份)。

注:
最好在新立得中卸载掉系统默认安装的vim-tiny。需要安装libncurses5-dev,否则configure报错。
以上安装如果没有安装gvim(图形界面的vim),则需要安装libgtk-3-dev(这个可能不需要)、
libxmu-dev(这个包含X11的各种头文件)、libgtk2.0-dev这几个软件包,然后重新配置、编译、
安装。(如果不需要gvim,就无所谓了。)
安装好后(或者在使用过程中,有过修改系统语言的操作),运行gvim,可能会报错(Gtk-WARNING **: Invalid input string),
导致gvim没有正确的显示菜单栏(好像是因为环境变量中的语言是zh_CN.utf8,而gvim使用的是zh_CN.UTF-8),
这时到/usr/local/share/vim/vim74/lang下创建连接文件menu_zh_cn.utf8.vim(连接到menu_zh_cn.utf-8.vim,
root运行命令ln -s menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim),这样就可以解决问题了。如果系统语言是
英文,就不会出现这个问题了。


安装好后运行vim --version,查看默认配置下,启用(+)与未启用(-)的功能。默认没有开启cscope,
我们这里需要开启,重新配置如下,./configure --enable-cscope,并重新编译安装。安装好后重新运行
vim --version看cscope功能是否开启(前面应该是加号而非减号)。


从http://www.vim.org下载如下三个script:nerdtree、taglist、SrcExpl。在自己的主目录下创建
文件夹 .vim 和文件 .vimrc。将上面三个script的压缩包拷到文件夹.vim下, unzip * 解压到当前文件,
进入子文件夹doc,运行vim,输入命令:helptags ./。到这里vim和相关插件就安装成功了。


使用新立得安装exuberant-ctags。也可以自己编译安装(到这里下载http://sourceforge.net/),
但是好像soureceforge上的比较老了。安装后就得到程序ctags。


使用新立得安装cscope。也可以自己编译安装(到这里下载http://sourceforge.net/),这次
sourceforge上的比较新,下载cscope-15.8a.tar.gz,解压tar -xf cscope-15.8a.tar.gz,进入
cscope-15.8a目录,./configure,make,make install。安装后就得到程序cscope。


配置


在上面刚创建的.vimrc文件中输入以下内容。

"语法高亮
syntax on
"tab显示为四个空格的长度
set tabstop=4
"显示行号
set nu
"自动缩进
set autoindent
"搜索字符串高亮
set hls
"始终显示状态栏
set laststatus=2
"当打开新的窗口时,新窗口的位置要么在当前窗口的下面,要么在当前窗口的右侧
set splitbelow
set splitright

"taglist配置
"快捷键
"nnoremap <F5> :TlistToggle<CR>
nmap <A-1> :TlistToggle<CR><CR>
"taglist只显示当前文件的tags
let Tlist_Show_One_File=1

"SrcExpl配置
"快捷键
nmap <A-2> :SrcExplToggle<CR><CR>

"nerd tree配置
"快捷键
"nnoremap <F6> :NERDTreeToggle<CR>
nmap <A-3> :NERDTreeToggle<CR><CR>
"nerd tree显示在右侧
let NERDTreeWinPos=1

"cscope接口配置
"快捷键
nmap <C-[>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>d :cs find d <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>f :cs find f <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>i :cs find i <C-R>=expand("<cword>")<CR><CR>

nmap <C-[><C-[>s :scs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>g :scs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>d :scs find d <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>c :scs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>t :scs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>e :scs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>f :scs find f <C-R>=expand("<cword>")<CR><CR>
nmap <C-[><C-[>i :scs find i <C-R>=expand("<cword>")<CR><CR>

"使用quickfix window
"set cscopequickfix=s-,c-,d-,i-,t-,e-
"使用cstag代替tag
set cst
"vim启动时加载数据库文件
if has("cscope")
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif



vim命令(前面有冒号的是命令行模式下的命令(需要输入),没有冒号的是normal模式下的命令(快捷键))

:pwd                           显示vim当前工作目录
:cd                            切换vim当前工作目录
:!cmd                          执行shell命令


窗口操作命令
:[h]split [文件名]         在当前窗口的上面打开一个新窗口(以编辑当前文件或者文件名所指定的(新)文件),h表示窗口的高度
:close                     关闭当前窗口,几乎等价于:quit,除了:close不会关闭最后一个窗口
:only                      关闭除了当前窗口外的所有其他窗口
:open 文件名               在当前窗口打开(创建)文件
:[h]new [文件名]           几乎完全等价于split,除了省略文件名时,会创建新的未命名文件,而非编辑当前文件
:[w]vsplit [文件名]        在当前窗口的左侧打开一个新窗口(以编辑当前文件或者文件名所指定的(新)文件),w表示窗口的宽度
:[w]vnew [文件名]          类比new

CTR-W h/l/j/k              切换当前窗口,其实在gvim下,用鼠标时最方便的
CTR-W t/b                  切换到最上面/最下面的窗口

CRT-W H/L/J/K              移动当前窗口位置

:qall[!]
:wall[!]
:wqall

vim -o 文件名列表          水平分割,每个窗口打开一个文件
vim -O 文件名列表          垂直分割,每个窗口打开一个文件
:all
:verticall all

:s打开文件的命令           如 :stag TAG
CRT-W 打开文件的命令       如 CRT-W CRT-]

:[leftabove/rightbelow/topleft/botright] 打开窗口的命令          在指定的位置打开新的窗口

:tabedit 文件名            在新的标签页中编辑文件
:tab split                 在心的标签野种编辑当前文件
gt                         在标签页之间切换
:tabonly                   仅保留当前标签
:tab 打开窗口的命令        在新标签中打开新窗口,如 :tab split

tag命令
:tag TAG                   跳到标签定义处,当TAG以/开头则后面跟一个正则表达式(标签包含此正则
                          就可,而非完全匹配正则,\C表示不忽略大小写)。
CTR-]                      同上
g 鼠标左键                 同上,先按g键,再按鼠标左键
CTR-鼠标左键               同上,按住CTR,再按鼠标左键
:stag TAG                  在新的窗口打开标签定义
CTR-W CTR-]                同上
注:
   上面的命令还会跳转到的新标签的名字和跳转前的位置信息作为一条记录,压入到标签栈中
   如果有多个匹配,以上命令默认会跳刀第一个匹配(优先级最高),匹配优先级如下:
   1    "FSC"
2    "F C"
3    "F  "
4    "FS "
5    " SC"
6    "  C"
7    "   "
8    " S "
符号意义如下:
F:full matching or ignore-case matching
S:static tag or global tag
C:in current file or in another file

CTR-T                      返回上一个标签或者,
g 鼠标右键                 同上
CTR-鼠标右键               同上
:pop                       同上
:tag                       在标签栈中向前一个
:0tag                      跳到标签栈中最新的位置
注:
   以上命令前可以加一个数字,表示在栈中先前或向后移动的次数,默认是1。
以上命令只会在标签栈中移动,而不会修改标签栈。

:tags                      显示当前的标签栈,下面是栈顶,上面是栈底。栈中的位置信息会随着文件
                          的编辑而动态的更新。

:tselect [TAG]             列出所有与TAG匹配的标签的位置,可以从中选择一个,如果TAG被省略,
                          则将标签栈中的最新的标签做为TAG
g ]                        同上

:tjump [TAG]               同上,但是如果只有一个匹配,则直接跳到响应位置
g CTR-]                    同上

:stselect [TAG]            在新窗口中打开选择的标签

:stjump [TAG]              同上,如果只有一个匹配,则直接跳到响应位置

:tnext                     跳到下一个匹配的位置
:tprevious                 跳到上一个匹配的位置,用tNext也可以
:0tnext                    重新跳到当前的匹配位置
:trewind                   跳到第一个匹配位置
:tfirst                    同上
:tlast                     跳到最后一个匹配位置

以上提到的很多命令行模式下的命令前面可以再加个p,表示在预览窗口中跳转到相应的匹配位置。如,ptag、pselect等。


cscope命令
:cs help
:cs add 数据库文件         数据口文件一般为cscope.out
:cs show                   
:cs kill PID               PID为-1时,表示所有
:cs reset
:cs find 查询类型 名字/字符串
                          查询类型有
  0 or s: Find this C symbol
  1 or g: Find this definition
  2 or d: Find functions called by this function
  3 or c: Find functions calling this function
  4 or t: Find this text string
  6 or e: Find this egrep pattern
  7 or f: Find this file
  8 or i: Find files #including this file
:cstag TAG                 相当于cs find g或者tjump


插件配置


nerdtree


taglist


SrcExpl


工具命令


find ./ -path "gtest" -prune -o  -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" > ./process.files
cscope -bkq -i process.files
ctags -L process.files

ctags


cscope


综述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值