vim插件
放假两天一直都在整vim插件的事情,把所有的东西整下
Conque Shell
http://www.vim.org/scripts/script.php?script_id=2771
vim中分开一个窗口开shell,默认的是 insert模式,可以输入命令,esc到命令模式之后可以复制输出,
:ConqueTerm <command>
:ConqueTermSplit bash
:ConqueTermVSplit bash
:ConqueTermTab bash
taglist
http://www.vim.org/scripts/script.php?script_id=273
依赖系统软件ctags
在目录下执行ctags -R生成tags文件,
WinManager
http://www.vim.org/scripts/script.php?script_id=95
窗口管理器
在vimrc文件中配置
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
在taglist中,
到左下边taglist显示的窗口中,移动到标签,回车可在右侧直接显示标签所在文件和行,空格只在下面显示,右侧不更新
在右边代码中<C-]>进入和<C-T><C-O>退出
MiniBufExplorer显示所有的buffer文件
http://www.vim.org/scripts/script.php?script_id=159
当打开多个buffer文件的时候,上面会显示各个文件名,C+W跳到这个窗口中去,tab可选择buffer,回车显示文件,d删除光标所在的buffer
自动补全
OmniCppComplete插件,应该是默认安装好的了
命令模式下输入
:set omnifunc?
如果得到的结果为:omnifunc=ccomplete#Complete,说明有必要进行以下的操作以实现针对c++的自动补全
创建stdc++ 对应的tags:
A)首先下载经高手修改定制的libstdc++头文件,可以到这里下载:
http://www.vim.org/scripts/script.php?script_id=2358
并将其解压
B) 运行以下命令
$ cd ~/tags
$ ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f tags cpp_src
然后把整个文件夹(包含下载的cpp_src和生成的tags文件)放到一个可以访问的地方,比如
/home/yourname/.vim/self_add_tags_store/tags
然后在vimrc文件中把上面生成的tags文件添加进去
(另外把/usr/include/c++/4.6下面的我也生成了一个tags文件,都加入进去了)
filetype plugin indent on “打开文件检测
syntax enable
syntax on
set background=dark 默认选择之后看不清楚,用这个可以看清楚。
set tags=tags
set tags+=/usr/include/c++/tags
set tags+=/home/yourname/.vim/self_add_tags_store/tags
set completeopt=longest,menu
默认的当有abc. 或者abc:: 就会去自动补全
如果不是上面的两种,可以写一部分然后C-X 加C-O就可以调出函数了,
C-X C-P是补全文本。
参考 http://vim.wikia.com/wiki/C%2B%2B_code_completion
C.Vim,可以添加很多默认的模版,
对其中的模版可以修改下,/home/yourname/.vim/c-support/templates/Templates/
SetMacro( 'AUTHOR', 'self_name' )这些玩意
每次新生成的文件和插入的函数,之类的模版可以在cpp.statements.template和c.statements.template这些文件中去改
具体的comments.template是注释模版
preprocessor.template是头文件include 那些东西
statements.template是if, for ,which这些
c.idioms.template是插入的main函数,emun,插入函数,for( x=0; x<n; x+=1 )这些东西
help csupport
\if等命令插入的 <+argument_list+>这种东西,C+j可以删掉,而且是删掉一个自动跳到下一个
\rc一键编译,如果编译失败,自动跳出quickfix窗口,
\rr一键编译运行
查找文件FuzzyFinder
http://www.vim.org/scripts/script.php?script_id=1984
依赖vim插件L9 library
map ,, :FufCoverageFile <cr>
按,,打开匹配文件窗口
Visual Mark
需要修改
安装 visualmark.vim 后,如果是在 Ubuntu 下做标记,会报一个“E197 不能设定语言为'en_US'"的错误
将visualmark.vim中的
exec ":lan mes en_US"更改为exec ":lan POSIX"
mm标记,F2,跳到下一个标记,关闭vi之后标记失效
Grep
在当前目录下的文件中查找
:Grep
quickfix
默认已经安装好了,在文件搞好之后,输入 :make之后,会编译文件,等待编译结束之后,按:cw就可以出来quickfix窗口,点击对应的错误信息,就可以自动跳到错误的地方了
:cn // 切换到下一个结果
:cp // 切换到上一个结果 如果你经常使用这两个命令, 你还可以给他们设定快捷键, 比如在~/.vimrc中增加:
nmap <F6> :cn<cr>
nmap <F7> :cp<cr>
nmap <F5> :make<cr>
可以使用cvim插件生成makefile文件,vim tmp.c,\nr就可以导入模版,其中有 makefile模版,把其中的EXECUTABLE和SOURCES改掉就好,然后把文件重命名为Makefile
具体使用截图
自己的vimrc文件内容
set ts=4
set autoindent
set expandtab
set shiftwidth=4
set hlsearch
syntax enable
set cindent
set nocompatible
syntax on
set background=dark
"make so to insert new line and still in this line
nmap so o<ESC>k
nmap sO O<ESC>j
" Smart way to move between windows
nmap <C-j> <C-W>j
nmap <C-k> <C-W>k
nmap <C-h> <C-W>h
nmap <C-l> <C-W>l
nmap <F6> :cn<cr>
nmap <F7> :cp<cr>
nmap <F5> :make<cr>
" when use sh , create new vsp to do shell
nmap sh :ConqueTermVSplit bash<cr>
"set auto complete
filetype plugin indent on
set tags=tags
set tags+=/usr/include/c++/tags
set tags+=/home/youname/.vim/self_add_tags_store/tags
set completeopt=longest,menu
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
"set for cscope
:set cscopequickfix=s-,c-,d-,i-,t-,e-
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
"set for FuzzFinder
"can only match pattern file , but not use it
":let g:fuf_coveragefile_globPatterns=['*.java','*.cc','*.c','*.cpp','*.h','*.json','*.txt','*.xml','*.py']
nmap ,, :FufCoverageFile <cr>
有一个比较纠结的选项,set mouse=a 设置之后用鼠标会很方便,但是putty的鼠标选择复制没办法用了,两难啊
(解决 set mouse=nv
想要复制的时候就按个冒号,进入 command 模式,
然后就可以释放鼠标了。)
参考http://blog.csdn.net/namecyf/article/details/7787523
http://blog.csdn.net/liumengxinfly/article/details/6967687
http://my.oschina.net/alphajay/blog/51316
http://vim.wikia.com/wiki/C%2B%2B_code_completion