在loongarch架构下的服务器结合vim,gdb上搭建一个可以查阅、调试c++编写的ceph代码的编辑器

主要是龙芯的电脑…懂得都懂…再加上ceph运行在服务器上,只能通过ssh访问,调试也不容易,看代码也不方便。所以有了如下折腾
工欲善其事,必先利其器。

一、VIM概述

VIM 是 Linux 系统上一款文本编辑器,它是操作 Linux 的一款利器。
当前有很多优秀的 IDE 都支持安装 VIM 插件,原因就是使用它便捷,高效,很爽!

要想打造一个如下图所示的vim编辑器 ,主要需要结合vim的一系列插件和对.vimrc文件的配置。
Alt
左边是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文件操作

我给的这个文件放到~.vim/plugin下

再去.vimrc中配置如下就可以使用了

set hidden
map <F2> :bp<CR>
map <F3> :bn<CR>

现在 vim看代码的功能已经实现了,你需要多熟悉 ctags、cscope的命令。

三、GDB调试ceph,并结合到vim中

待更新…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白白头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值