实战技巧:精进Vim的使用 http://blog.csdn.net/hitlion2008/article/details/6884694
简明Vim练级攻略 http://www.csdn.net/article/2011-09-08/304226
=======================================================
一、 Ctags用法:
1. 源码目录建立tag:ctags –R
打开vim,运行命令:set tags=/source/tags
2. <C-]>从函数调用处跳到定义处
<C-t>从定义处跳回到调用处
二、 Taglist用法:
1. 手册::help taglist.txt
2. Taglist窗口快捷键:
<CR> 跳转到光标下的标签定义处
o(小写) 打开一个新窗口,跳转到光标下的标记定义处
P(大写) 跳转到前一个(Ctrl-W_p)窗口中的标记处
p(小写) 在文件窗口中显示标记的定义且保持光标处在taglist窗口中
t 新建一tab窗口,打开文件并跳转到标记处,如文件已在某一tab被打
开,则只跳转.
Ctrl-t 新建一tab窗口,打开文件并跳转到标记处
<Space> 显示当前光标下的标记的原型(prototype)
u 更新taglist 窗口中的标记
s 标记排序(按名字还是按标记在文件中出现的自然顺序<从上至下> )
d 删除光标下的标记
x 放大或缩小 taglist 窗口
+ 展开一个折叠(fold)
- 收缩一个折叠
* 展开所有折叠
= 收缩所有折叠
[[ 跳转到上一个文件的开头
<Backspace> 跳转到上一个文件的开头
]] 跳转到下一个文件的开头
<Tab> 跳转到下一个文件的开头
三、 WinManager:
文件浏览器和窗口管理器整合Taglist和netrw.
用法:
1. 手册::help winmanager
2. 打开::WMToggle
3. 关闭::WMClose
4. 窗口之间切换光标: ctrl+w
四、 cscope用法:
1. 帮助 :h cs / help if_cscop.txt
2. 建立cscope数据库:在项目根目录下运行 cscope –Rbq
3. 把生成的cscope文件导入到vim中来
:cs add /source /cscope.out /source
4. "cscope find"的用法:
:cs find c|d|e|f|g|i|s|t name
0 或 s | 查找本 C 符号(可以跳过注释) |
1 或 g | 查找本定义 |
2 或 d | 查找本函数调用的函数 |
3 或 c | 查找调用本函数的函数 |
4 或 t | 查找本字符串 |
6 或 e | 查找本 egrep 模式 |
7 或 f | 查找本文件 |
8 或 i | 查找包含本文件的文件 |
5. cscope –R进入图形化界面
ctrl+d 退出
tab 在结果与搜索菜单之间移动
ctrl+p 前一项(对搜索结果和菜单项都适用)
ctrl+n 后一项(对搜索结果和菜单项都适用)
打开一个C源码程序,把光标移到一个C标识符上, 按 CTRL-\ s
( 先ctrl-\ ,再按s 键 ,速度不能太慢) ,如果有结果显示,可用快捷键移动:
下翻: 空格/d/j (屏幕/页/行)
上翻: b/u/k (同上)
6. Cscope 默认只支持C, lex, 和 yacc 文件 (.c, .h, .l, .y) ,如果还要它索引其它类型的怎么办?
在当前目录创建一个名为cscope.files 的文件,把要cscope索引的文件都写入该文件.此时可以通过cscope -bR 重建cscope索引数据库.
五、 a.vim插件在h/c之间跳转:
:A | 在新Buffer中切换到c/h文件 |
:AS | 横向分割窗口并打开c/h文件 |
:AV | 纵向分割窗口并打开c/h文件 |
:AT | 新建一个标签页并打开c/h文件 |
六、 自动补全omni-completion:
1. 帮助: :help new-omni-completion
2. 配置:
filetype plugin indent on
set completeopt=longest,menu
3. 使用
"Ctrl+X Ctrl+O", 会弹出一个下列菜单, 显示所有匹配的标签,
快捷键可以用:
Ctrl+P | 向前切换成员 |
Ctrl+N | 向后切换成员 |
Ctrl+E | 表示退出下拉窗口, 并退回到原来录入的文字 |
Ctrl+Y | 表示退出下拉窗口, 并接受当前选项 |
4. 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 | 拼写建议 |
"""" 自定义,追加到标准vimrc之后 """""
" Favourate
set number
set nobackup
colorscheme desert
set hlsearch
set autoindent "自动缩进
set cindent "C语言风格缩进
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noswapfile
set showmatch "高亮匹配括号
set binary "可读二进制文件
set wrap "自动换行
set linebreak "整词换行
set cursorline "高亮当前行
"set cursorcolumn
"set history=1000
"set encoding=utf-8
" Taglist
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
let Tlist_Ctags_Cmd="C:\\HOME\\bin\\ctags"
"set tags+=tags
"set tags+=~/vimfiles/tags/libc.tags
"set tags+=~/vimfiles/tags/susv2.tags
"set tags+=~/vimfiles/tags/glib.tags
"set tags+=~/vimfiles/tags/cpp.tags
set completeopt=longest,menu " 智能补全
" cscope
if has("cscope")
set cscopequickfix=s-,c-,d-,i-,t-,e-
endif
" WinManager
let g:winManagerWindowLayout='FileExplorer|TagList'
"nmap wm :WMToggle<cr>
" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" SuperTab
"let g:SuperTabRetainCompletionType=2
"let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" Csupport
"map <silent> <F9> <Esc>:cprevious<CR>
"map <silent> <F10> <Esc>:cnext<CR>
" Chinese help
if version >= 603
set helplang=cn
endif