分类目录归档:vim

vim 常用配置

syntax on

set cindent
set fileencodings=utf-8,gb2312,cp936,latin-1
set fileencoding=gbk
set termencoding=utf-8
"set fileformat=unix
set fileformat=dos
set encoding=utf-8

" 解决backspace不能使用的问题
set nocompatible
set backspace=indent,eol,start
set backspace=2


" 设置自动缩进
" set autoindent
" set noautoindent
" 在屏幕底部显示光标所在的行,列位置
 set ruler
" set noruler
" 设置显示制表符的空格字符个数
" set tabstop=value


" 无备份
" set nobackup
" set nowritebackup

" F2保存文件
nmap 	:w
imap 	:w

" F8打开Tlist
nmap 	:TlistToggle
imap 	:TlistToggle

" F12 建立tag文件
nmap 	:!ctags -R --c++-kinds=+p --fields=+liaS --extra=+q ./
imap 	:!ctags -R --c++-kinds=+p --fields=+liaS --extra=+q ./

set nocp
filetype plugin indent on
set tags+=/data02/work/hequan/vimtag/tags
set tags+=tags
" 保存时,生成当前目录下的tags
"au BufWritePost *.c,*.cpp,*.cc,*.h !ctags -R --c++-kinds=+p --fields=+liaS --extra=+q

" 不打开子预览窗口
set completeopt=longest,menu

" 键绑定

" mapping
inoremap         pumvisible()?"\":"\"
inoremap        pumvisible()?"\\\":"\"
inoremap        pumvisible()?"\\\":"\"
inoremap        pumvisible()?"\":"\"

" echofunc
" ctags -R --fields=+lS
"let g:EchoFuncKeyNext='+'
let g:EchoFuncKeyPrev=''
let g:EchoFuncKeyNext=''
"let g:EchoFuncKeyPrev='-'

omnicomplete

omnicomplete插件使用

打开文件类型检测, 加了这句才可以用智能补全

filetype plugin indent on

关掉智能补全时的预览窗口

set completeopt=longest,menu

随便找一个有成员变量的对象, 进入Insert模式, 将光标放在”->”后面,
然后按下”Ctrl+X Ctrl+O”, 此时会弹出一个下列菜单, 显示所有匹配的标签。
此时有一些快捷键可以用:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口, 并接受当前选项

如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了, 这时全能补全已经可以自动补全了, 还真够”全能”吧.

vim中的其他补全方式还有:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义

Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S 拼写建议

taglist常用命令

http://blog.chinaunix.net/u1/52350/showart_505425.html
原文
http://vim-taglist.sourceforge.net/installation.html

要求:
1.vim版本6.0及以上
[root@mylinux ~]# vim -version
VIM – Vi IMproved 6.3 (2004 June 7, compiled Dec 5 2004 06:16:10)
2.Exuberant Ctags5.0及以上(注意GNU与Unix的ctags不行)
[root@mylinux ~]# ctags –version
Exuberant Ctags 5.5.4, Copyright (C) 1996-2003 Darren Hiebert
3.vim必须支持system()调用,进入vim,执行:echo exists(‘*system’) 如果显示1,表示支持

修改:
主目录下的.vimrc增加filetype on(启用vim检测文件类型机制)

安装:
1.下载taglist.zip解压到主目录,在主目录下新建目录.vim,解压到这个目录
[root@mylinux ~]# mkdir .vim
[root@mylinux ~]# cd .vim
[root@mylinux .vim]# unzip taglist_45.zip
2.进入.vim目录下的doc,运行vim,在vim运行:helptags .命令
(如果没有这一步,在vim中运行:help taglist将得不到taglist的帮助主题)
[root@mylinux .vim]# cd doc
[root@mylinux doc]# vim //在vim运行:helptags .
3.修改.vimrc文件增加let Tlist_Ctags_Cmd=”/usr/bin/ctags” //将taglist与ctags关联
4.修改.vimrc文件增加let Tlist_Inc_Winwidth=0 //如果在文本界面下运行vim,则将窗口长度设为0
5.再次运行vim
6.使用:TlistToggle命令(简写:Tlist)启用这个插件,再次运行则会关闭,帮助详见:help taglist

效果:
进入c源文件所在的目录
[root@mylinux debug]# ctags -R //产生tag文件
[root@mylinux debug]# vi hello.c //打开c源文件
在vim中输入:Tlist(启用taglist插件)再次输入会关闭taglist插件
左右窗口切换Ctrl+ww

Taglist帮助

在Taglist窗口按
F1:打开帮助
回车键:跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)
o:新建一个窗口,跳到标记定义处
p:预览标记定义(仍然在taglist窗口)
空格:显示标记的原型(如函数原型)
u:更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)
s:选择排序字段(暂时我也不知道什么意思)
d:删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)
x:放大/缩小taglist窗口
+:展开(指标记)
-:折叠
*:全部展开
=:全部折叠
[[:将光标移到前一个文件的起点
]]:将光标移到后一个文件的起点
q:退出taglist窗口
F1:关闭帮助

使用VIM开发软件项目 – (5) 使用tag文件和taglist插件[转]
http://blog.chinaunix.net/u/17660/showart_496457.html

ctags常用参数

下载:http://vim.sourceforge.net/scripts/script.php?script_id=1520
http://hi.baidu.com/daoyuanlee/blog/item/d2b6d31962409378dbb4bd27.html/cmtid/842a5089480683bd0e244429
下载:http://vim.sourceforge.net/scripts/script.php?script_id=1520
1.把下载的 omnicppcomplete.zip 解压到 ~/.vim 中
2.建立 tags:

    
    root@ROK:/home/rok# cd /usr/local/share/
    root@ROK:/usr/local/share# mkdir tags
    root@ROK:/usr/local/share# cd tags/
    root@ROK:/usr/local/share/tags# ctags -R --c++-kinds=+p --fields=+iaS --extra=+q /usr/include/c++/4.1.2/

3.在 .vimrc 中添加:

    
    set nocp
    filetype plugin on
    filetype indent on
    set tags+=/usr/local/share/tags/tags
    au BufWritePost *.c,*.cpp,*.cc,*.h !ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

每个参数解释如下:
-R:ctags循环生成子目录的tags
–c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明
–fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。

–extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。