vim写c/c++的经验总结

个人用户在vim上的配置在~/.vimrc下,不用弄系统的vim配置文件。

查看代码的操作

Ctrl + ] 定位函数的定义
Ctrl + o 回跳光标定位处 Ctrl + t 类似于两个'
Ctrl + i 前跳光标定位处 tag,这个只能配合Ctrl + o来前跳
gd 定位变量的定义
gf 进入头文件
n 查找下一个,等同 *
Shift+n 查找上一个 ,等同#
w和b,比l和h用的多一点。
小写的o比a,i用的多一点
u是回退
Ctrl + r是u的前跳,这个只能配合u进行前跳
%找匹配的括号
[[ 上一个代码块,一般是方法
]] 下一个代码块

ubuntu的快捷键
Shift+Ctrl+T 打开终端新的标签页 
Ctrl+PgUp/PgDn 切换终端标签页 

taglist
如果需要查看函数列表,需要启动Taglist,在Vim的命令状态输入:TlistToggle, //Tlist
在Vim界面的左面就会出现函数列表。安CTRL+WW(2次W),可以切换到函数列表区, //Ctrl w w //Ctrl w q 关闭这个视窗 CTRL-w o关闭其他所有窗口
移动到函数名称行后按ENTER即可查看函数代码。                   //Enter

修改代码的操作

插入字符的方法,除了i和a,还有r,配合f用不错。

全文查找cout并替换为//cout,即注释cout的指令。其中%s是全文的意思//需要用\来转义,这里只更换每一行第一个cout,如何要更换每一个cout,需要改为 %s/cout/\/\/cout/g
 %s/cout/\/\/cout

 ggvG$是全选,是个组合键,跳到首行,进入visual视图,G是跳到尾行,$是进入行尾
v如何多行连续选取呢。5Gv80G 5到80行就都选了。

Shift + Insert 是可以在insert的模式下,进行黏贴。
我用vimrc的map定义了,p ,y ,a ,x等快捷键搞定这个,后面会附我的vimrc。
reg可以查看vim的剪切板。

vim 添加注释的方法
Ctrl + v 选择列
大写的I 输入 //
连续按2次esc就可以了。

=,可以整理代码

关于ctags,cscope和vimgrep

ctags:
在工程的多个目录下生产tags的方法:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
在.vimrc中增加递归查找ctags  
set tags=tags;

ctags生成系统库索引的方法
ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --fields=+S  -R -f ~/.vim/systags /usr/include /usr/local/include
在.vimrc中增加相应的配置:
set tags+=~/.vim/systags

cscope:
find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -name '*.cc' -o -name '*.java' -o -name  '*.cs' > cscope.files
cscope -Rbq
在vimrc中,增加引入cscope.out的操作,cs add cscope.out
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s     查找本 C 符号(可以跳过注释)
1 或 g     查找本定义
2 或 d     查找本函数调用的函数
3 或 c     查找调用本函数的函数 C-c
4 或 t     查找本字符串 C-x
6 或 e     查找本 egrep 模式
7 或 f     查找本文件
8 或 i     查找包含本文件的文件 
可以在vimrc中,自定义快捷键,来辅助查找。

vimgrep:
vimgrep的效果,比cscope要快一些,而且安装没有插件。
用法:vim " main \{0,\}("gj **/*.c
vim是vimgrep缩写,查找 main \{0,\}(,目的是查找所有的main函数,g是在一行中有多个匹配,返回多个行,j是不跳转,这里的参数没有分隔符, %是当前文件,*是当前目录,**是当前目录及子目录,*.c是匹配c文件。
 \{0,\}表示0个以上的空格
grep 关键字,然后cw,也可以用。
cw的关闭,用ccl。

附带我的.vimrc的配置:

"colorscheme default 
colorscheme darkblue 
"colorscheme torte 
"colorscheme koehler
"colorscheme desert
set nocp
set nu
set ruler
syntax on
set autoindent
set smartindent
set tabstop=4
set softtabstop=4
set shiftwidth=4
set cindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set backspace=2
set showmatch
set tags+=~/.vim/systags
set tags=tags;
"高亮c代码的方法名
syn match cFunctions "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunctions "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunctions gui=NONE cterm=bold  ctermfg=blue
"设置taglist
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
filetype plugin indent on
call pathogen#infect()
filetype plugin indent on
"golang 设置
let g:go_version_warning = 0
"映射F9为ctags和cscope的启动,效果一般,仅供学习
map <F9>  :call GenerateCtags()<CR>  
function! GenerateCtags()  
	let dir = getcwd()  
	if filereadable("tags")  
		let tagsdeleted=delete("./"."tags")  
		if(tagsdeleted!=0)  
			echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None  
			return  
		endif  
	endif    
	if has("cscope")  
		silent! execute "cs kill -1"  
	endif    
	if filereadable("cscope.files")  
		let csfilesdeleted=delete("./"."cscope.files")  
		if(csfilesdeleted!=0)  
			echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None  
			return  
		endif  
	endif    
	if filereadable("cscope.out")  
		let csoutdeleted=delete("./"."cscope.out")  
		if(csoutdeleted!=0)  
			echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None  
			return  
		endif  
	endif    
	if(executable('ctags'))  
		silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."  
	endif    
	if(executable('cscope') && has("cscope") )  
		silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -name '*.cc' -o -name '*.java' -o -name '*.cs' > cscope.files"  
		silent! execute "!cscope -Rbq"  
		execute "normal :"  
		if filereadable("cscope.out")  
			execute "cs add cscope.out"  
		endif                                                                                                                  
	endif    
endfunction 
"在选择模式下系统级复制
vnoremap ,y "+y<ESC>
""在选择模式下系统级剪切
vmap ,x x:let @+=@"<CR>
"系统级复制
noremap ,p "+p
"nmap ,V "+P
""全选
nmap ,a ggvG$
""切换到16进制编辑方式
map ,b :%!xxd<CR>
"切换回正常编辑方式
map ,B :%!xxd -r<CR>
""cscope 快捷键
set cscopequickfix=s-,c-,d-,i-,t-,e-
cs add cscope.out ./
"nmap <C-a>  :cs add cscope.out ./<cr>
"nmap <C-.>  :cs find s <C-R>=expand("<cword>")<cr><cr>
"nmap <C-.>  :cs find g <C-R>=expand("<cword>")<cr><cr>
nmap <C-c>  :cs find c <C-R>=expand("<cword>")<cr><cr>
nmap <C-x>  :cs find t <C-R>=expand("<cword>")<cr><cr>
"nmap <C-.>  :cs find e <C-R>=expand("<cword>")<cr><cr>
"nmap <C-.>  :cs find f <C-R>=expand("<cfile>")<cr><cr>
"nmap <C-.>  :cs find i <C-R>=expand("<cfile>")<cr><cr>
"nmap <C-.>  :cs find d <C-R>=expand("<cword>")<cr><cr>


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值