vim-工欲善其事必先利其器

对于程序员来说好用的工具是必须的,目前常用的看代码的工具有vscode(免费的,可以配置各种插件),Sourceinsight(收费的,当然也有破解的,自己私用还可以,但是在公司就不可以啦,至此vim的优势就来了),vim可以配置各种插件,下面就介绍我自己配置是用的vim插件极其使用方式。

vim的配置文件主要涉及到主目录也就是"~"目录的.vimrc文件和.vim文件夹。如果没有的小伙伴可以自己创建,如下图所示:

通用配置

以下的是通用的配置,不懂可以百度一下,就不一一叙述每个配置的含义了。

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"通用配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax on  " 开启语法高亮
colorscheme peachpuff "vim配置方案
set number  " 显示行号
set hls "搜索时高亮显示被找到的文本
set scrolloff=3 " 上下可视行数
set incsearch   " 搜索时高亮显示被找到的文本
set ignorecase "搜索忽略大小写
set enc=utf-8  "编码设置
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 "编码自动识别
set mouse=n "鼠标普通模式
set cursorline "选中行出现下划线
map qq :qa!<CR> "多窗口不保存关闭
map ww :wqa!<CR> "多窗口保存关闭
"vim自动打开跳到上次的光标位置
if has("autocmd")
        au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
set nocompatible  "设置backspace的工作方式
set backspace=indent,eol,start " 设置backspace的工作方式
" map <F5> :set listchars=tab:>-,trail:-<CR> :set list<CR> " 显示空格和tab
" map <F6> :set list!<CR> " 取消显示空格和tab
set ts=4
set expandtab
set shiftwidth=4
set autoindent

vim-plug安装软件

1. vim-plug的获取:

cd ~
git clone https://github.com/junegunn/vim-plug

2. vim-plug的安装

mkdir -p  ~/.vim/autoload/
cp ~/vim-plug/plug.vim  ~/.vim/autoload/plug.vim

如下图所示:

 各个插件的安装如下所示,在.vimrc文件中输入以下内容。

call plug#begin('~/.vim/plugged')
Plug 'Yggdroot/LeaderF'
Plug 'octol/vim-cpp-enhanced-highlight'
Plug 'vim-scripts/AutoComplPop'
Plug 'vim-scripts/taglist.vim'
Plug 'preservim/nerdcommenter'
Plug 'fholgado/minibufexpl.vim'
Plug 'vim-scripts/OmniCppComplete'
Plug 'scrooloose/nerdtree'
call plug#end()

打开vim,输入安装命令PlugInstall,网络通畅的情况下,很快就会安装完,下面就一一介绍各个插件的配置方式和使用方法。

 如果处于离线状态可以下载下面这个压缩包:vim-配置文件+ctags+glpbal+ripgrep 

压缩包主要包含已经配置好的.vimrc文件和已经安装好的.vim文件夹;编译好的ctags/global/ripgrep

只要在环境变量中添加即可~/.bashrc,如下所示,里面的路径换成你的文件夹所在的目录:

CTAGS_PATH="/home/ubuntu/tools/ctags"
export PATH=${CTAGS_PATH}:$PATH

GTAGS_PATH="/home/ubuntu/tools/global/bin"
export PATH=${GTAGS_PATH}:$PATH

RG_PATH="/home/ubuntu/tools/ripgrep/ripgrep/target/release"
export PATH=${RG_PATH}:$PATH

LeaderF

LeaderF是一个用Python写的vim插件,可以在成千上万数十万个文件中,通过模糊查找的方式,快速找到目标文件。它还有很多衍生功能:快速打开或定位某个buffer、最近使用的文件(mru)、tags(包括函数、类、变量等)、命令历史、文件中的某一行、vim的help、marks等等。

效果图

会根据当前文件中的函数名,变量名等等,显示模糊配置,可以加快编码速度。

可以与ripgrep结合起来用,不知道ripgrep是啥的就可以自己百度一下。下面的配置已经配置了快捷方式,在vim命令行输入rg/gb/rgc/你可以可以根据自己的需求去配置相应的过滤参数,具体的配置,自己琢磨一下吧。输入rg+"按空格键"+输入搜索的内容(可以是函数名/变量名等)如下所示:

 输入完成后,按回车键,显示搜索的结果,按tab键+↑↓进行选中+按v竖直分屏/t新打开一个窗口。也可以按“F1”进入help提示界面。

 快速搜索文件“ctrl+f”,直接输入文件名。

 快速搜索本文件函数“ctrl+p”

和gtags一起使用,按F7生成索引表(配置了快键键等同于Leaderf gtags --update)+按F5输入函数名进行搜索(配置了快键键等同于Leaderf gtags),模糊搜索函数,显示搜索的结果,按tab键+↑↓进行选中+按v竖直分屏/t新打开一个窗口。也可以按“F1”进入help提示界面。如下所示:

 

其他的平时用的很少,可以自行探索,对于快捷键的配置,用户可以根据需求自己配置,主要是下面的几项,如下所示:

  配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Yggdroot/LeaderF配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:Lf_ShortcutF = '<c-f>'
noremap <c-n> :LeaderfMru<cr>
noremap <c-p> :LeaderfFunction<cr>
noremap <c-b> :LeaderfBuffer<cr>
noremap <c-g> :LeaderfTag<cr>
let g:Lf_StlSeparator = { 'left': '', 'right': '', 'font': '' }
" let g:Lf_RootMarkers = ['.project', '.root', '.svn', '.git']
let g:Lf_RootMarkers = ['.root']
let g:Lf_WorkingDirectoryMode = 'Ac'
let g:Lf_WindowHeight = 0.30
let g:Lf_CacheDirectory = expand('~/.vim/cache')
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
let g:Lf_StlColorscheme = 'powerline'
let g:Lf_PreviewResult = {'Function':0, 'BufTag':0}
nmap <F5> : Leaderf gtags <CR>
" nmap <F6> : Files <CR>
nmap <F7> : Leaderf gtags --update <CR>
ab rg Leaderf rg  -i -g "*" -g "!tags" -g "!*.out" -g "!.repo"
ab rgb Leaderf rg  -i -w -g "*" -g "!build" -g "!tags" -g "!*.out" -g "!.repo"
ab rgc Leaderf rg --recall
execute "set <M-d>=\ed"

 highlight

这里用一个非常简单的例子来展示vim自定义自己的语法并高亮显示的设置流程。

效果图

 配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"octol/vim-cpp-enhanced-highlight配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cpp-enhanced-highlight c/c++ 语法高亮配置
" 默认情况下,不突出显示类范围。启用设置
let g:cpp_class_scope_highlight = 1
" 默认情况下,成员变量突出显示为禁用状态。启用设置
let g:cpp_member_variable_highlight = 1
" 默认情况下,在声明中高亮显示类名。启用设置
let g:cpp_class_decl_highlight = 1
" POSIX功能的突出显示默认情况下处于禁用状态。启用设置
let g:cpp_posix_standard = 1
" 有两种突出显示模板功能的方法。要么
let g:cpp_experimental_simple_template_highlight = 1
" 在大多数情况下都可以使用,但是在大文件上可能会有点慢。替代设置
let g:cpp_experimental_template_highlight = 1
" 这是一个较快的实现,但是在某些极端情况下它不起作用。
" 注意:众所周知,C ++模板语法很难解析,因此不要指望此功能是完美的。
" 库概念的突出显示由
let g:cpp_concepts_highlight = 1
" 这将突出显示关键字的概念,要求以及标准库中的所有命名要求(例如DefaultConstructible)
" 可以通过以下方式禁用突出显示用户定义的功能
let g:cpp_no_function_highlight = 1

 tlist

想必用过Source Insight的人都记得这样一个功能:SI能够把当前文件中的宏、全局变量、函数等tag显示在Symbol窗口,用鼠标点上述tag,就跳到该tag定义的位置;可以按字母序、该tag所属的类或scope,以及该tag在文件中出现的位置进行排序;如果切换到另外一个文件,Symbol窗口更新显示这个文件中的tag。

在VIM中的taglist插件所实现的就是上述类似的功能,有些功能比SI弱,有些功能比SI更强。而且,taglist插件仍在不断完善中!

效果图

显示变量和函数

配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Tlist插件配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let Tlist_Show_One_File           = 1 " 只显示当前文件的tags
" let Tlist_Auto_Open             = 1 " 打开vim自动打开Tlist
"let Tlist_GainFocus_On_ToggleOpen = 1 " 打开Tlist窗口时,光标跳到list窗口
let Tlist_Exit_OnlyWindow         = 1 " 如果Tlist窗口是最后一个窗口则退出Vim
let Tlist_Use_Right_Window    = 1 " 在右侧窗口中显示
" let Tlist_Use_Left_Window         = 1 " 在左侧窗口中显示
let Tlist_File_Fold_Auto_Close    = 1 " 自动折叠
let Tlist_Auto_Update             = 1 " 自动更新
" <F4> 打开 Tlist 窗口,在左侧栏显示
map <F4> :TlistToggle<CR>
map <c-]> g<c-]>
set tags=tags;/

nerdcommenter

快速注释和取消插件

常用:(1)快速注释:F12。(2)取消注释:\cu。

nerdcommenter插件快捷键

1、 \\cc 注释当前行和选中行

2、 \\cn 没有发现和\cc有区别

3、 \\c<空格> 如果被选区域有部分被注释,则对被选区域执行取消注释操作,其它情况执行反转注释操作

4、 \\cm 对被选区域用一对注释符进行注释,前面的注释对每一行都会添加注释

5、 \\ci 执行反转注释操作,选中区域注释部分取消注释,非注释部分添加注释

6、 \\cs 添加性感的注释,代码开头介绍部分通常使用该注释

7、 \\cy 添加注释,并复制被添加注释的部分

8、 \\c$ 注释当前光标到改行结尾的内容

9、 \\cA 跳转到该行结尾添加注释,并进入编辑模式

10、\\ca 转换注释的方式,比如: /**/和//

11、\\cl \\cb 左对齐和左右对其,左右对其主要针对/**/

12、\\cu 取消注释

效果图 

 配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"nerdcommenter插件快速注释
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:NERDSpaceDelims            = 1      " 在注释符号后加一个空格
let g:NERDCompactSexyComs        = 1      " 紧凑排布多行注释
let g:NERDDefaultAlign           = 'left' " 逐行注释左对齐
let g:NERDAltDelims_java         = 1      " JAVA 语言使用默认的注释符号
let g:NERDCustomDelimiters       = {'c': {'left': '/*', 'right': '*/'}} " C 语言注释符号
let g:NERDCommentEmptyLines      = 1      " 允许空行注释
let g:NERDTrimTrailingWhitespace = 1      " 取消注释时删除行尾空格
let g:NERDToggleCheckAllLines    = 1      " 检查选中的行操作是否成功
map <F12> <plug>NERDCommenterSexy         " 选中注释

minibufexpl

bufexplorer插件可以打开历史文件列表以达到快速切换文件的目的

效果图

配置 

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"fholgado/minibufexpl.vim
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" let g:miniBufExplVSplit=22
let g:miniBufExplBLSplit=1
let g:miniBufExplorerAutoStart=1
let g:miniBufExplBuffersNeeded=2
let g:miniBufExplMapWindowNavArrows = 1

cscope

Cscope 是一款开源免费的 C/C++浏览工具,自带一个基于文本的用户界面,通过cscope可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。

需要在你需要追踪代码的文件夹下输入以下命令:cscope -Rbq

cs f s    //查找C符号

cs f t    //查找字符串

cs f c    //查找调用本函数的函数 我的配置文件配置成了F3,将鼠标移动到对应的函数名,按住F3即可。

效果图

 配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope 自动加载cscope.out文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set csverb
    set cspc=3
    "add any database in current dir
    if filereadable("cscope.out")
        cs add cscope.out
    "else search cscope.out elsewhere
    else
        let cscope_file=findfile("cscope.out",".;")
        let cscope_pre=matchstr(cscope_file,".*/")
        if !empty(cscope_file) && filereadable(cscope_file)
            set nocsverb
            exe "cs add" cscope_file cscope_pre
            set csverb
        endif
    endif
endif
" + 表示显示结果必须追加到quickfix窗口
" - 隐含着清空先前的的显示结果
" 0 表示不使用quickfix窗口
" 默认不使用quickfix窗口
" 如果有多个匹配项,cscope会弹出窗口显示多个匹配项,输入数字即可跳转到对应匹配项。而设
" 置cscope结果输出到quickfix后,cscope只会显示第一个匹配项,如果想要查看其它匹配项,需要输入cw,
" 进入quickfix的窗口进行查看。
" set cscopequickfix=s+,c+,d+,i+,t+,e+
" F5查找c符号;F6查找字符串;F7查找调用本函数的函数
" nmap <silent> <F5> :cs find s <C-R>=expand("<cword>")<CR><CR>
" nmap <silent> <F6> :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <silent> <F3> :cs find c <C-R>=expand("<cword>")<CR><CR>

omnicppcomplete

自动补全

需要输入ctags -R  --C-kinds=+p --fields=+aS --extra=+q,生成索引表,这样编码时就可以显示对应结构体成员,这个命令也生成了catags的索引表,下面会介绍。

效果图

 配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"-- omnicppcomplete setting --
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocp
filetype plugin on
set ofu=syntaxcomplete#Complete
imap <silent> ` <C-X><C-O>
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest

NERDTree 

显示目录树,快键键是F2

效果图

 配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"配置NERDTree
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"使用F3键快速调出和隐藏它
map <F2> :NERDTreeToggle<CR>
let NERDTreeChDirMode=1
"显示书签"
let NERDTreeShowBookmarks=1
"设置忽略文件类型"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
"窗口大小"
let NERDTreeWinSize=25
" 修改默认箭头
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'
"How can I open a NERDTree automatically when vim starts up if no files were specified?
" autocmd StdinReadPre * let s:std_in=1
" autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" 打开vim时自动打开NERDTree
"autocmd vimenter * NERDTree
"How can I open NERDTree automatically when vim starts up on opening a directory?
" autocmd StdinReadPre * let s:std_in=1
" autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif

" 关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" 开发的过程中,我们希望git信息直接在NERDTree中显示出来, 和Eclipse一样,修改的文件和增加的文件都给出相应的标注, 这时需要安装的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ "Unknown"   : "?"
    \ }
" 显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
" 在终端启动vim时,共享NERDTree
" let g:nerdtree_tabs_open_on_console_startup=1

ctags

函数跳转命令,需要执行以下命令ctags -R  --C-kinds=+p --fields=+aS --extra=+q,与上面的自动补全一致。

跳转到函数定义的地方:ctrl+] 返回:ctrl+t

效果图

结语

以上只是个人在工作中的配置使用,更复杂好用的功能等待大家去探索,也可以推荐留言,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值