Vim 个人设置 (新加cctree等插件)

"F1~F12快捷键映射

""{{{

map :CCTreeLoadXRefDBFromDisk $CCTREE_DB

map :BufExplorer

nnoremap :A

map :TlistToggle

"map : LookupFile "插件中已映射

noremap :make

nnoremap :Grep

map :NERDTreeToggle

 

"消除每行后面的多余的空格

nmap :%s//s/+$//g:noh

 

"消除文件中的^M字符

nmap :%s///ge

"nmap mmHmn:%s///ge`nzt`m

"原noremap dm mmHmn:%s///ge`nzt`m

"mmHmn 解释 : 1.mm-->在当前行行mark m 2.H-->到该屏幕的最上面(home) 3.mn-->在最上面作标记make n

"`nzt`m 解释: 1.`n -->到标记n的位置 2.zt-->将当前行(即标记n)置顶 3.`m-->到标记m的位置

 

map :!ctags -R --c++-kinds=+p --fields=+ialS --extra=+q .

 

""}}}

"F1~F12快捷键映射

 

"非F1~F12快捷键

""{{{

let mapleader=","

let g:mapleader=","

map svi :source ~/.vimrc

map evi :e! ~/.vimrc

nnoremap tr :Trans

vnoremap trv :TransV

 

"Quickfix 编译出错信息调试很有用

nmap cn :cn

nmap cp :cp

nmap cw :cw 10

 

 

"OmniTags.vim tags更新

map tl :OmniTagsLoad $MYTAGS_DB

map tu :OmniTagsUpdate *.c *.h

 

"fuzzyfinder.vim 模糊查找

map fb :FufBuffer

map ff :FufFile

map fd :FufDir

map fm :FufMruFile

map ft :FufTag

 

"map sb : set scrollbind

"map nsb : set noscrollbind

"nnoremap c : set cursorline! cursorcolumn!

"map ms :marks

"map dms :delm!

"noremap :FufTagWithCursorWord!

""}}}

"非F1~F12快捷键

 

"简单配置

"{{{

 

"打开语法色彩

syntax enable

"打开语法色彩

 

"打开关键字色

syntax on

"打开关键字色

 

"侦测文件类型

filetype on

"侦测文件类型

 

"载入文件类型插件

filetype plugin on

"载入文件类型插件

 

"为特定文件类型载入相关缩进文件

filetype indent on

"为特定文件类型载入相关缩进文件

 

"设置VIM颜色主题 你可以借助插件scrollcolor.vim和color_sample_pack.vim来选择你喜爱的主题(150多个)(请参考下面插件)

"term 黑白终端的属性

"cterm 彩色终端的属性

"ctermfg 彩色终端的前景色

"ctermbg 彩色终端的背景色

"gui GUI 版本属性

"guifg GUI 版本的前景色

"guibg GUI 版本的背景色

colorscheme elflord "个人钟爱

"colorscheme morning

"colorscheme evening

"colorscheme desert

"设置VIM颜色主题 你可以借助插件scrollcolor.vim和color_sample_pack.vim来选择你喜爱的主题(150多个)(请参考下面插件)

 

"预览窗口,eg. ctr+w { 时的窗口大小

set previewheight=10

"预览窗口,eg. ctr+w { 时的窗口大小

 

"设置弹出菜单的高度

set pumheight=15

"设置弹出菜单的高度

 

"使用鼠标

set mouse=a

"使用鼠标

 

"autocmd

if has("autocmd")

autocmd BufEnter * :lchdir %:p:h

endif

"autocmd

 

"映射快捷键开始命令,缺省为'/'(已经移到上面)

"let mapleader=","

"let g:mapleader=","

"映射快捷键开始命令,缺省为'/'(已经移到上面)

 

"解决consle输出乱码

language messages zh_CN.utf-8

"解决consle输出乱码

 

"可用来改动补全时采用的方式

:set wildmode=list:full

"可用来改动补全时采用的方式

 

"可用来取得菜单式的匹配列表 高亮首个匹配

":set wildmenu "当set wildmode=list:full默认set wildmenu已启动, 但是set wildmode=longest:list时不启动

"可用来取得菜单式的匹配列表 高亮首个匹配

 

"修改一个文件后,自动进行备份,备份的文件名为原文件名加"~"后缀

"if has("vms")

" set nobackup

"else

" set backup "vim main.c 多出 main.c~文件用来保存打开前的原文件, 最后可用vimdiff main.c main.c~比较

"endif

"修改一个文件后,自动进行备份,备份的文件名为原文件名加"~"后缀

 

"写备份但关闭vim后自动删除

set writebackup

"set nowritebackup

"写备份但关闭vim后自动删除

 

"vi兼容开关

set nocp "当使用omni自动补全时,要设置

"vi兼容开关

 

"不使用swap文件

"set noswapfile

set swapfile

"不使用swap文件

 

"显示匹配的括号([{和}])

set showmatch

"显示匹配的括号([{和}])

 

"显示日期的缩写

iab xdate =strftime("%Y-%m-%d %H:%M:%S")

"显示日期的缩写

 

"关闭遇到错误时的声音提示

set noerrorbells

"关闭遇到错误时的声音提示

 

"不要闪烁

set novisualbell

"不要闪烁

 

"使用空格来替换tab

set expandtab

"set et

"使用空格来替换tab

 

"在vim编辑器下方显示命令

set showcmd

set cmdheight=1

"在vim编辑器下方显示命令

 

"当光标达到上端或下端时 翻滚的行数

set scrolljump =5

"当光标达到上端或下端时 翻滚的行数

 

"当光标达到水平极端时 移动的列数

set sidescroll =5

"当光标达到水平极端时 移动的列数

 

"当光标距离极端(上,下,左,右)多少时发生窗口滚动

set scrolloff =0

"当光标距离极端(上,下,左,右)多少时发生窗口滚动

 

"当使用vimdiff比较文件,相比较的比较文件同步滚动,但是splite分割窗口, 两个窗口也同步, 有时候挺有用的.

"set scrollbind

"set noscrollbind

"当使用vimdiff比较文件,相比较的比较文件同步滚动,但是splite分割窗口, 两个窗口也同步, 有时候挺有用的.

 

"将当前编辑文件的路径设置为当前路径

set autochdir

"将当前编辑文件的路径设置为当前路径

 

"自动读写相关

set autoread " read open files again when changed outside Vim ( 同步 )

set autowrite " write a modified buffer on each :next , ... ( 跳到另一个文件时,自动保存上个文件 )

set modified

"自动读写相关

 

"设置VIM行号

set nu

"set nonu

"设置VIM行号

 

"Tab 宽度

set ts=4

"Tab 宽度

 

"自动缩进的时候, 缩进尺寸

set sw=4

"自动缩进的时候, 缩进尺寸

 

"打开 VIM 的状态栏标尺

set ru

"打开 VIM 的状态栏标尺

 

"显示括号配对情况

set sm "smartmatch

"显示括号配对情况

 

" 开启新行时使用智能自动缩进

set smartindent

" 开启新行时使用智能自动缩进

 

" 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感

set ignorecase smartcase

" 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感

 

" 输入搜索内容时就显示搜索结果

set incsearch

" 输入搜索内容时就显示搜索结果

 

" 搜索时高亮显示被找到的文本

set hlsearch

" 搜索时高亮显示被找到的文本

 

"打开 C/C++ 风格的自动缩进 ( =a{ , gg=G 代码美化 )

set cin

"打开 C/C++ 风格的自动缩进 ( =a{ , gg=G 代码美化 )

 

"允许backspace和光标键跨越行边界 ( 不习惯 )

"set whichwrap+=<,>,h,l

"允许backspace和光标键跨越行边界 ( 不习惯 )

 

"内容多时,换行显示

"set wrap

set nowrap

"内容多时,换行显示

 

"启动的时候不显示那个援助乌干达儿童的提示

set shortmess=atI

"启动的时候不显示那个援助乌干达儿童的提示

 

"通过使用: commands命令,告诉我们文件的哪一行被改变过 ( 不习惯 )

"set report=0

"通过使用: commands命令,告诉我们文件的哪一行被改变过 ( 不习惯 )

 

"在被分割的窗口间显示空白,便于阅读 (没看到效果)

"stl:/ : 当前窗口状态栏显示'空格' ('/'转义字符)

"stlnc:- : 非当前窗口状态栏显示---

"vert:/| : 垂直分割线为|

"fold:- : 若设置折叠功能,折叠后显示---

set fillchars=stl:/ ,stlnc:-,vert:/|,fold:-,diff:-

"set fillchars=vert:/ ,stl:/ ,stlnc:/

"在被分割的窗口间显示空白,便于阅读 (没看到效果)

 

"带有如下符号的单词不要被换行分割

set iskeyword+=_,$,@,%,#,-

"带有如下符号的单词不要被换行分割

 

" 中文帮助

set helplang=cn

" 中文帮助

 

" 设定doc文档目录

let helptags=$VIMFILES.'/doc'

" 设定doc文档目录

 

" 保留历史记录

set history=500

" 保留历史记录

 

" 英文单词在换行时不被截断

set linebreak

" 英文单词在换行时不被截断

 

" 设置每行多少个字符自动换行,加上换行符

"set textwidth=80 "有时不爽

set textwidth=0 "总不换行

" 设置每行多少个字符自动换行,加上换行符

 

" 光标可以定位在没有实际字符的地方

"set ve=block

" 光标可以定位在没有实际字符的地方

 

" 短暂跳转到匹配括号的时

" set matchtime=2

" 短暂跳转到匹配括号的时

 

"多少个键被敲下后执行一次交换文件刷新

set updatecount=40 "设置敲入400个字符后执行

"多少个键被敲下后执行一次交换文件刷新

 

"交换文件刷新后的超时时间

set updatetime=50000 "50秒后刷新

":preserve "若设置的时间过长,该命令会手工的存入交换文件中.

"交换文件刷新后的超时时间

 

" When using make, where should it dump the file

set makeef=error.err

" When using make, where should it dump the file

 

"lz 如果设置本选项,执行宏,寄存器和其它不通过输入的命令时屏幕不会重画.另外,窗口标题的刷新也被推迟.要强迫刷新,使用:redraw.

"set lz "lazyredraw / 'lz' (缺省关闭)

set redraw=3000

"lz 如果设置本选项,执行宏,寄存器和其它不通过输入的命令时屏幕不会重画.另外,窗口标题的刷新也被推迟.要强迫刷新,使用:redraw.

 

"}}}

"简单配置

 

"Gui选项

"{{{

if has("gui_running")

set guioptions-=m " 关闭菜单栏

set guioptions-=T " 关闭工具栏

set guioptions-=l " 关闭左边滚动条

set guioptions-=L " 关闭垂直分隔窗口左边滚动条

set guioptions-=r " 关闭右边滚动条

set guioptions-=R " 关闭垂直分隔窗口右边滚动条

set guifont=Monospace:12 "在Linux下设置字体的命令是:

set guicursor=a:blinkon0 "停止光标闪烁

set shell=/bin/bash

endif

"}}}

"Gui选项

 

"改变注释代码的颜色

"{{{

hi Comment ctermfg=6

"改.c文件的c风格/* ... */注释为会灰白色

hi cComment ctermfg=LightBlue "DarkGray "DarkMagenta " guifg=Grey

"改.c文件的c++风格// ... 注释为彩色终端下为暗蓝灰色、GUI下为浅蓝色

hi cCommentL ctermfg=DarkGray "LightBlue " guifg=LightBlue

"以上可参看/usr/share/vim/vim72/syntax/c.vim中对cComment和cCommentL的定义

"}}}

"改变注释代码的颜色

 

"字符编码(多字节)

"{{{

if has("multi_byte")

    set encoding=utf-8

set fileencodings=ucs-bom,utf-8,chinese,big5,latin1,cp936

endif

"}}}

"字符编码(多字节)

 

"设置C/C++语言的具体缩进方式 eg. switch case 缩进

""{{{

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

"set cino=:4g2t0(sus

"set cino=:0g0t0(sus

" :0 -- switch 语句之下的 case 语句缩进 0 个空格

" g0 -- class,struct,等权限控制语句(public,protected,private)相对class,struct等所在的块缩进 0 个空格

" t0 -- 如果函数返回值与函数名不在同一行,则返回值缩进 0 个空格

" (sus - 当一对括号跨越多行时,其后的行缩进前面 sw 指定的距离

""}}}

"设置C/C++语言的具体缩进方式 eg. switch case 缩进

 

"C的编译和运行 " 不好用,推荐用cvim.zip插件, /rr(运行), /ra(带参数运行), /ro(输出到(buff, xterm, vim))

"{{{

"func! CompileRunGcc()

" exec "w"

" exec "!gcc % -o %<"

" exec "! ./%<"

"endfunc

"}}}

"C的编译和运行 " 不好用,推荐用cvim.zip插件, /rr(运行), /ra(带参数运行), /ro(输出到(buff, xterm, vim))

 

"search 搜索 (visual mode)

""{{{

"set hls " hlsearch :highlight search

"set is " incsearch :increase search

"set ic " ignorecase :ignore case when searching

"set scs " smartcase :if has upper case, ignore 'ignorecase' option

""map h *N " h to highlight all word the same to which under cursor (可以使用vim自带shift + *)

""

""basically you press * or # to search for the current selection !! Really useful

vnoremap * :call VisualSearch('f')

vnoremap # :call VisualSearch('b')

function! VisualSearch(direction) range

let l:saved_reg = @"

execute "normal! vgvy"

let l:pattern = escape(@", '///.*$^~[]')

let l:pattern = substitute(l:pattern, "/n$", "", "")

if a:direction == 'b'

execute "normal ?" . l:pattern . "^M"

else

execute "normal /" . l:pattern . "^M"

endif

let @/ = l:pattern

let @" = l:saved_reg

endfunction

"map :nohl " :press to clear hightlight search highlight

""}}}

"search 搜索 (visual mode)

 

"设置状态栏,可以显示当前文件, 字符编码, 时间等

"{{{

"显示状态栏

set ruler

set laststatus=2

highlight statusline cterm=bold ctermfg=blue ctermbg=white

"显示状态栏

"

function! CurDir()

let curdir = substitute(getcwd(), $HOME, "~", "g")

return curdir

endfunction

 

function! CurTime()

let curtime = strftime("%m-%d %H:%M:%S")

return curtime

endfunction

"set statusline=[%n]/ %f%m%r%h/ /|/ / pwd:/ %{CurDir()}/ / /|%=/|/ %l,%c/ %p%%/ /|/ ascii=%b,hex=%b%{((&fenc==/"/")?/"/":/"/ /|/ /".&fenc)}/ /|/ %{$USER}/ @/ %{hostname()}/

"set statusline=[%n]/ %F%m%r%h/ /|/ / pwd:/ %{CurDir()}/ / /|%=/|/ %l,%c/ %p%%/ /|/ ascii=%b,hex=%B%{((&fenc==/"/")?/"/":/"/ /|/ /".&fenc)}/ /|

"使用%F就不需要使用自定义函数CurDir()

"set statusline=[%n]/ /|/ %F%m%r%h/ /|%=/|/ %l,%c/ %p%%/ /|/ ascii=%b,hex=%B%{((&fenc==/"/")?/"/":/"/ /|/ /".&fenc)}/ /|/ / %{CurTime()}/ /|

set statusline=[%n]/ /|/ %f%m%r%h/ /|%=/|/ %c/ /|/ ascii=%b,hex=%B%{((&fenc==/"/")?/"/":/"/ /|/ /".&fenc)}/ /|/ %{CurTime()}/ /|

"状态行显示内容

" %f 只显示名字不显示路径

" %F 当前文件名

" %m 当前文件修改状态

" %r 当前文件是否只读

" %Y 当前文件类型

" %{&fileformat} 当前文件编码

" %b 当前光标处字符的 ASCII 码值

" %B 当前光标处字符的十六进制值

" %l 当前光标行号

" %c 当前光标列号

" %V 当前光标虚拟列号 (根据字符所占字节数计算)

" %p 当前行占总行数的百分比

" %% 百分号

" %L 当前文件总行数

"}}}

"设置状态栏,可以显示当前文件, 字符编码, 时间等

 

"设置标题栏,可以显示文件名等

"{{{

if has('title') && (has('gui_running') || &title)

set titlestring=

set titlestring+=%f/ "文件名

set titlestring+=%h%m%r%w "标记符

set titlestring+=/ -/ %{v:progname} "程序名

endif

"}}}

"设置标题栏,可以显示文件名等

 

"当前行(列)高亮显示

"{{{

set cursorline

set cursorcolumn

" ctermfg : red(1) yellow(2) blue green grey brown cyan magenta 数字

"hi CursorLine term=reverse cterm=reverse ctermbg=darkred ctermfg=black guibg=blue guifg=white

"hi CursorLine term=none cterm=reverse ctermbg=Magenta ctermfg=DarkGray "guibg=blue guifg=white

"hi CursorLine term=none cterm=reverse ctermbg=Cyan ctermfg=DarkGray "guibg=blue guifg=white

"若你的背景是黑色且同时装了cctree.vim 这里设置最好将ctermbg=8 ctermfg=none 注释掉

hi CursorLine term=none cterm=underline "ctermbg=8 ctermfg=none "guibg=blue guifg=white

hi CursorColumn term=none cterm=bold ctermbg=none ctermfg=Magenta "guibg=darkgrey guifg=white

"nnoremap c : set cursorline! cursorcolumn!

"set cursorline

"au! Cursorhold * exe 'match CurrentLine //%' . line('.') . 'l.*/'

"set ut=100

"}}}

"当前行(列)高亮显示

 

"单行或多行注释 "也可以使用cvim.zip插件来完成注释(*.c文件) /cc ---> // /c* ---> /* */ /co ---> 取消

"{{{

" nmap :Setcomment

" "normal 模式下ctrl + C 快捷键

" imap :Setcomment

" "insert 模式下ctrl + C 快捷键

" vmap :SetcommentV

" "visual 模式下ctrl + C 快捷键

" command! -nargs=0 Setcomment call s:SET_COMMENT()

" command! -nargs=0 SetcommentV call s:SET_COMMENTV()

"

" "非视图模式下所调用的函数

" function! s:SET_COMMENT()

" let lindex=line(".")

" let str=getline(lindex)

" "查看当前是否为注释行

" let CommentMsg=s:IsComment(str)

" call s:SET_COMMENTV_LINE(lindex,CommentMsg[1],CommentMsg[0])

" endfunction

"

" "视图模式下所调用的函数

" function! s:SET_COMMENTV()

" let lbeginindex=line("'<") "得到视图中的第一行的行数

" let lendindex=line("'>") "得到视图中的最后一行的行数

" let str=getline(lbeginindex)

" "查看当前是否为注释行

" let CommentMsg=s:IsComment(str)

" "为各行设置

" let i=lbeginindex

" while i<=lendindex

" call s:SET_COMMENTV_LINE(i,CommentMsg[1],CommentMsg[0])

" let i=i+1

" endwhile

" endfunction

"

" "设置注释

" "index:在第几行

" "pos:在第几列

" "comment_flag: 0:添加注释符 1:删除注释符

" function! s:SET_COMMENTV_LINE( index,pos, comment_flag )

" let poscur = [0, 0,0, 0]

" let poscur[1]=a:index

" let poscur[2]=a:pos+1

" call setpos(".",poscur) "设置光标的位置

"

" if a:comment_flag==0

" "插入//

" exec "normal! i//"

" else

" "删除//

" exec "normal! xx"

" endif

" endfunction

"

" "查看当前是否为注释行并返回相关信息

" "str:一行代码

" function! s:IsComment(str)

" let ret= [0, 0] "第一项为是否为注释行(0,1),第二项为要处理的列,

" let i=0

" let strlen=len(a:str)

" while i

" "空格和tab允许为"//"的前缀

" if !(a:str[i]==' ' || a:str[i] == ' ' )

" let ret[1]=i

" if a:str[i]=='/' && a:str[i+1]=='/'

" let ret[0]=1

" else

" let ret[0]=0

" endif

" return ret

" endif

" let i=i+1

" endwhile

" return [0,0] "空串处理

" endfunction

"}}}

"单行或多行注释 "也可以使用cvim.zip插件来完成注释(*.c文件) /cc ---> // /c* ---> /* */ /co ---> 取消

 

"vim折叠功能

""{{{

"折叠方式,可用选项 'foldmethod' 来设定折叠方式:set fdm=***

"有 6 种方法来选定折叠:

"manual 手工定义折叠

"indent 更多的缩进表示更高级别的折叠

"expr 用表达式来定义折叠

"syntax 用语法高亮来定义折叠

"diff 对没有更改的文本进行折叠

"marker 对文中的标志折叠

"常用的折叠快捷键

"zf 创建折叠 (marker 有效)

"zo 打开折叠

"zO 对所在范围内所有嵌套的折叠点展开

"zc 关闭当前折叠

"zC 对所在范围内所有嵌套的折叠点进行折叠

"[z 到当前打开的折叠的开始处。

"]z 到当前打开的折叠的末尾处。

"zM 关闭所有折叠 (我喜欢)

"zr 打开所有折叠

"zR 循环地打开所有折叠 (我喜欢)

"zE 删除所有折叠

"zd 删除当前折叠

"zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠

"za 若当前打开则关闭,若当前关闭则打开 ( 这个就足够了)

"zA 循环地打开/关闭当前折叠

"zj 到下一折叠的开始处 ( 我喜欢 )

"zk 到上一折叠的末尾 ( 我喜欢 )

"set fdm=marker

"set foldmethod=indent

"要想在{ } 代码块中折叠,按空格键

"syntax 与 c.vim 中的 /cc 注释功能冲突

set fdm=marker

 

"关掉映射,经常带来麻烦

"nnoremap @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo') "使用空格打开或关闭折叠

"}}}

"vim折叠功能

 

"vim diff

""{{{

set diffexpr=MyDiff()

function! MyDiff()

let opt = ""

if &diffopt =~ "icase"

let opt = opt . "-i "

endif

if &diffopt =~ "iwhite"

let opt = opt . "-b "

endif

silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .

/ " > " . v:fname_out

endfunction

""}}}

"vim diff

 

"文件比较

""{{{

":vertical diffsplit FILE_RIGHT "与已打开的文件进行比较

"设置不同之处显示上下三行

set diffopt=context:3

"命令模式(ESC键进入):

"[c 跳转到下一个差异点

"]c 跳到上一个差异点

"dp 左边文件差异复制到右边文件(直接在键盘上行按下dp)

"do 右边文件差异复制到左边文件(直接在键盘上行按下do)

"zo 隐藏相同行

"zc 展开向同行

"u 撤销

"Ctrl+w 文件切换

"

":qa! 退出不保存

":wa 保存

":wqa 保存退出

":diffupdate 重新比较

""}}}

"文件比较

 

"单词列表匹配

"{{{

"ctrl+x ctrl+k

"apt-get install wordlist

set dictionary+=~/.vim/dict/wordlist.txt

"set cpt=.,b,t,k

set cpt=.,b,t

" .    scan the current buffer ('wrapscan' is ignored)

" w    scan buffers from other windows

" b    scan other loaded buffers that are in the buffer list

" u    scan the unloaded buffers that are in the buffer list

" U    scan the buffers that are not in the buffer list

" k    scan the files given with the 'dictionary' option

" kspell use the currently active spell checking |spell|

" k{dict}    scan the file {dict}. Several "k" flags can be given,

" patterns are valid too. For example: >

" :set cpt=k/usr/dict/*,k~/spanish

" s    scan the files given with the 'thesaurus' option

" s{tsr}    scan the file {tsr}. Several "s" flags can be given, patterns

" are valid too.

" i    scan current and included files

" d    scan current and included files for defined name or macro

" |i_CTRL-X_CTRL-D|

" ]    tag completion

" t    same as "]"

"}}}

"单词列表匹配

 

"括号智能匹配 autoclose.vim

"{{{

"let g:AutoClosePairs={'(': ')', '{': '}', '[': ']', '"': '"', "'": "'"}

let g:AutoClosePairs={'{': '}'} "间接不使用,不习惯

"}}}

"括号智能匹配 autoclose.vim

 

"简单tab智能完成 使用实际的tab 需要shift+tab 可以使用插件SuperTab

"{{{

"ctrl + c 可以中断正在查找

"function! Smart_TabComplete()

" let line = getline('.') " curline

" let substr = strpart(line, -1, col('.')+1) " from start to cursor

" let substr = matchstr(substr, "[^ /t]*$") " word till cursor

" if (strlen(substr)==0) " nothing to match on empty string

" return "/"

" endif

" let has_period = match(substr, '/.') != -1 " position of period, if any

" let has_slash = match(substr, '//') != -1 " position of slash, if any

" if (!has_period && !has_slash)

" return "//" " existing text matching

" elseif ( has_slash )

" return "//" " file matching

" else

" return "//" " plugin matching

" endif

"endfunction

"inoremap =Smart_TabComplete()

"}}}

"简单tab智能完成 使用实际的tab 需要shift+tab 可以使用插件SuperTab

 

"gf 命令 go file 到该文件去

"{{{

"set path+=/home/linux/u-boot-1.3.1/include/

"set path+=/usr/src/linux-headers-2.6.27-7/include/

"set path+=/usr/src/linux/include/

"}}}

"gf 命令 go file 到该文件去

 

"completeopt 弹出菜单 输入字母实现即时的过滤和匹配 ( 参考 neocomplcache )

""{{{

""关掉智能补全时的预览窗口 (Scratch)

"" menu 使用弹出菜单来显示可能的补全

"" longest 只插入匹配的最长公共文本

""set completeopt=menuone,menu,longest,preview

"filetype plugin indent on

set ofu=syntaxcomplete#Complete

set completeopt=menu,longest

""}}}

"completeopt 弹出菜单 输入字母实现即时的过滤和匹配 ( 参考 neocomplcache )

 

 

"----------------------

"利用 插件 丰富 功能

"----------------------

"{{{

 

"translate.vim 翻译插件(英->汉)

"{{{

"地址: http://www.vim.org/scripts/script.php?script_id=2996

"需要: apt-get install python

":Trans --> 翻译光标下的单词 上面有映射

":TransV --> 翻译选中块中的句子 上面有映射

"}}}

"translate.vim 翻译插件(英->汉)

 

"WinManager 插件 ( 不好用 )

""{{{

"let g:defaultExplorer=1

"let g:winManagerWindowLayout='FileExplorer|BufExplorer|TagList'

"let g:persistentBehaviour=0 "只剩一个窗口时, 退出vim.

"let g:winManagerWidth=80 "设置winmanager的宽度,默认为25

"nmap fir :FirstExplorerWindow

"nmap bot :BottomExplorerWindow

"nmap wm :WMToggle

"nmap :WMToggle "定义打开关闭winmanager按键

""}}}

"WinManager 插件 ( 不好用 )

 

"NERD_commenter.vim : 1218 "可以使用cvim.zip, 但是这个觉到习惯一些

""{{{

let NERDSpaceDelims=1 " 让注释符与语句之间留一个空格

let NERDCompactSexyComs=1 " 多行注释时样子更好看

let NERD_c_alt_style=1

"Default mapping:

"[count],cc " 以行为单位进行注释.

" ,c " comment , <--> , uncomment. ( 常用 )

" ,cm " 一段为单位进行注释. ( 常用 )

" ,cs " 简洁美观式注释. ( 常用 , 可以嵌套注释,用,cu取消注释 )

" ,cy " Same as ,cc except that the commented line(s) are yanked first.

" ,c$ " 注释当前光标到行末的内容.

" ,cA " 在行末进行手动输入注释内容.

" ,ca " 切换注释方式(/**/ <--> //). ( 常用 )

" ,cl " Same cc, 左对齐.

" ,cb " Same cc, 两端对其.

" ,cu " Uncomments the selected line(s). ( 常用 )

"}}}

"NERD_commenter.vim : 1218 "可以使用cvim.zip, 但是这个觉到习惯一些

 

"F8单独切换打开NERD_tree ( F8 )

"{{{

"-----------------------------------------------------------------

" plugin - NERD_tree.vim 以树状方式浏览系统中的文件和目录

" :ERDtree 打开NERD_tree :NERDtreeClose 关闭NERD_tree

" o 打开关闭文件或者目录 t 在标签页中打开

" T 在后台标签页中打开 ! 执行此文件

" p 到上层目录 P 到根目录

" K 到第一个节点 J 到最后一个节点

" u 打开上层目录 m 显示文件系统菜单(添加、删除、移动操作)

" r 递归刷新当前目录 R 递归刷新当前根目录

"-----------------------------------------------------------------

let g:NERDChristmasTree = 1 "色彩显示

let g:NERDTreNERDShowHidden = 1 "显示隐藏文件

let g:NERDTreeWinPos = 'left' "窗口显示位置

let g:NERDTreeHighlightCursorline = 0 "高亮当前行

let g:NERDTreeWinSize = 40 "设置显示宽度

"nmap :NERDTreeToggle.

"

" o.......打开所选文件或目录 ( 常用 )

" enter..............相当于o

" go......类似o, 但光标仍然停留在NERD_tree ( 常用 )

" t.......在新标签中打开所选文件

" T.......类似t, 但光标仍然停留在NERD_tree

" i.......在一个水平分割窗口中打开文件

" gi......类似i, 但光标仍然停留在NERD_tree

" s.......在一个垂直分割窗口中打开文件.......................|NERDTree-s|

" gs......类似s, 但光标仍然停留在NERD_tree

" O.......递归打开所选目录

" 鼠标双击.......相当于o, 没错支持鼠标的~!

""}}}

"F8单独切换打开NERD_tree ( F8 )

 

"bufexplorer插件 ( F2 )

"{{{

"map :BufExplorer

",be 打开选择窗口 ','是前面mapleader设置的 ( F2 )

"r可以进行反向排序.

"d/D可以用来关闭文件.

"p可以用来显示/关闭绝对路径模式

"}}}

"bufexplorer插件 ( F2 )

 

"echofunc.vim 在命令行中显示函数信息 ( 不错 )

""{{{

"直接下载解压即可( tags 插件已包含相似功能, 没必要装此插件 )

"这个插件的功能需要 tags 文件的支持, 并且在创建 tags 文件的时候要加选项"--fields=+lS" : ctags -R --fields=+lS

let g:EchoFuncKeyPrev=''

let g:EchoFuncKeyNext=''

let g:EchoFuncLangsUsed = ["c","java","cpp"]

""}}}

"echofunc.vim 在命令行中显示函数信息 ( 不错 )

 

"code_complete.vim 函数参数提示 ctags -R --c-kinds=+p --fields=+S

""{{{

" 若已经有echofunc.vim 和 cvim.zip插件那此插件不需要.

" (1) 下载后放到plugin目录中

" (2) ctags -R --c-kinds=+p --fields=+S

" (3) 提示: 默认触发键tab 导致supertab插件可能不正常,从而影响neocomplcache自动补全(如果设置的话).

"let g:completekey = "" "默认hotkey

"( 插件越多 冲突越多 功能重复 一切从简 )

""}}}

"code_complete.vim 函数参数提示 ctags -R --c-kinds=+p --fields=+S

 

"DoxygenToolkit.vim 代码说明文档自动生成

""{{{

" (1) :DoxLic 生成license (不常使用)

" (2) :DoxAuthor 生成文件描述 (C程序等常使用,@file有用)

" (3) :Dox 生成函数注释 (很有用)

map da :DoxAuthor

map df :Dox

map db :DoxBlock

 

"注: 如果你同时安装了showmark.vim, 可能会给你带来不好的感觉, 因为DoxygenToolkit.vim中用了mark d, 解决方法:

" (方法1) 设置showmark插件

" let showmarks_include = "abcefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ" "将小d去掉, 左侧不会显示d了.

" (方法2)

" 1. 可以先修改DoxygenToolkit.vim, 将所有使用到的标记d替换成D

" :%s/mark/ d/mark/ D/g

" :%s/normal/ `d/normal/ `D/g

" 2. 设置showmark插件

" let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ" "将D去掉

 

" 对class struct enum union等结构类的成员变量的注释为 /**< 解释变量 */

" @class 文档化一个C++类

" @struct 文档化一个 C 结构

" @union 文档化一个联合

" @enum 文档化一个枚举

" @fn 文档化一个函数

" @var 文档化一个变量,类型转换,枚举值其中之一

" @def 文档化一个#define

" @typedef 文档化一个类型转换

"

" Shell 命令

" (x) doxygen 生成文档(这个命令需要安装 apt-get install doxgen )

" (1) doxygen -g "默认生成doxygen的配置文件Doxyfile, 你也可以指定 doxygen -g myfile

" (2) 编辑生成的配置文件 (配置文件采用 = 这样的结构)

" * OUTPUT_DIRECTORY : 为生成的文档指定存放位置

" * INPUT : 指定源文件目录位置, 如有多个以空格分开

" * FILE_PATTERNS : 指定源文件扩展名 (eg .c,.cc,.cpp,.h )

" * RECURSIVE : 源代码层次结构嵌套设置, ( yes or no )

" * EXTRACT_ALL : 函数没有注释文档也要提取信息(即yes)

" * EXTRACT_PRIVATE : 设置为yes才会将私有信息提取

" * EXTRACT_STATIC : 设置为yes才会提取静态成员

" * 其他需要自己看

" (3) doxygen Doxyfile "运行

" Shell 命令

 

let g:DoxygenToolkit_blockHeader = "=== FUNCTION ======================================================================"

let g:DoxygenToolkit_authorName = "Michael"

let g:DoxygenToolkit_versionString = "1.0"

let g:DoxygenToolkit_briefTag_structName = "yes"

let g:DoxygenToolkit_briefTag_enumName = "yes"

let g:DoxygenToolkit_briefTag_funcName = "yes"

let g:DoxygenToolkit_paramTag_post = " <+Ctrl_j+>" "如果装了cvim.zip(最新版) ctrl+j 可以跳到下一个要输入的<+xxx+>地方

let g:doxygen_enhanced_color = 1

let g:DoxygenToolkit_blockFooter = "====================================================================================="

 

"let g:DoxygenToolkit_blockHeader = "--------------------------------------------------------------------------"

"let g:DoxygenToolkit_authorName = "Michael"

"let g:DoxygenToolkit_authorTag = "@Author "

"let g:DoxygenToolkit_dateTag = "@Date "

"let g:DoxygenToolkit_versionTag = "@Version "

"let g:DoxygenToolkit_fileTag = "@File "

"let g:DoxygenToolkit_briefTag_pre = "@Description "

"let g:DoxygenToolkit_paramTag_pre = "@Param "

"let g:DoxygenToolkit_paramTag_post = ":"

"let g:DoxygenToolkit_returnTag = "@Return "

"let g:DoxygenToolkit_throwTag_pre = "@Exception "

"let g:DoxygenToolkit_briefTag_funcName = "yes"

"let g:doxygen_enhanced_color = 1

"let g:DoxygenToolkit_blockFooter = "--------------------------------------------------------------------------"

""}}}

"DoxygenToolkit.vim 代码说明文档自动生成

 

":ConqueTerm bash

""{{{

" vim 中使用终端 : 可用于终端调试

""}}}

":ConqueTerm bash

 

"fencview.vim 对你打开的文件的编码自动识别

""{{{

"直接下载解压即可

let g:fencview_autodetect = 1

""}}}

"fencview.vim 对你打开的文件的编码自动识别

 

"F7 Grep.vim 查找字符插件

""{{{

" 将光标位置放到所要搜索的字符串上, 按F7, 默认搜索所有(*)类型文件

" nnoremap :Grep

" 直接放到plugin中.

""}}}

"F7 Grep.vim 查找字符插件

 

"FuzzyFinder fuf.vim模糊查找

""{{{

" 1.FuzzyFinder 下载:http://www.vim.org/scripts/script.php?script_id=1984

" 2.vim-l9.vim 下载: http://www.vim.org/scripts/script.php?script_id=3252 "FuzzyFinder依赖该插件

" 3.模式

" 1 |:FufBuffer| - Buffer mode (|fuf-buffer-mode|)

" 2 |:FufFile| - File mode (|fuf-file-mode|)

" 3 |:FufCoverageFile| - Coverage-File mode (|fuf-coveragefile-mode|)

" 4 |:FufDir| - Directory mode (|fuf-dir-mode|)

" 5 |:FufMruFile| - MRU-File mode (|fuf-mrufile-mode|)

" 6 |:FufMruCmd| - MRU-Command mode (|fuf-mrucmd-mode|)

" 7 |:FufBookmarkFile| - Bookmark-File mode (|fuf-bookmarkfile-mode|)

" 8 |:FufBookmarkDir| - Bookmark-Dir mode (|fuf-bookmarkdir-mode|)

" 9 |:FufTag| - Tag mode (|fuf-tag-mode|)

" 10 |:FufBufferTag| - Buffer-Tag mode (|fuf-buffertag-mode|)

" 11 |:FufTaggedFile| - Tagged-File mode (|fuf-taggedfile-mode|)

" 12 |:FufJumpList| - Jump-List mode (|fuf-jumplist-mode|)

" 13 |:FufChangeList| - Change-List mode (|fuf-changelist-mode|)

" 14 |:FufQuickfix| - Quickfix mode (|fuf-quickfix-mode|)

" 15 |:FufLine| - Line mode (|fuf-line-mode|)

" 16 |:FufHelp| - Help mode (|fuf-help-mode|)

" 4.介绍

" :向下选择匹配 :向上选择匹配

" :水平分割选中项 :垂直分割选中项 :直接跳到选中项

" :切换到下一个模式 :切换到上一个模式

" :fuzzy matching 和 partial matching匹配模式切换 ( 模糊查找 与 部分查找 : 前者输入关键字错误时也可显示, 后者输入的部分关键字一定正确 )

let g:fuf_previewHeight = 1 "预览高度

let g:fuf_enumeratingLimit = 20 "符合条件的最多显示20个

let g:fuf_modesDisable = [] "打开查找最近文件模式

""}}}

"FuzzyFinder fuf.vim模糊查找

 

" lookupfile插件默认会使用ctags产生的tag来查找,效率很低,使用下面脚本生成filenametags

""{{{

"当使用了acp.vim ( autocomplpop.vim)时, 该插件好像有点问题. 不过还是可以使用

"echo "!_TAG_FILE_SORTED    2    /2=foldcase/"; find . -not -iregex '.*/./(jar/|gif/|jpg/|class/|exe/|dll/|pdd/|sw[op]/|xls/|doc/|pdf/|zip/|tar/|ico/|ear/|war/|dat/).*' -type f -printf "%f/t%p/t1/n" | sort -f > ./filenametags

let g:LookupFile_MinPatLength = 2 "最少输入3个字符才开始查找

let g:LookupFile_PreserveLastPattern = 0 "不保存上次查找的字符串

let g:LookupFile_PreservePatternHistory = 1 "保存查找历史

let g:LookupFile_AlwaysAcceptFirst = 1 "回车打开第一个匹配项目

let g:LookupFile_AllowNewFiles = 0 "不允许创建不存在的文件

let g:LookupFile_SortMethod = "" "关闭对搜索结果的字母排序

let g:LookupFile_UpdateTime = 200

let g:LookupFile_AlwaysAcceptFirst = 1

let g:LookupFile_DefaultCmd = ':LUTags'

" Don't display binary files

let g:LookupFile_FileFilter = '/.class$/|/.o$/|/.obj$/|/.exe$/|/.jar$/|/.zip$/|/.war$/|/.ear$'

let g:LookupFile_TagExpr = string('/home/tags/filenametags')

 

"if filereadable("/home/tags/filenametags") "设置tag文件的名字

" let g:LookupFile_TagExpr ='"/home/tags/filenametags"'

"endif

 

"映射LookupFile为,lk

nmap lk :LUTags

"映射LUBufs为,ll

nmap ll :LUBufs

"映射LUWalk为,lw

nmap lw :LUWalk

 

" lookup file with ignore case

function! LookupFile_IgnoreCaseFunc(pattern)

let _tags = &tags

try

let &tags = eval(g:LookupFile_TagExpr)

let newpattern = '/c' . a:pattern

let tags = taglist(newpattern)

catch

echohl ErrorMsg | echo "Exception: " . v:exception | echohl NONE

return ""

finally

let &tags = _tags

endtry

 

" Show the matches for what is typed so far.

let files = map(tags, 'v:val["filename"]')

return files

endfunction

let g:LookupFile_LookupFunc = 'LookupFile_IgnoreCaseFunc'

""}}}

" lookupfile插件默认会使用ctags产生的tag来查找,效率很低,使用下面脚本生成filenametags

 

"neocomplcache.vba 插件替代autocomplpop(acp.vim) omnicppcomplete.vim , 在使用acp.vim,OmniCppComplete.vim 你就被out.

""{{{

"-----------------------------------------------------------------

" plugin - NeoComplCache.vim 自动补全插件

" 1、使用缓存,自动补全时效率高;

" 2、生成的关键词列表准确;

" 3、支持下划线分割的关键词,如apple_boy_cat,就可以只输入a_b_c,然后补全;

" 4、支持驼峰格式匹配关键词,如AppleBoyCat,就可以只输入ABC,然后补全;

" 5、既可以像AutoComplPop那样在Vim中输入的同时自动弹出补全列表,又可以自定义快捷键手动触发;

" 6、支持从文件名和目录名中匹配补全条件;

" 7、对于程序源文件,支持从语言API中匹配补全条件;

"-----------------------------------------------------------------

 

" Disable AutoComplPop.

"set completeopt=menu,longest

let g:acp_enableAtStartup = 0

" Use neocomplcache.

let g:neocomplcache_enable_at_startup = 1

" Use smartcase.

let g:neocomplcache_enable_smart_case = 0

" Use camel case completion.

let g:neocomplcache_enable_camel_case_completion = 1 "支持驼峰格式匹配关键词

" Use underbar completion.

let g:neocomplcache_enable_underbar_completion = 1 "支持下划线分割的关键词

" Set minimum syntax keyword length.

let g:neocomplcache_min_syntax_length = 3

let g:neocomplcache_lock_buffer_name_pattern = '/*ku/*'

let g:neocomplcache_enable_auto_delimiter = 1

let g:neocomplcache_disable_auto_complete = 1 "设置NeoComplCache不自动弹出补全列表

let g:neocomplcache_enable_wildcard = 1

" Define dictionary.

let g:neocomplcache_dictionary_filetype_lists = {

/ 'default' : '',

/ 'vimshell' : $HOME.'/.vimshell_hist',

/ 'scheme' : $HOME.'/.gosh_completions',

/ }

 

" Define keyword.

if !exists('g:neocomplcache_keyword_patterns')

let g:neocomplcache_keyword_patterns = {}

endif

let g:neocomplcache_keyword_patterns['default'] = '/h/w*'

"

"let g:neocomplcache_enable_auto_select = 1

let g:neocomplcache_enable_caching_message=1 "显示启动进度

 

 

" Enable omni completion.

autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS

autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags

autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS

autocmd FileType python setlocal omnifunc=pythoncomplete#Complete

autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

autocmd filetype cpp set omnifunc=omni#cpp#complete#main

 

"Enable heavy omni completion.

if !exists('g:neocomplcache_omni_patterns')

let g:neocomplcache_omni_patterns = {}

endif

let g:neocomplcache_omni_patterns.ruby = '[^. */t]/./w*/|/h/w*::'

autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete

let g:neocomplcache_omni_patterns.php = '[^. /t]->/h/w*/|/h/w*::'

let g:neocomplcache_omni_patterns.c = '/%(/./|->/)/h/w*'

let g:neocomplcache_omni_patterns.cpp = '/h/w*/%(/./|->/)/h/w*/|/h/w*::'

 

"

"映射:

"inoremap neocomplcache#manual_filename_complete()

"inoremap neocomplcache#manual_filename_complete()

"inoremap pumvisible() ? "/" : neocomplcache#manual_keyword_complete()

"inoremap neocomplcache#close_popup()

"inoremap neocomplcache#cancel_popup()

"inoremap neocomplcache#undo_completion()

"inoremap neocomplcache#complete_common_string()

"

""}}}

"neocomplcache.vba 插件替代autocomplpop(acp.vim) omnicppcomplete.vim , 在使用acp.vim,OmniCppComplete.vim 你就被out.

 

"omnicppcomplete : c/c++ omni-completion with ctags database

""{{{

"

"推荐使用... "尽可能缩小范围,比如 1.补全函数 2.补全单词 3.补全路径 等

" || - Keywords in 'complete' searching down.

" || - Keywords in 'complete' searching up (SuperTab default).

" || - Whole lines.

" || - Keywords in current file.

" || - Keywords in 'dictionary'.

" || - Keywords in 'thesaurus', thesaurus-style.

" || - Keywords in the current and included files.

" || - Tags. ---> 有用

" || - File names.

" || - Definitions or macros.

" || - Vim command-line.

" || - User defined completion.

" || - Omni completion.

" |s| - Spelling suggestions.

" Ctrl+P 向前切换成员

" Ctrl+N 向后切换成员

" Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字

" Ctrl+Y 表示退出下拉窗口, 并接受当前选项

" 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 拼写建议

"

"set nocp "要关闭兼容 (上面已处理)

let omnicpp_namespacesearch = 1

let omnicpp_globalscopesearch = 1

let omnicpp_showaccess = 1

let omnicpp_showprototypeinabbr = 1 " show function parameters

let omnicpp_maycompletedot = 1 " autocomplete after .

let omnicpp_maycompletearrow = 1 " autocomplete after ->

let omnicpp_maycompletescope = 1 " autocomplete after ::

let omnicpp_defaultnamespaces = ["std", "_glibcxx_std"]

""automatically open and close the popup menu / preview window

"au cursormovedi,insertleave * if pumvisible() == 0|silent! pclose|endif

""set completeopt=menuone,menu,longest,preview

""自定义快捷键 ( 若使用neocomplcache插件: 已定义了下面很多映射 )

"inoremap pumvisible()?"/":"/"

"inoremap pumvisible()?"///":"/" "注意cvim.zip另有映射,而且很强大

inoremap pumvisible()?"///":"/"

inoremap pumvisible()?"/":"/"

"inoremap pumvisible()?"/":"/"

"inoremap pumvisible()?"/":"/"

""上面的映射都是在插入模式下的映射,解释如下

""如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车

""如果下拉菜单弹出,ctrl-j映射为在下拉菜单中向下翻页。否则映射为ctrl-x ctrl-o

""如果下拉菜单弹出,ctrl-k映射为在下拉菜单中向上翻页,否则仍映射为ctrl-k

""如果下拉菜单弹出,ctrl-u映射为ctrl-e,即停止补全,否则,仍映射为ctrl-u

""如果下拉菜单弹出,ctrl-p映射为在下拉菜单中表示上一项。

""如果下拉菜单弹出,ctrl-n映射为在下拉菜单中表示下一项。

"":set omnifunc ? 查看设置的补全插件

""}}}

"omnicppcomplete : c/c++ omni-completion with ctags database

 

"scrollcolor.vim 和 color_sample_pack.vim

"{{{

"1. 下载scrollcolor http://www.vim.org/scripts/script.php?script_id=1488

"2. 下载color sample pack http://www.vim.org/scripts/script.php?script_id=625

"3. 该网页是上面插件的主题样式参考图片 http://www.vi-improved.org/color_sampler_pack/

"4. 将插件放到正确的位置后打开一个文件命令模式:COLORSCROLL 上下键选择喜爱的主题

"}}}

"scrollcolor.vim 和 color_sample_pack.vim

 

"CCtree.Vim C Call-Tree Explorer 源码浏览工具 关系树 (赞)

""{{{

"1. 除了cscope ctags 程序的安装,还需安装强力胶 ccglue(ctags-cscope glue): http://sourceforge.net/projects/ccglue/files/src/

" (1) ./configure && make && make install

" (2) $ccglue -S cscope.out -o cctree.out 或 $ccglue -S cscope1.out cscope2.out -o cctree.out

" (3) :CCTreeLoadXRefDBFromDisk cctree.out

"2. 映射快捷键(上面F1) 其中$CCTREE_DB是环境变量,写在~/.bashrc中

" map :CCTreeLoadXRefDBFromDisk $CCTREE_DB

" eg.

" export CSCOPE_DB=/home/tags/cscope.out

" export CCTREE_DB=/home/tags/cctree.out

" export MYTAGS_DB=/home/tags/tags

 

" "注: 如果没有装ccglue ( 麻烦且快捷键不好设置,都用完了 )

" (1) map xxx :CCTreeLoadDB $CSCOPE_DB "这样加载有点慢, cscope.out cctree.out存放的格式不同

" (2) map xxx :CCTreeAppendDB $CSCOPE_DB2 "最将另一个库

" (3) map xxx :CCTreSaveXRefDB $CSCOPE_DB "格式转化xref格式

" (4) map xxx :CCTreeLoadXRefDB $CSCOPE_DB "加载xref格式的库 (或者如下)

map xxx :CCTreeLoadXRefDBFromDisk $CSCOPE_DB "加载xref格式的库

" (5) map xxx :CCTreeUnLoadDB "卸载所有的数据库

"3. 设置

let g:CCTreeDisplayMode = 3 " 当设置为垂直显示时, 模式为3最合适. (1-minimum width, 2-little space, 3-witde)

let g:CCTreeWindowVertical = 0 " 水平分割,垂直显示

let g:CCTreeWindowMinWidth = 40 " 最小窗口

let g:CCTreeUseUTF8Symbols = 1 "为了在终端模式下显示符号

""}}}

"CCtree.Vim C Call-Tree Explorer 源码浏览工具 关系树 (赞)

 

"加速你的补全 -- 插件: SuperTab 可以关闭这个

"{{{

"设置按下后默认的补全方式, 默认是,

"还有其他的补全方式, 你可以看看下面的一些帮助:

":help ins-completion

":help compl-omni

" 0 - 不记录上次的补全方式

" 1 - 记住上次的补全方式,直到用其他的补全命令改变它

" 2 - 记住上次的补全方式,直到按 ESC 退出插入模式为止

"let g:SuperTabDefaultCompletionType="context"

"let g:SuperTabDefaultCompletionType=""

"let g:SuperTabDefaultCompletionType = ""

let g:SuperTabDefaultCompletionType = ""

let g:SuperTabRetainCompletionType=2

 

"}}}

"加速你的补全 -- 插件: SuperTab 可以关闭这个

 

"教你高效地浏览源码 -- 插件: TagList

""{{{

set tags+=$MYTAGS_DB

"在taglist窗口中,可以使用下面的快捷键:

" 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样

"o 在一个新打开的窗口中显示光标下tag

" 显示光标下tag的原型定义

"u 更新taglist窗口中的tag

"s 更改排序方式,在按名字排序和按出现顺序排序间切换

"x taglist窗口放大和缩小,方便查看较长的tag

"+ 打开一个折叠,同zo

"- 将tag折叠起来,同zc

"* 打开所有的折叠,同zR

"= 将所有tag折叠起来,同zM

"[[ 跳到前一个文件

"]] 跳到后一个文件

"q 关闭taglist窗口

" 显示帮助

"使用 :Tlist

":help taglist.txt ( ~/.vim/doc/taglist.txt )

"

"快捷键

"map :TlistToggle

"noremap :Tlist

"noremap :TlistSync

"快捷键

"

highlight Pmenu ctermbg=Green "guibg=LightGray

highlight PmenuSel ctermbg=Red "guibg=DarkGray guifg=White

highlight PmenuSbar ctermbg=Blue "guibg=DarkBlue

highlight PmenuThumb ctermbg=Yellow "guibg=Black

"设定Linux系统中ctags程序的位置

"let Tlist_Ctags_Cmd = '/usr/bin/ctags' "好像使用apt-get install安装的默认路径

 

"http://dfrank.ru/uploaded_files/ctags/ctags-5.8.1.tar.gz "该版本加了补丁,若装了indexer.tar.gz推荐使用

let Tlist_Ctags_Cmd = '/usr/local/bin/ctags' "好像使用./configure && make && make install安装的默认路径

"设定Linux系统中ctags程序的位置

"

"不同时显示多个文件的tag,只显示当前文件的

"let Tlist_Show_One_File=1

"不同时显示多个文件的tag,只显示当前文件的

"

"如果taglist窗口是最后一个窗口,则退出vim

let Tlist_Exit_OnlyWindow=1

"如果taglist窗口是最后一个窗口,则退出vim

"

"在右侧窗口中显示taglist窗口

let Tlist_Use_Right_Window = 1

"在右侧窗口中显示taglist窗口

"

"在左侧窗口中显示taglist窗口

"let Tlist_Use_Left_Window = 1

"在左右侧窗口中显示taglist窗口

"

" 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置

let Tlist_Use_SingleClick= 1

" 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置

"

"Taglist窗口宽度

let Tlist_WinWidth = 45

"Taglist窗口宽度

"

"在启动VIM后,自动打开taglist窗口

"let Tlist_Auto_Open=1

"在启动VIM后,自动打开taglist窗口

"

"taglist始终解析文件中的tag,不管taglist窗口有没有打开

"let Tlist_Process_File_Always=1

"taglist始终解析文件中的tag,不管taglist窗口有没有打开

"

"set 1 同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来

let Tlist_File_Fold_Auto_Close=1

"set 1 同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来

""}}}

"教你高效地浏览源码 -- 插件: TagList

 

"当查看源码是使用 -- 插件 : Cscope_map.vim

""{{{

"是否使用 quickfix 窗口来显示 cscope 结果

set cscopequickfix=s-,c-,d-,i-,t-,e-

"echo "export CSCOPE_DB=/home/tags/cscope.out" >> ~/.bashrc

"------- 下面是对cscope_map.vim文件的部分翻译

""0 或 s 查找本 C 符号(可以跳过注释)

""1 或 g 查找本定义

""2 或 d 查找本函数调用的函数 --可以到函数的定义处

""3 或 c 查找调用本函数的函数 --该函数被谁调用

""4 或 t 查找本字符串

""6 或 e 查找本 egrep 模式

""7 或 f 查找本文件

""8 或 i 查找包含本文件的文件

""ctrl + o 可以返回

"nmap s :cs find s =expand("")

"nmap g :cs find g =expand("")

"nmap c :cs find c =expand("")

"nmap t :cs find t =expand("")

"nmap e :cs find e =expand("")

"nmap f :cs find f =expand("")

"nmap i :cs find i ^=expand("")$

"nmap d :cs find d =expand("")

"

""window split horizontally

"nmap s :scs find s =expand("")

"nmap g :scs find g =expand("")

"nmap c :scs find c =expand("")

"nmap t :scs find t =expand("")

"nmap e :scs find e =expand("")

"nmap f :scs find f =expand("")

"nmap i :scs find i ^=expand("")$

"nmap d :scs find d =expand("")

"

""window split vertically

"nmap s :vert scs find s =expand("")

"nmap g :vert scs find g =expand("")

"nmap c :vert scs find c =expand("")

"nmap t :vert scs find t =expand("")

"nmap e :vert scs find e =expand("")

"nmap f :vert scs find f =expand("")

"nmap i :vert scs find i ^=expand("")$

"nmap d :vert scs find d =expand("")

"

""使用方法

""生成一个 cscope 的数据库

""1.cd /usr/src/linux/

""2.cscope -Rbq

""cs add /usr/src/linux/cscope.out /usr/src/linux/

""reset : 重新初始化所有连接. 用法 : cs reset

""

""1.下載cscope包 http://cscope.sourceforge.net/

""2.安裝cscope A../configure B.make C.make install

""3.修改set csprg 位置 :/usr/local/bin/cscope

""4.F3

""5.测试(1)cscope find g 函数名 (2) cscope find c 函数名

""6. :cw 显示多个结果

""

""下面是shell脚本,放到源码目录下运行

""#!/bin/sh

""find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files

""cscope -bkq -i cscope.files

""ctags -R

""上面是shell脚本,放到源码目录下运行

""

""下面是对cscope -Rbkq 的解释

""-R: 在生成索引文件时,搜索子目录树中的代码

""-b: 只生成索引文件,不进入cscope的界面

""-k: 在生成索引文件时,不搜索/usr/include目录

""-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

""下面是对cscope -Rbkq 的解释

""

""-------------当前使用 快键----------

""noremap :!./vitags.sh:cs reset

""noremap :! cscope -Rbq:cs reset

""

""cscope和ctags的兼容问题

"if has("cscope")

"    set csprg=/usr/bin/cscope

"    set csto=0

"    set cst "具有Ctags快捷键功能eg. ctrl+] , ctrl + t

"    set nocsverb

"    " add any database in current directory

"    if filereadable("cscope.out")

"     cs add cscope.out

"    " else add database pointed to by environment

"    elseif $CSCOPE_DB !=" "

"     cs add $CSCOPE_DB "这是一个很好的方法

"    endif

"    set csverb

"    set cscopetag

"endif

""cscope和ctags的兼容问题

":help if_cscop.txt

":cs show

"}}}

"当查看源码是使用 -- 插件 : Cscope_map.vim

 

"利用cvim.zip插件实现,下载后解压到~/.vim中

""{{{

"下载地址: http://www.vim.org/scripts/script.php?script_id=213

"

"let g:C_MapLeader = ',' "默认的是'/'

"Ctrl+j 的使用:eg. 当你使用/if添加一个函数时,会多出一些类似<+xxx+>的东西(需要重新填写), ctrl+j可以帮你忙,试一下很强.

"

"1.添加文件头注释(自动完成)

"2.添加c函数(标准模式执行/if, 再输入函数名)

"3.添加main函数(标准模式执行/im)

"4.添加函数注释 (标准模式执行/cfu)

"5.添加注释框架 (标准模式执行/cfr)

"6.添加头文件 (标准模式执行/p<包含头文件 或 /p"包含头文件)

"7.添加宏定义 (标准模式执行/pd)

"8.添加代码片段

"(标准模式执行/nr,需在~/.vim/c-support/codesnippets/中加入存放代码的文件)

" -- Help ---------------------------------------------------------------

"

" /hm show manual for word under the cursor (n,i)

" /hp show plugin help (n,i)

"

" -- Comments -----------------------------------------------------------

"

" /cl end-of-line comment (n,v,i)

" /cj adjust end-of-line comment(s) (n,v,i) ---> V模式下可以对注释调整对齐

" /cs set end-of-line comment column (n) ---> 设置行尾注释,起始位置(列)

" /c* code -> comment /* */ (n,v)

" /cc code -> comment // (n,v)

" /co comment -> code (n,v) ---> V模式下取消注释

" /cfr frame comment (n,i)

" /cfu function comment (n,i)

" /cme method description (n,i)

" /ccl class description (n,i)

" /cfdi file description (implementation) (n,i)

" /cfdh file description (header) (n,i)

" /ccs C/C++-file section (tab. compl.) (n,i)

" /chs H-file section (tab. compl.) (n,i)

" /ckc keyword comment (tab. compl.) (n,i)

" /csc special comment (tab. compl.) (n,i)

" /cd date (n,v,i)

" /ct date /& time (n,v,i)

"

" -- Statements ---------------------------------------------------------

"

" /sd do { } while (n,v,i)

" /sf for (n,i)

" /sfo for { } (n,v,i)

" /si if (n,i)

" /sif if { } (n,v,i)

" /sie if else (n,v,i)

" /sife if { } else { } (n,v,i)

" /se else { } (n,v,i)

" /sw while (n,i)

" /swh while { } (n,v,i)

" /ss switch (n,v,i)

" /sc case (n,i)

" /s{ /sb { } (n,v,i)

"

" -- Preprocessor -------------------------------------------------------

"

" /ps choose a standard library include (n,i)

" /pc choose a C99 include (n,i)

" /p< #include <> (n,i)

" /p" #include "" (n,i)

" /pd #define (n,i)

" /pu #undef (n,i)

" /pie #if #else #endif (n,v,i)

" /pid #ifdef #else #endif (n,v,i)

" /pin #ifndef #else #endif (n,v,i)

" /pind #ifndef #def #endif (n,v,i)

" /pi0 #if 0 #endif (n,v,i)

" /pr0 remove #if 0 #endif (n,i)

" /pe #error (n,i)

" /pl #line (n,i)

" /pp #pragma (n,i)

"

" -- Idioms -------------------------------------------------------------

"

" /if function (n,v,i)

" /isf static function (n,v,i)

" /im main() (n,v,i)

" /i0 for( x=0; x

" /in for( x=n-1; x>=0; x-=1 ) (n,v,i)

" /ie enum + typedef (n,i)

" /is struct + typedef (n,i)

" /iu union + typedef (n,i)

" /ip printf() (n,i)

" /isc scanf() (n,i)

" /ica p=calloc() (n,i)

" /ima p=malloc() (n,i)

" /isi sizeof() (n,v,i)

" /ias assert() (n,v)

" /ii open input file (n,i)

" /io open output file (n,i)

"

" -- Snippets -----------------------------------------------------------

"

" /nr read code snippet (n,i)

" /nw write code snippet (n,v,i)

" /ne edit code snippet (n,i)

" /np pick up prototype (n,v,i)

" /ni insert prototype(s) (n,i)

" /nc clear prototype(s) (n,i)

" /ns show prototype(s) (n,i)

" /ntl edit local templates (n,i)

" /ntg edit global templates (n,i)

" /ntr rebuild templates (n,i)

"

" -- C++ ----------------------------------------------------------------

"

" /+co cout << << endl; (n,i)

" /+" << "" (n,i)

" /+c class (n,i)

" /+ps #include <...> STL (n,i)

" /+pc #include C (n,i)

" /+cn class (using new) (n,i)

" /+ci class implementation (n,i)

" /+cni class (using new) implementation (n,i)

" /+mi method implementation (n,i)

" /+ai accessor implementation (n,i)

"

" /+tc template class (n,i)

" /+tcn template class (using new) (n,i)

" /+tci template class implementation (n,i)

" /+tcni template class (using new) impl. (n,i)

" /+tmi template method implementation (n,i)

" /+tai template accessor implementation (n,i)

"

" /+tf template function (n,i)

" /+ec error class (n,i)

" /+tr try ... catch (n,v,i)

" /+ca catch (n,v,i)

" /+c. catch(...) (n,v,i)

"

" -- Run ----------------------------------------------------------------

"

" /rc save and compile (n,i)

" /rl link (n,i)

" /rr run (n,i)

" /ra set comand line arguments (n,i)

" /rm run make (n,i)

" /rmc run 'make clean' (n,i)

" /rme executable to run (n,i)

" /rma cmd. line arg. for make (n,i)

" /rp run splint (n,i)

" /rpa cmd. line arg. for splint (n,i)

" /rk run CodeCheck (TM) (n,i)

" /rka cmd. line arg. for CodeCheck (TM) (n,i)

" /rd run indent (n,v,i)

" /rh hardcopy buffer (n,v,i)

" /rs show plugin settings (n,i)

" /rx set xterm size (n, only Linux/UNIX & GUI)

" /ro change output destination (n,i)

"filetype plugin on

"}}}

"利用cvim.zip插件实现,下载后解压到~/.vim中

 

"a.vim实现源文件与头文件切换

"{{{

let alternateSearchPath = 'sfr:.,sfr:./include,sfr:../include,sfr:../inc' "设置include(.h)文件存在何处.

let alternateNoDefaultAlternate = 1 "当没有找到相应的.h文件时,不自动创建

":A 切换当前文件的头文件,在当前窗口打开(或者反过来) "先打开.h .c 文件存于buff中

":AS 功能同:A,但是切换到水平分割窗口的打开

":AV 功能同:A,但是切换到竖直分割的窗口打开

":AT 功能同:A,但是切换到标签页打开

"}}}

"a.vim实现源文件与头文件切换

 

"vim 自带Marks的使用, 如果不习惯可以使用插件ShowMarks(下面有介绍), 使能showmarks_enable = 1

"{{{

"这个功能是VIM自带的功能, 习惯就好, 一切从简.可以查看帮助文档, 下面是简单介绍.

"(1) 设置标记 --> norm模式下, m + [a-z]. ( m - mark, [a-z] 也可以是[A-Z], 推荐只使用小写字母. )

"(2) 删除标记 --> 多种方法如下:

" 1. 删除标记所在的行.

"   2. 在其他行作相同的标记(eg. ma ).

" 3. 命令模式下 :delmarks a ( 简写 :delm a )

" 4. 命令模式下 :delmarks! ( 删除所有小写字母标记 )

" 5. 删除多个标记 :delmarks abcd (a,b,c,d都被删除, 也¯以 :delmarks a-d)

"(3) 使用标记 -->

" 1. 定位到标记位置(以a为例) --> `a or 'a ( 区别在于 `a到目标行的最左端,'a到目标行的第一个非空字符之前)

" 2. 对当前行到标记位置的操作--> d`a , y`a , c`a 分别表示对该区域的删除, 复制, 更改

" 3. 显示设置的标记信息 --> :marks (显示所有) :marks a (只显示a标记的信息)

"(4) 有用特殊标记(系统设置好的)

" 1. '' 或者 `` 从当前行跳回到最近一次跳到改行的位置去.

" 2. `. 从当前行跳回到最后一次修改的行的位置去.

"}}}

"vim 自带Marks的使用, 如果不习惯可以使用插件ShowMarks(下面有介绍), 使能showmarks_enable = 1

 

"ShowMarks高亮功能显示出标记的位置( 先使用vim提供的sign功能进行标记位置 )

"{{{

" ================= (第一个) http://www.vim.org/scripts/script.php?script_id=152 对vim7.x是有一小点问题的. =============

let showmarks_enable = 1 "使能showmarks插件

"Show which marks:全部的大写标记和小写 ( 推荐只使用小写, 大写可能有bug )

let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ" "我把D去掉了,因为DoxygenToolkit.vim中修改了点东西

" Ignore help, quickfix, non-modifiable buffers:对文件类型为help, quickfix, 和不可修改的缓冲区,不显示标记的位置

let showmarks_ignore_type = "hqm"

" Hilight lower & upper marks

let showmarks_hlline_lower = 1

let showmarks_hlline_upper = 1

hi ShowMarksHLl ctermbg=Black ctermfg=White "guibg=#FFDB72 guifg=Black "Magenta

hi ShowMarksHLu ctermbg=Yellow ctermfg=Black "guibg=#FFB3FF guifg=Black

"ShowMarks插件中已经定义了一些快捷键:

",mt - 打开/关闭ShowMarks插件 ( 常用 )

",mo - 强制打开ShowMarks插件

",mh - 清除当前行的标记 ( 常用 )

",ma - 清除当前缓冲区中所有的标记 ( 常用 )

",mm - 在当前行打一个标记,使用下一个可用的标记名 ( 常用 )

 

" ================= (第二个) http://www.vim.org/scripts/script.php?script_id=2142 =============

"解压到vim家目录即可, 使用默

"设置可用来作标记的字母

"let g:showmarks_marks = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "使用默认

"}}}

"ShowMarks高亮功能显示出标记的位置( 先使用vim提供的sign功能进行标记位置 )

 

"mark.vim 当你在文件中想多个不同的关键词,且用不同的颜色显示, 那么该插件可你帮助你

"{{{

"下载地址: http://www.vim.org/scripts/script.php?script_id=1238

"1. map keys 触发键 默认是'/', 可以设置为',' let g:mapleader=",". 本vimrc已设置为','

"2. ,m : "高亮"显示光标下的单词或取消当前光标下的单词高亮显示

"3. ,r : 手工输入需要高亮显示的单词

"4. ,n : 当光标下有"高亮"显示的单词时,则取消. 如光标下没有"高亮"的单词时,则取消所有"高亮"的单词.

"5. * : 下一个与光标下颜色相同的高亮单词.

"6. # : 上一个与光标下颜色相同的高亮单词.

"7. ,/ : 下一个高亮单词(不一定是相同颜色).

"8. ,? : 上一个高亮单词(不一定是相同颜色).

"9. 重新定义需要高亮单词的颜色:

hi MarkWord1 ctermbg=Yellow ctermfg=White guibg=#FFDB72 guifg=Black

hi MarkWord2 ctermbg=Blue ctermfg=White guibg=#9999FF guifg=Black

hi MarkWord3 ctermbg=Red ctermfg=White guibg=#FF7272 guifg=Black

hi MarkWord4 ctermbg=Cyan ctermfg=White guibg=#8CCBEA guifg=Black

hi MarkWord5 ctermbg=Brown ctermfg=White guibg=#FF7272 guifg=Black

hi MarkWord6 ctermbg=Magenta ctermfg=White guibg=#FFB3FF guifg=Black

hi MarkWord7 ctermbg=Green ctermfg=White guibg=#A4E57E guifg=Black

"}}}

"mark.vim 当你在文件中想多个不同的关键词,且用不同的颜色显示, 那么该插件可你帮助你

 

"简单就好tags更新 OmniTags.vim

"{{{

"下载地址: http://vim.sourceforge.net/scripts/script.php?script_id=2870

"快捷键映射(上)

"}}}

"简单就好tags更新 OmniTags.vim

 

"==========================================================================================================

"自动更新tags文件autotags.vim插件

""{{{

"要到autotags.vim中修改tags文件大小 __maxTagsFileSize = 1024 * 1024 * 5

"let g:autotagDisabled = 1 "还是关掉好.太低效

"let g:autotagTagsFile = '/home/tags/tags'

""}}}

"自动更新tags文件autotags.vim插件

 

"工程管理值tags更新 -- indexer.vim ( 实在太慢了, 比蜗牛还慢(对大项目来说))

""{{{

"设置ctags参数(使用默认即可)

"let g:indexer_ctagsCommandLineOptions = '--c++-kinds=+p+l --fields=+ialS --extra=+q'

 

"(1) 下载indexer.tar.gz : http://www.vim.org/scripts/script.php?script_id=3221

"(2) 下载已经打好补丁的ctags : http://dfrank.ru/uploaded_files/ctags/ctags-5.8.1.tar.gz

"(3) alias vim='vim --servername $USER' 写入~/.bashrc

"(4) 实例:

" (i). 建立目录文件(含有两个工程)

" tree -a ~/workplace :

" |-- myproject

" | |-- inc

" | | |-- file1.h

" | | |-- file2.h

" | | `-- file3.h

" | |-- src

" | | |-- file1.c

" | | |-- file2.c

" | | `-- file3.c

" | `-- .vimprj ---> 可以没有

" | `-- config.vim ---> 可以为空

" `-- yourproject

" |-- inc

" | |-- file4.h

" | |-- file5.h

" | `-- file6.h

" |-- src

" | |-- file4.c

" | |-- file5.c

" | `-- file6.c

" `-- .vimprj

" `-- config.vim

"

" (ii). vim ~/.indexer_files

" cat ~/.indexer_files:

" [PROJECTS_PARENT filter="*.c *.h"]

" ~/workplace

"

" (iii). vim ~/workplace/myproject/src/file1.c

" cat ~/.indexer_files_tags:

" myproject

"

" (iiii). vim ~/workplace/yourproject/src/file4.c

" cat ~/.indexer_files_tags:

" myproject

" yourproject

 

""}}}

"工程管理值tags更新 -- indexer.vim

 

"srcexpl.vim just like source insight

""{{{

"let loaded_srcexpl = 0

" // The switch of the Source Explorer

"nmap :SrcExplToggle

 

" // Set the height of Source Explorer window

"let g:SrcExpl_winHeight = 8

 

" // Set 100 ms for refreshing the Source Explorer

"let g:SrcExpl_refreshTime = 100

 

" // Set "Enter" key to jump into the exact definition context

" let g:SrcExpl_jumpKey = ""

 

" // Set "Space" key for back from the definition context

"let g:SrcExpl_gobackKey = ""

 

" // In order to Avoid conflicts, the Source Explorer should know what plugins

" // are using buffers. And you need add their bufname into the list below

" // according to the command ":buffers!"

"let g:SrcExpl_pluginList = [

/ "__Tag_List__",

/ "_NERD_tree_",

/ "Source_Explorer"

/ ]

 

" // Enable/Disable the local definition searching, and note that this is not

" // guaranteed to work, the Source Explorer doesn't check the syntax for now.

" // It only searches for a match with the keyword according to command 'gd'

"let g:SrcExpl_searchLocalDef = 1

 

" // Do not let the Source Explorer update the tags file when opening

"let g:SrcExpl_isUpdateTags = 0

 

" // Use 'Exuberant Ctags' with '--sort=foldcase -R .' or '-L cscope.files' to

" // create/update a tags file

"let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ."

 

" // Set "" key for updating the tags file artificially

"let g:SrcExpl_updateTagsKey = ""

"}}}

"srcexpl.vim just like source insight

"==========================================================================================================

 

"----------------------

"利用 插件 丰富 功能

"----------------------

"}}}

 

 

"==================================以下是个人喜爱使用的vim(or 插件)其他强大功能,尚未完成===========================

"

"vim master

""{{{

"

"Verdancy --- New Commer

""{{{

" f --- find; practic : (before)"aabbbccdd" --> ex: dfc --> (after)"cdd"

"

"寄存器

""{{{

" q[a-z] --- 记录命令, 已q结束, @[a-z]引用 --- 很强大,需要习惯使用

" "[a-z]p --- 可以将寄存器[a-z]中的命令以文本的方式输出,并进行修改

" "[a-z]y$ --- 将寄存器修改后的内容存回到对应寄存器

""}}}

"寄存器

"

""}}}

"Verdancy --- New Commer

"

"Visual 选中模式

""{{{

" shift + v : 配合jk,上下键,整行选择

" ctrl + v : 配合hjkl,上下左右键,灵活选择区域

" o : 在选中的区域中对角线移动

" O : 在选中的区域中行左右移动

" gv : 重新选中原来的选中的区域

" : : 在选中区域后,shift+:到命令模式, : eg. '<,'>s/pattern/newstring/g -- 在选中的区域中查找patte && replace

" ctrl + v 选中一列后, 按I插入字符,Esc退出 : 每一行都添加这个字符,很好的一个注释方法

""}}}

"Visual 选中模式

"

"Command Mode

""{{{

" :g/pattern/d --- delete line contained of string "pattern"

""}}}

"Command Mode

"

"窗口

""{{{

"ctrl + 0 : 恢复窗口大小

"ctrl + = : 窗口等大

"ctrl + w + _ : 窗口最大化

"nctrl + w + _ : 改变窗口的大小

"ctrl + w + ctrl + c : 关闭窗口

"ctrl + w + ctrl + ] : 以函数所在文件分割窗口

"ctrl + w + shift + [hjkl] : 窗口位置放置

"

"shift + z + z : close vim edit. You need set auto write.

"

"vim t1.c t2.c t3.c -o2 : open thress files using two windows. if -o(no number), using three windows here.

""}}}

"窗口

"

"杂项

""{{{

" !!date --- 插入日期

" read !date -R --- 插入日期 ( -R 显示日期的格式而已 man date )

"

" ctr + w ctrl + c --- 关闭当前窗口

"

" %s//s/+$// --- 删除多余的空格

"

" ctrl + K --- 插入特殊字符

" digraph --- 显示特殊字符,字符组合

"

" set ic --- 忽略大小写

"

" . --- 重复前次操作

"

" ctrl + a --- repeat record.

"

" ctrl + r --- 反撤消, 当u撤消后,又想恢复,可以使用

"

" daw && caw && cis --- delete a word && change a word && 修改一个句子

"

" cc && dd --- change one line reserving indent && delete one line

"

" CTRL+U ---- CTRL+D ---> half page move

" CTRL+E ---- CTRL+Y ---> one line move

" CTRL+F ---- CTRL+B ---> one page move

"

" CTRL + O --- 返回刚才位置,每按一次都会退回到之前的位置

" CTRL + I --- 与CTRL+O相反,每按一次退回来

"

" [i --- (将光标移到变量上)显示第一个局部变量定义处

" [I --- (将光标移到变量上)显示所有该变量的定义处

" '' --- 回到刚才停留处

"

" // ---- 精确查找

"

"

""}}}

"杂项

"

""}}}

"vim master

"

"Shell

""{{{

"巧妙去除Linux下代码行中的^M符号和windows下代码编辑引起的警告错

":%s /^M//g ,其中^M的写法是按住ctrl不放,再按v,然后按M,再放ctrl

""{{{

" #wash_error.sh

" #!/bin/sh

" ls *.h *.c | awk '{print $1}' > dealfile

" cat dealfile | while read file

" do

" echo " " >> $file

" done

" #dos2unix *.c *.h

""}}}

"巧妙去除Linux下代码行中的^M符号和windows下代码编辑引起的警告错

""}}}

"Shell

"

"==================================以上是个人喜爱使用的vim(or 插件)其他强大功能,尚未完成===========================

 

"Doxygen 例子

"{{{

"/**

" * @file t.c

" * @brief Test for test

" * @author Michael

" * @version 1.0

" * @date 2011-04-10

" */

"

"/**

" * @struct STU_INFO

" * @brief This is a struct about student's infomation.

" */

"struct STU_INFO

"{

" unsigned int stu_no; /**< stu_no : ID of the Student */

" unsigned int stu_age; /**< stu_age : Age of the Student */

" char stu_name[100]; /**< stu_name: Name of the Student */

" unsigned short int stu_level; /**< stu_level: level of the Student */

" struct STU_INFO *next; /**< next : Pointer to next Student */

"};

"

"/**

" * @enum STU_LEVEL

" * @brief This is a enum about student's level.

" */

"enum STU_LEVEL

"{

" NUMBER_ONE, /**< student's level : 1 or A */

" NUMBER_TWO, /**< student's level : 2 or B */

" NUMBER_THREE, /**< student's level : 3 or C */

" NUMBER_FOUR /**< student's level : 4 or D */

"};

"

"/**

" * @brief This is a function about getting the student's infomation by id.

" * - student who get A can own:

" * -# A intellectual computer.

" * -# A kiss of Michael.

" * - student who get B can own:

" * -# A intellectual phone.

" * -# A kiss of Jone.

" *

" * @param id a unsigned integer param.

" * @param stu a pointer that return the student info.

" *

" * @return student's level

" */

"int get_student_info( unsigned int id, struct STU_INFO *stu )

"{

" return level.

"}

"}}}

"Doxygen 例子

 

"个人工程shell

"{{{

"1. 创建cscope库 cs.sh

" #!/bin/sh

" #rm -f cscope.* tags

" find /root/Trunk/EC2108_C27/ /root/Trunk/Hippo/ -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" > cscope.files

" cscope -bkq -i cscope.files

" ccglue -S cscope.out -o cctree.out

"

"2. 创建文件查找库 filename.sh

" echo -e "!_TAG_FILE_SORTED/t2/t/2=foldcase/" > filenametags

" find /root/Trunk/EC2108_C27 -not -regex '.*/./(png/|gif/|db/|bak/|swp/|doc/|html/|htm/|jsp/|js/)' ! -path "*svn*" -type f -printf "%f/t%p/t1/n" | sort -f >> filenametags

" find /root/Trunk/Hippo/ -not -regex '.*/./(png/|gif/|db/|bak/|swp/|doc/|html/|htm/|jsp/|js/)' ! -path "*svn*" -type f -printf "%f/t%p/t1/n" | sort -f >> filenametags

"

"3. 创建tags库 tags.sh

" ctags -R --c++-kinds=+p --fields=+ialS --extra=+q /root/Trunk/EC2108_C27 /root/Trunk/Hippo/

"

"4. 设置环境变量(写到~/.bashrc)

" export CSCOPE_DB=/home/tags/cscope.out

" export CCTREE_DB=/home/tags/cctree.out

" export MYTAGS_DB=/home/tags/tags

"}}}

"个人工程shell

你可能感兴趣的:(Vim 个人设置 (新加cctree等插件))