主要是龙芯的电脑…懂得都懂…再加上ceph运行在服务器上,只能通过ssh访问,调试也不容易,看代码也不方便。所以有了如下折腾
工欲善其事,必先利其器。
一、VIM概述
VIM 是 Linux 系统上一款文本编辑器,它是操作 Linux 的一款利器。
当前有很多优秀的 IDE 都支持安装 VIM 插件,原因就是使用它便捷,高效,很爽!
要想打造一个如下图所示的vim编辑器 ,主要需要结合vim的一系列插件和对.vimrc文件的配置。
左边是NERD_tree插件1、右侧是Tag_List插件、下方是SrcExl插件
二、配置步骤
我将从一个完全没有配置的vim编辑器中一步一步打造出上图所示的vim效果。
1、下载所需要的插件,在此我只示例其中一个插件。
- 进入vim官网,找到你想要下载的插件。
- 搜索想要的插件,如图所示,下载好zip包,并将zip包放到~/.vim文件夹下后解压,这样插件就能使用了,插件也有自己的对应使用方法,不多赘述。(如果没有就自己创建一个),当然你也可以从github上下载插件,或者使用vim的插件管理工具来管理,有需要请自行查阅。
2、安装配置插件
- 安装插件后 在~/.vimrc文件中写入一些配置
对nerdtree插件配置如下
"----------------------------------------------------------"
" NERD Tree 环境设置
"----------------------------------------------------------"
let NERDTreeWinPos = "left"
nmap <F9> :NERDTreeToggle<CR>
意思是 使用F9按钮打开关闭插件。效果不再展示。至此你已经可以独立的定制你的vim了。
3、给出需要的插件以及相关配置和他的效果
如果某些插件我描述的有问题或者你想要其他的效果,自行百度,基本上都有教程和配置方法。
ctags和cscope严格意义上不能算是vim的插件,我们下载他需要使用yum install ctags cscope命令
-
ctags 、cscope
安装完成后 命令ctags -R就可以生成ctags标签,cscope -Rbq就可以生成cscope标签。可以使用ctrl+] 、cs find查找函数定义了,具体使用参考其他博客,记得有一个问题,ctags生成的目录似乎是相对目录,有时候查到了标签,进入后会报错查找不到此标签。
由于cscope生成数据库时默认使用相对路径,因此会出现以上情况。解决办法是手动生成一个cscope.files文件,指定好文件的绝对路径。cscope命令会根据cscope.files中指定的文件,生成符号索引文件。因此在生成cscope.files时,将所有文件以绝对路径的形式呈现,即能解决cscope跳转时找不到文件的问题。find `pwd` -name *.c -o -name *.h -o -name *.cc> cscope.files
再生成cscope数据库:
cscope -bkq -i cscope.files
ctags -R给出配置如下 就可以使用快捷键ctrl+leader键 再按1、2、3、4、5、6使用cscope相对应的功能。
if has("cscope") "set csprg=/usr/local/bin/cscope set csto=0 set cst set nocsverb set cspc=3 "指定在查找结果中显示多少级文件路径,默认值0表示显示全路径,1表示只显示文件名" if filereadable("cscope.out") cs add $PWD/cscope.out $PWD "cs add cscope.out else" 子目录打开,向上查找 let cscope_file=findfile("cscope.out", ".;") let cscope_pre=matchstr(cscope_file, ".*/") if !empty(cscope_file) && filereadable(cscope_file) exe "cs add" cscope_file cscope_pre endif endif set csverb endif nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-\>i :cs find i <C-R>=expand("<cfile>")<CR><CR> nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
-
NERDtree
上面以及展示配置,这里给出一个加强配置,配置后的效果是你跳转到别的文件是 按一下F9可以刷新目录结构展示你正在查阅的文件的目录结构 PS:把上面配置的f9注释掉。
nmap <F9> :call NERDTreeToggleAndRefresh()<CR>
function NERDTreeToggleAndRefresh()
:NERDTreeToggle
if ! g:NERDTree.IsOpen()
:NERDTreeFind
endif
endfunction
- TagList SrcEXl
直接给出配置
"---------------------------------------------------------"
" Tap List 环境设置
"---------------------------------------------------------"
filetype on
nmap <F7> :TlistToggle<CR>
let Tlist_Ctags_Cmd = "/usr/bin/ctags"
let Tlist_Inc_Winwidth = 0
let Tlist_Exit_OnlyWindow = 0
let Tlist_Auto_Open = 0
let Tlist_Use_Right_Window = 1
"---------------------------------------------------------"
" Source Explorer 环境设置
"---------------------------------------------------------"
nmap <F8> :SrcExplToggle<CR>
nmap <C-J> <C-W>h
nmap <C-K> <C-W>j
nmap <C-I> <C-W>k
nmap <C-L> <C-W>l
let g:SrcExpl_WinHeight = 8
let g:SrcExpl_refreshTime = 100
let g:SrcExpl_jumpKey = "<ENTER>"
let g:SrcExpl_gobackKey = "<SPACE>"
let g:SrcExpl_isUpdateTags = 0
- 括号自动补全功能
"括号补全
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {<CR>}<Esc>O
inoremap < <><ESC>i
autocmd Syntax html,vim inoremap < <lt>><Esc>i| inoremap > <c-r>=ClosePair('>')<CR>
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap } <c-r>=CloseBracket()<CR>
inoremap " <c-r>=QuoteDelim('"')<CR>
inoremap ' <c-r>=QuoteDelim("'")<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
function CloseBracket()
if match(getline(line('.') + 1), '\s*}') < 0
return "\<CR>}"
else
return "\<Esc>j0f}a"
endif
endf
function QuoteDelim(char)
let line = getline('.')
let col = col('.')
if line[col - 2] == "\\"
return a:char
elseif line[col - 1] == a:char
return "\<Right>"
else
return a:char.a:char."\<Esc>i"
endif
endf
-lightline
要下载lightline插件
set laststatus=2
set noshowmode
let g:lightline = {
\'colorscheme': 'PaperColor_dark',
\'component_function': {
\ 'mode': 'LightlineMode',
\},
\}
let g:lightline = {
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ], [ 'readonly', 'absolutepath', 'modified' ] ],
\ }
\ }
function! LightlineMode()
return expand('%:t') =~# '^__Tagbar__' ? 'Tagbar':
\expand('%:t') ==# 'ControlP' ? 'CtrlP' :
\&filetype ==# 'unite' ? 'Unite' :
\&filetype ==# 'vimfiler' ? 'VimFiler' :
\&filetype ==# 'vimshell' ? 'VimShell' :
\lightline#mode()
endfunction
-autocomplpop、omnicppcomplete实现语法自动补全
"---------------------------------------------------------"
" 语法补全设置
"---------------------------------------------------------"
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
" OmniCppComplete
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 " 随 vim 自启动
let g:indent_guides_enable_on_vim_startup=1
" 从第二层开始可视化显示缩进
let g:indent_guides_start_level=2
" 色块宽度
let g:indent_guides_guide_size=1
" 快捷键 i 开/关缩进可视化
:nmap <silent> <Leader>i <Plug>IndentGuidesToggleafter ->
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
vim的buffer tab windows 知识点自己查阅 我给出一个插件 配置一下 可以实现F2、F3切换前后打开的vim文件操作
- minibufexpl.vim
github地址 自己去下载把 太长了
链接: https://github.com/fholgado/minibufexpl.vim/blob/master/plugin/minibufexpl.vim
我给的这个文件放到~.vim/plugin下
再去.vimrc中配置如下就可以使用了
set hidden
map <F2> :bp<CR>
map <F3> :bn<CR>
现在 vim看代码的功能已经实现了,你需要多熟悉 ctags、cscope的命令。
三、GDB调试ceph,并结合到vim中
待更新…