手把手教你打造一个VIM-IDE
先放上已打造好、可直接使用的VIM-IDE包,懒得一步一步操作配置的可直接下载解压后使用。
Ubuntu 64位免安装版VIM-IDE。 压缩包为直接打包/etc/vim配置及插件包
https://download.csdn.net/download/qq_25145163/20550802
window 32位 VIM-IDE
基于win32版本vim82搭建IDE,解压文件到自定义目录下即可,并设置系统环境变量VIM 值为该目录
https://download.csdn.net/download/qq_25145163/20552884
接下来,转入正题,下面将详细介绍操作步骤:
前期准备
需要安装git、cscope工具,可通过apt-get 自行安装
apt-get install cscope git
安装插件管理工具Vundle(必备)
git clone https://github.com/VundleVim/Vundle.vim.git /etc/vim/bundle/Vundle.vim
虽然仅占用空间 1.4M, 但从github.com 上clone速度会稍慢点,因此不要着急
配置插件
在/etc/vim下找到vimrc,在文件最后加入以下内容,用来支持插件的配置文件 /etc/vim/vimrc.Vundle
set fileencodings=utf-8,gbk,gb2312,gb18030set fileencoding=utf8set encoding=utf8set nuif filereadable("/etc/vim/vimrc.Vundle")source /etc/vim/vimrc.Vundleendif
具体的配置文件如下,相关配置的介绍资料有很多,此处不再赘述,该文件中已包含大部分常用的插件的配置。
"
" ==============vim基本配置==============
set guifont=Monospace\ 14
set nu " 显示行号
syntax enable
syntax on
colorscheme desertset path+="/usr/include,../include"
set autowrite " 自动保存
set autoindent "自动对齐
set foldmethod=syntax
set foldlevel=100 " 启动vim时不要自动折叠代码
set textwidth=80
set formatoptions+=t
set cindent "使用 C/C++ 语言的自动缩进方式
set smartindent "智能对齐
set noerrorbells
set showmatch "高亮显示对应的括号
set nobackup
set noswapfile"set cursorline "突出显示当前行
set incsearch "搜素高亮,搜索逐渐高亮
set hlsearch "高亮度搜寻
" disable
"noremap <Up> <Nop>
"noremap <Down> <Nop>
"noremap <Left> <Nop>
"noremap <Right> <Nop>" remap control + arrow key to select windows
noremap <C-Down> <C-W>j
noremap <C-Up> <C-W>k
noremap <C-Left> <C-W>h
noremap <C-Right> <C-W>l
noremap <C-J> <C-W>j
noremap <C-K> <C-W>k
noremap <C-H> <C-W>h
noremap <C-L> <C-W>l" ==============Vundle插件管理==============
" Vundle manage
set nocompatible " be iMproved, required
filetype off " required" set the runtime path to include Vundle and initialize
set rtp+=$VIM/vimfiles/bundle/Vundle.vim
call vundle#rc('$VIM/vimfiles/bundle/')
call vundle#begin()" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe' "代码补齐
Plugin 'SirVer/ultisnips' "代码块补全
Plugin 'honza/vim-snippets'
Plugin 'ervandew/supertab' "解决多个插件共用TAB键问题
Plugin 'scrooloose/nerdtree' "目录树
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'jistr/vim-nerdtree-tabs'
"Plugin 'majutsushi/tagbar' " Tag bar
Plugin 'vim-airline/vim-airline' | Plugin 'vim-airline/vim-airline-themes' " Status line"
Plugin 'Lokaltog/vim-powerline'
Plugin 'jiangmiao/auto-pairs' "自动成对操作括号
Plugin 'mbbill/undotree' "撤销修改
Plugin 'gdbmgr' "调试器插件
Plugin 'scrooloose/nerdcommenter' "快速注释/反注释插件
Plugin 'Yggdroot/indentLine' "对齐线
Plugin 'bling/vim-bufferline' " Buffer line
Plugin 'kepbod/quick-scope' " Quick scope
Plugin 'yianwillis/vimcdoc' "vim中文帮助文档
Plugin 'nelstrom/vim-visual-star-search'
Plugin 'ludovicchabant/vim-gutentags'
Plugin 'w0rp/ale'
Plugin 'mbbill/echofunc' "自动显示函数声明插件
Plugin 'Yggdroot/LeaderF', { 'do': './install.sh' } "文件、buffers、mrus(most recently used)、tags 的检索
"All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required" ===========supertab============
" make YCM compatible with UltiSnips (using supertab)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
let g:SuperTabRetainCompletionType=2
" better key bindings for UltiSnipsExpandTrigger
"let g:UltiSnipsExpandTrigger="<c-e>"
"let g:UltiSnipsJumpForwardTrigger="<c-j>"
"let g:UltiSnipsJumpBackwardTrigger="<c-k>"
" ==============YCM==============
let g:ycm_server_python_interpreter='/usr/bin/python'
let g:ycm_global_ycm_extra_conf='$VIM/vimfiles/.ycm_extra_conf.py'
" 停止提示是否载入本地ycm_extra_conf文件
let g:ycm_confirm_extra_conf = 0
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files = 1
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=2
" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1" YCM 查找定义
let mapleader=','
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
let g:ycm_collect_identifiers_from_tags_files = 1set completeopt=menu,menuone
let g:ycm_add_preview_to_completeopt = 0 " 关闭函数原型提示let g:ycm_show_diagnostics_ui = 0 " 关闭诊断信息
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2 " 两个字符触发 补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 收集
let g:ycm_complete_in_strings=1noremap <c-z> <NOP>
let g:ycm_key_invoke_completion = '<c-z>' " YCM 里触发语义补全有一个快捷键
let g:ycm_max_num_candidates = 15 " 候选数量let g:ycm_semantic_triggers = {\ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],\ 'cs,lua,javascript': ['re!\w{2}'],\ }"==========设置代码块补全==========
let g:UltiSnipsExpandTrigger="<tab>" "被代码补齐占用
"let g:UltiSnipsExpandTrigger="<c-z>"
let g:UltiSnipsJumpForwardTrigger="<c-h>"
let g:UltiSnipsJumpBackwardTrigger="<c-l>"" ===========gutentags=============
"let g:gutentags_enabled='0'
"let g:gutentags_trace = '1'
" 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project', '.gitignore']" 添加ctags额外参数,会让tags文件变大
" let g:gutentags_ctags_extra_args = ['--fields=+niazlS', '--extra=+q']let g:gutentags_ctags_extra_args = ['--fields=+lS']let g:gutentags_ctags_extra_args += ['--languages=c,c++']
" let g:gutentags_ctags_extra_args += ['--c-kinds=+px']"let g:gutentags_cache_dir = expand('~/.cache/tags')
"let g:gutentags_ctags_tagfile=".tags"if isdirectory("kernel/") && isdirectory("mm/")let g:gutentags_file_list_command = 'find arch/arm/ mm/ kernel/ include/ init/ lib/ drivers/'
endif" =======echodoc 显示函数参数===========
"let g:EchoFuncShowOnStatus = 0
"ctags -R --fields=+lS ."======= NerdTree=========
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
let NERDTreeWinSize=30
"显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
"使用书签功能
let NERDTreeShowBookmarks=1let g:winManagerWindowLayout='TagList'
nmap wm :WMToggle<cr>
"设置F3触发
map <F3> :NERDTreeToggle<CR>
"自动关闭树形目录
let NERDTreeQuitOnOpen = 1
"高亮当前行
let NERDTreeHighlightCursorline = 1"是否显示隐藏文件
let g:NERDTreeShowHidden = 0"忽略特定文件和目录
let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.py\$class$', '\.obj$',\ '\.o$', '\.so$', '\.egg$', '^\.git$', '__pycache__', '\.DS_Store' ]"======nerdtree-git-plugin===
let g:NERDTreeIndicatorMapCustom = {\ "Modified" : "✹",\ "Staged" : "✚",\ "Untracked" : "✭",\ "Renamed" : "➜",\ "Unmerged" : "═",\ "Deleted" : "✖",\ "Dirty" : "✗",\ "Clean" : "✔︎",\ "Unknown" : "?"\ }"--------------------------------------------------------------------------------
" 自动加载ctags: ctags -R
if filereadable("tags")set tags=tags
endif
"if filereadable(".tags")
" set tags=.tags
"endif"--------------------------------------------------------------------------------
" cscope:建立数据库:cscope -Rbq; F5 查找c符号; F6 查找字符串; F7 查找函数定义; F8 查找函数谁调用了,
"--------------------------------------------------------------------------------
if has("cscope")set csprg=/usr/bin/cscopeset csto=1set cstset nocsverb" add any database in current directoryif filereadable("cscope.out")cs add cscope.outendifset csverb
endif:set cscopequickfix=s-,c-,d-,i-,t-,e-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>"nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
"F5 查找c符号; F6 查找字符串; F7 查找函数定义; F8 查找函数谁调用了,
nmap <silent> <F5> :cs find s <C-R>=expand("<cword>")<CR><CR> :botright copen<CR><CR>
nmap <silent> <F6> :cs find t <C-R>=expand("<cword>")<CR><CR> :botright copen<CR><CR>
"nmap <silent> <F7> :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <silent> <F7> :cs find c <C-R>=expand("<cword>")<CR><CR> :botright copen<CR><CR>"--------------------------------------------------------------------------------
" global:建立数据库
"--------------------------------------------------------------------------------
if filereadable("GTAGS")set cscopetagset cscopeprg=gtags-cscopecs add GTAGSau BufWritePost *.c,*.cpp,*.h silent! !global -u &
endif" ======ALE静态语法检测========
let g:ale_sign_column_always = 1
let g:ale_sign_error = '✗'
let g:ale_sign_warning = 'w'
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
let g:ale_echo_msg_format = '[%linter%] %code: %%s'
let g:ale_lint_on_text_changed = 'normal'
let g:ale_lint_on_insert_leave = 1
"let g:airline#extensions#ale#enabled = 1
let g:ale_c_gcc_options = '-Wall -O2 -std=c99'
let g:ale_cpp_gcc_options = '-Wall -O2 -std=c++14'
let g:ale_c_cppcheck_options = ''
let g:ale_cpp_cppcheck_options = ''
"增加使用make -n 来更好的解决误报错问题(误报头文件等)
let g:ale_c_parse_makefile=1"普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>s触发/关闭语法检查
nmap <Leader>s :ALEToggle<CR>
"<Leader>d查看错误或警告的详细信息
nmap <Leader>d :ALEDetail<CR>" ========airline状态栏=========
let g:airline_section_b = '%-0.10{getcwd()}'
let g:airline_section_c = '%t'
let g:airline#extensions#tagbar#enabled = 1
let g:airline_section_y = ''
set t_Co=256 "在windows中用xshell连接打开vim可以显示色彩
"set nocompatible " Disable vi-compatibility
" 总是显示状态栏
set laststatus=2 " Always show the statusline
"set encoding=utf-8 " Necessary to show Unicode glyphs
"解决consle输出乱码
"set termencoding = cp936
"设置中文提示
language messages zh_CN.utf-8
"设置中文帮助
set helplang=cn
" 设置为双字宽显示,否则无法完整显示如:☆
set ambiwidth=double
let g:airline_powerline_fonts = 1 " 使用powerline打过补丁的字体
let g:Powerline_symbols= 'unicode'
let g:airline_theme="dark" " 设置主题
"let g:airline_theme="luna"
"let g:airline_theme='bubblegum'
"打开tabline功能,方便查看Buffer和切换,这个功能比较不错"
"我还省去了minibufexpl插件,因为我习惯在1个Tab下用多个buffer"
let g:airline#extensions#tabline#enabled = 1
"tabline中当前buffer两端的分隔字符
let g:airline#extensions#tabline#left_sep = '┇'
"tabline中未激活buffer两端的分隔字符
let g:airline#extensions#tabline#left_alt_sep = '|'
"tabline中buffer显示编号
let g:airline#extensions#tabline#buffer_nr_show = 1
"let g:airline#extensions#tabline#buffer_nr_format = "[%s]"if !exists('g:airline_symbols')let g:airline_symbols = {}
endif" unicode symbols
let g:airline_left_sep = '▶ '
let g:airline_right_sep = '◀ '
let g:airline_symbols.crypt = '
手把手教你打造一个VIM-IDE相关推荐
- css加号图标_手把手教你打造一个纯CSS图标库
来,干了这碗安利 写这篇文章的目的其实就是为了安利一下我的图标库: 主题说完了,下面进入正题. 在web开发中,我们经常要用到一些小图标(加减勾叉等).通常做法就两种: 直接使用图片: 使用css/s ...
- 手把手教你打造一个企业级实时数据中台【万字图文】
引言--首先来聊聊现代企业数据架构及痛点: 数据孤岛:低效率和利用困难的根源 应用瓶颈:传统方案数据仓库.数据湖的不足 单讲这两个问题你可能会疑惑--为什么会出现这样的问题? 所以下面来讲讲两 ...
- 手把手教你打造一个可视化接口自动化测试系统
现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都 ...
- 手把手教你打造一个排队叫号系统
点击上方"业余草",选择"置顶公众号" 第一时间获取技术干货和业界资讯! 排队叫号系统在生活中处处可见,但是就这么一个系统,让你写你还不一定能完整的实现出来. ...
- android 自定义心电图,手把手教你打造一个心电图效果View Android自定义View
大家好,看我像不像蘑菇-因为我在学校呆的发霉了. 思而不学则殆 丽丽说得对,我有奇怪的疑问,大都是思而不学造成的,在我书读不够的情况下想太多,大多等于白想 ,所以革命没成功,同志仍需努力. 好了废话不 ...
- android 自定义心电图,手把手教你打造一个心电图效果View Android自定义View(示例代码)...
大家好,看我像不像蘑菇-因为我在学校呆的发霉了. 思而不学则殆 丽丽说得对,我有奇怪的疑问,大都是思而不学造成的,在我书读不够的情况下想太多,大多等于白想 ,所以革命没成功,同志仍需努力. 好了废话不 ...
- PS教程!手把手教你打造一个配色小清新的地图图标
@P大点S微博 :今天的教程是一个小清新风格的定位图标,操作不复杂,重点是图标样式的应用.源文件已打包,来收! PSD源文件 打包下载:http://pan.baidu.com/s/1qWYXqlm ...
- 第五十八期:从0到1 手把手教你建一个区块链
近期的区块链重回热点,如果你想深入了解区块链,那就来看一下本文,手把手教你构建一个自己的区块链. 作者:Captain编译 近期的区块链重回热点,如果你想深入了解区块链,那就来看一下本文,手把手教你构 ...
- websockert后台定时向前端发送状态_(文末送书)手把手教你打造属于自己团队的前端小报系统...
本文首发于政采云前端团队博客:手把手教你打造属于自己团队的前端小报系统 https://www.zoo.team/article/building-a-tabloid-system 前言 经常关注我们 ...
最新文章
- Java String.split()用法小结
- 大数据驱动的运营创新和探索
- 发光二极管pcb封装图画法_五个方面剖析SIP封装工艺,看懂SIP封装真正用途
- List of salaries for Silicon Valley intern
- C/C++ 进阶 —— 指向指针的指针
- python如何画出多个独立的图片_python使用matplotlib:subplot绘制多个子图的示例
- effective C++ 条款 44:将与参数无关的代码抽离templates
- Atitit api与安全措施法 目录 1.1. 模板替换 sprintf %f %d 数字小数字段格式化转换校验法	1 2. $pdo-exec 与query	2 2.1. 数字校
- docker20.10.7及以下版本安装registry镜像库指引
- 走楼梯c语言程序,动态规划走楼梯
- 计算机启动太慢的原因是,电脑启动慢的原因分析
- 高性价比WIFI图传方案快速入门教程
- python学习--mysql
- php 7.0 nts 安装,Windows phpstudy 7.0.12 nts 安装redis
- 以太坊源码阅读3——MPT原理
- [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划
- 企业联合体的形式_企业战略联盟的形式有哪些
- Mac截图工具snipaste如何设置主题颜色?
- Appium报错cannot be proxied to UiAutomator2 server because the instrumentation process is not running
- 教你用python编一个小鸟管道( flappybird)
热门文章
- PDF如何在线翻译?PDF在线翻译的方法
- 和平精英2023年五月和平小店返场皮肤有哪些
- Linux系统的定时任务
- html中图片上下左右留白,vertical-align垂直居中( 消除html中图片下边缘留白 )
- java工程师项目经验_最新JAVA工程师个人简历中的项目经验范文.doc
- Chris Hadfield現身《ABS 2020》,各方菁英和THORBOT 雷神量化機器人一同進行深入探討
- 联通光猫nat -虚拟服务器,科学折腾 篇一:长春联通光猫改软路由拨号
- 3D标签云效果的实现
- 迪赛智慧数——柱状图(象形柱图):水果VC含量排行榜
- 这份苹果手机应用历史总排行榜很有意思!