Vim Setting

Vim Setting
2010年12月05日
  "{{{ set mouse=a noremap :make noremap :make clean;make noremap :!cvs up nnoremap @=((foldclosed(line('.')) 0) ? 'zc' : 'zo') if has("multi_byte") set encoding=utf-8 set fileencoding=chinese set fileencodings=ucs-bom,utf-8,chinese endif set wrap set nu set ts=4 set sw=4 set ru set hls set is set sm set cin set cino=:0g0t0(sus "set visualbell " visual bell instead of beeping "set browsedir =current " which directory to use for the file browser set smartcase set incsearch " use incremental search set nowrap " do not wrap lines set nowritebackup "}}} "------------------------------------------------- ------------------------------ " Change the working directory to the directory containing the current file "------------------------------------------------- ------------------------------ ""{{{ if has("autocmd") autocmd BufEnter * :lchdir %:p:h endif "has("autocmd") ""}}} "------------------------------------------------- ----------------------------- "下面是作为一个编程者的个人设置
  "------------------------------------------------- -----------------------------
  "简单配置
  "{{{
  set hlsearch
  syntax on
  colorscheme elflord
  set autoread " read open files again when changed outside Vim
  set autowrite " write a modified buffer on each :next , ...
  "可用来改动补全时采用的方式
  :set wildmode=list:full
  "可用来改动补全时采用的方式
  "可用来取得菜单式的匹配列表
  :set wildmenu
  "可用来取得菜单式的匹配列表
  "关闭自动备份
  set nobackup
  "关闭自动备份
  "关闭交换文件
  set nocp
  "关闭交换文件
  "显示匹配的括号([{和}])
  set showmatch
  "显示匹配的括号([{和}])
  "关闭遇到错误时的声音提示
  set noerrorbells
  set novisualbell
  "关闭遇到错误时的声音提示
  "使用空格来替换tab
  "set expandtab
  "使用空格来替换tab
  "在vim编辑器下方显示命令
  set showcmd
  "在vim编辑器下方显示命令
  "当文件在外部被修改,自动更新该文件
  filetype indent on
  "当文件在外部被修改,自动更新该文件
  "}}}
  "简单配置
  "自己定义函数或函数头文件
  "{{{
  "ctrl+F12 或 ctrl+F11:生成tags
  "vim -t sys_open : 就可以到sys_open 的定义出
  "--c++-kinds=+p : 为C++文件增加函数原型的标签
  "--fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
  "--extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全 map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . "map :!ctags -R --c-kinds=+p --fields=+iaS --extra=+q . map :!ctags -R . set tags+=./tags "}}} "自己定义函数或函数头文件
  "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
  "}}}
  "vim折叠功能
  "completeopt 弹出菜单 输入字母实现即时的过滤和匹配
  ""{{{
  "关掉智能补全时的预览窗口 (Scratch)
  " menu 使用弹出菜单来显示可能的补全
  " longest 只插入匹配的最长公共文本
  "set completeopt=menuone,menu,longest,preview
  set completeopt=menu,longest
  "filetype plugin on
  "set ofu=syntaxcomplete#Complete
  "
  filetype plugin indent on
  autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
  autocmd FileType python set omnifunc=pythoncomplete#Complete
  autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
  autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
  autocmd FileType css set omnifunc=csscomplete#CompleteCSS
  autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
  autocmd FileType java set omnifunc=javacomplete#Complete
  if has("autocmd") && exists("+omnifunc")
  autocmd Filetype *
  \ if &omnifunc == "" | \ setlocal omnifunc=syntaxcomplete#Complete | \ endif endif let g:rubycomplete_buffer_loading = 1 let g:rubycomplete_classes_in_global = 1 "let g:rubycomplete_rails = 1 " ""}}} "completeopt 弹出菜单 输入字母实现即时的过滤和匹配
  "C库函数参数Scratch显示
  "1.先下载glibc库 "{{{
  "2.解压到/usr/src中
  "3.执行:ctags -R --c-kinds=f
  "4.ctrl+x ctrl+o
  "one 添加c库函数定义数据库
  "set tags+=/usr/src/glibc/tags
  "two 添加linux 源码 函数定义数据库
  set tags+=/usr/src/linux/tags
  "}}}
  "C库函数参数Scratch显示
  "C库类型定义,函数声明,宏定义等
  "1.cd /usr/include/ "{{{
  "2.执行:ctags -R --c-kinds=+pxd
  "3.使用:ctrl+x ctrl+]
  "set tags+=/usr/include/tags
  "}}}
  "C库类型定义,函数声明,宏定义等
  "单词列表匹配
  "{{{
  "ctrl+x ctrl+k
  set dictionary+=/usr/share/dict/wordlist.txt
  set complete-=k complete+=k
  "}}}
  "单词列表匹配
  "括号智能匹配
  "{{{
  :inoremap ( ()i
  :inoremap ) =ClosePair(')')
  :inoremap { {}i
  :inoremap } =ClosePair('}')
  :inoremap [ []i
  :inoremap ] =ClosePair(']')
  :inoremap " ""i
  :inoremap " =ClosePair('"')
  ":inoremap i
  ":inoremap >=ClosePair('>')
  function ClosePair(char)
  if getline('.')[col('.') - 1] == a:char
  return "\"
  else
  return a:char
  endif
  endf
  "}}}
  "括号智能匹配 "让autocomlpop 支持snipMate.vim
  "将下面fun写到snipMate.vim"{{{
  "fun! GetSnipsInCurrentScope()
  " let snips = {}
  " for scope in [bufnr('%')] + split(&ft, '\.') + ['_']
  " call extend(snips, get(s:snippets, scope, {}), 'keep')
  " call extend(snips, get(s:multi_snips, scope, {}),'keep')
  " endfor
  " return snips
  "endf
  "set g:acp_behaviorSnipmateLength=1
  "}}}
  "让autocomlpop 支持snipMate.vim
  "tab智能完成 使用实际的tab 需要shift+tab
  "{{{
  "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
  "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 到该文件去
  "----------------------
  "利用 插件 丰富 功能
  "----------------------
  "使用 autocomplpop.vim 插件
  ""{{{ " 1. 下载 autocomplpop.vim 后,放到Vim文件目录下的plugin目录中
  " 2. 增加智能提示触发命令
  " 3. 加入PHP的全能提示触发命令
  if !exists('g:AutoComplPop_Behavior')
  let g:AutoComplPop_Behavior = {}
  let g:AutoComplPop_Behavior['php'] = []
  call add(g:AutoComplPop_Behavior['php'], {'command': "\\",'pattern': printf('\(->\|::\|\$\)\k\{%d,}$', 0),'repeat': 0,})
  endif
  ""}}}
  "使用 autocomplpop.vim 插件
  "加速你的补全 -- 插件: SuperTab 使用上面的,可以关闭这个
  "{{{
  "设置按下后默认的补全方式, 默认是,
  "现在改为. 关于的补全方式,
  "还有其他的补全方式, 你可以看看下面的一些帮助:
  ":help ins-completion
  ":help compl-omni
  " 0 - 不记录上次的补全方式
  " 1 - 记住上次的补全方式,直到用其他的补全命令改变它
  " 2 - 记住上次的补全方式,直到按 ESC 退出插入模式为止
  "let g:SuperTabRetainCompletionType=2
  "let g:SuperTabDefaultCompletionType=""
  "}}}
  "加速你的补全 -- 插件: SuperTab 使用上面的,可以关闭这个
  "OmniCppComplete : C/C++ omni-completion with ctags database
  ""{{{
  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
  "自定义快捷键
  inoremap pumvisible()?"\":"\"
  inoremap pumvisible()?"\\\":"\"
  inoremap pumvisible()?"\\\":"\"
  inoremap pumvisible()?"\":"\"
  "inoremap pumvisible()?"\":"\"
  "inoremap pumvisible()?"\":"\"
  "=================================
  "注意:tab 是选择下一项, shift+tab 是选择上一项
  "=================================
  "上面的映射都是在插入模式下的映射,解释如下
  "如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车
  "如果下拉菜单弹出,CTRL-J映射为在下拉菜单中向下翻页。否则映射为CTRL-X CTRL-O
  "如果下拉菜单弹出,CTRL-K映射为在下拉菜单中向上翻页,否则仍映射为CTRL-K
  "如果下拉菜单弹出,CTRL-U映射为CTRL-E,即停止补全,否则,仍映射为CTRL-U
  "如果下拉菜单弹出,CTRL-P映射为在下拉菜单中表示上一项。
  "如果下拉菜单弹出,CTRL-N映射为在下拉菜单中表示下一项。 ":set omnifunc ? 查看设置的补全插件
  "autocmd FileType cpp set omnifunc=omni#cpp#complete#Main
  ""}}}
  "OmniCppComplete : C/C++ omni-completion with ctags database
  "教你高效地浏览源码 -- 插件: TagList
  ""{{{
  "在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
  "快捷键
  "
  "设定Linux系统中ctags程序的位置
  let Tlist_Ctags_Cmd = '/usr/bin/ctags'
  "设定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定义的位置
  "
  "在启动VIM后,自动打开taglist窗口
  "let Tlist_Auto_Open=1
  "在启动VIM后,自动打开taglist窗口
  " "taglist始终解析文件中的tag,不管taglist窗口有没有打开
  "let Tlist_Process_File_Always=1
  "taglist始终解析文件中的tag,不管taglist窗口有没有打开
  "
  "同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来
  let Tlist_File_Fold_Auto_Close=1
  "同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来
  ""}}}
  "教你高效地浏览源码 -- 插件: TagList
  "当查看源码是使用 -- 插件 : Cscope
  "是否使用 quickfix 窗口来显示 cscope 结果"{{{
  set cscopequickfix=s-,c-,d-,i-,t-,e-
  "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("")
  "使用方法
  "生成一个 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/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
  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
  "利用c.vim插件实现,下载后解压到~/.vim中
  "1.添加文件头注释(自动完成)"{{{
  "2.添加c函数(标准模式执行\if, 再输入函数名)
  "3.添加main函数(标准模式执行\im)
  "4.添加函数注释 (标准模式执行\cfu)
  "5.添加注释框架 (标准模式执行\cfr)
  "6.添加头文件 (标准模式执行\p<包含头文件或 \p"包含头文件)
  "7.添加宏定义 (标准模式执行\pd)
  "8.添加代码片段
  "(标准模式执行\nr,需在~/.vim/c-support/codesnippets/中加入存放代码的文件)
  filetype plugin on
  "}}}
  "利用c.vim插件实现,下载后解压到~/.vim中
  "----------------------
  "利用 插件 丰富 功能
  "----------------------
  " 临时
  ""{{{
  "set tags+=/home/linux/u-boot-1.3.1/tags
  "set tags+=/usr/src/linux-headers-2.6.27-7/include/
  "noremap :set tags+=/usr/src/linux/tags
  "noremap :set tags=./tags
  noremap :cs add /usr/src/linux/cscope.out /usr/src/linux/
  ""}}}
  " 临时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值