Vim 好用C/C++编程环境

UBUNTU VIM C++ 编译环境

本文主要自用,原文https://blog.csdn.net/dhd_Rs/article/details/82718951 有一个错误的地方,改了下打算自用

VIM下载安装

sudo apt install vim

VIM相关插件安装

配置文件

  1. ubuntn 下一般为~/.vimrc 就是/usr/home文件夹下创建一个.vimrc文件

  2. vim插件存放位置/.vim/

    cd ~/.vim/  如果没有则创建一个
    mkdir ~/.vim/
    
  3. 插件管理插件 pathogen
    顾名思义就是用插件来管理vim的插件 有了pathogen这个插件,会自动配置其他安装的插件。

    mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
    
    • 在~/.vim/目录下创建两个文件夹autoload 和 bundle 将 pathogen.vim 文件下载到autoload目录下

    • 将其他插件放在 bundle 目录下, pathogen会自动将其配置,而不用自己将文件放在不同的目录

  4. 自动匹配括号和引号 auto-pairs

    git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pair
    

    用git安装auto-pairs插件 放到bundle 会自动被pathogen管理

  5. 显示目录树 NERDTree

    git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/NERDTree
    
  6. ctags

    ctags并不是一个vim的插件,它是一个可执行的程序,通过它可以生成索引文件,用于变量与函数的跳转,列出及代码补全

    sudo apt-get install ctags	
    
  7. taglist 列出函数变量等

    cd ~/.vim/bundle && wget "http://www.vim.org/scripts/download_script.php?src_id=19574" -O taglist.zip && unzip taglist.zip -d taglist
    
  8. C/C++代码补全omnicppcomplete

    cd ~/.vim/bundle && wget "http://www.vim.org/scripts/download_script.php?src_id=7722" -O omnicppcomplete.zip && unzip omnicppcomplete.zip -d omnicppcomplete
    

    代码补全必须要通过supertab来做触发,下面会介绍supertab的安装,之前问的文章也是因为supertab的仓库地址换了

    补充STL标准库

     mkdir -p ~/.vim/tags && cd ~/.vim/tags && wget "http://www.vim.org/scripts/download_script.php?src_id=9178" -O - | tar jxvf -
     //生成 tags 文件夹,在 ~/.vim/tags/cpp_src/目录下执行如下命令
     ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
     set tags+=~/.vim/tags/cpp-src/tags   就是让vim找标准库时去这个文件夹找
    
  9. MiniBufExplorer 显示已打开的文件

    mkdir -p ~/.vim/bundle/minibufexplorer/plugin && wget "http://www.vim.org/scripts/download_script.php?src_id=3640" -O ~/.vim/bundle/minibufexplorer/plugin/minibufexpl.vim
    
  10. SuperTab — tab键触发代码补全
    前面提到过代码补全必须用这个来触发

    cd ~/.vim/bundle
    git clone https://github.com/ervanew/supertab
    

VIM 文件编写

"============================
"  基本设置
"============================
syntax enable 					"开启语法高亮
syntax on 						"开启语法高亮

filetype on 					"检测文件类型
filetype plugin on 				"针对不同文件采取不同缩进方式
filetype indent on 				"允许插件
filetype plugin indent on 		"启动自动补全

set number						"显示行号
set ruler 						"显示当前行号
set showmode 					"显示当前Vim模式
set showcmd 					"显示正在输入的命令
set tabstop=4 					"设置tab宽度
set shiftwidth=4 				"设置自动对齐空格数
set smarttab 					"设置backspace删去tab"
set mouse=a 					"允许鼠标操作
set nobackup 					"取消备份
set noswapfile 					"取消临时文件
set encoding=utf-8 				"设置编码方式
set helplang=cn 				"中文帮助
set completeopt=longest,menu 	"自动补全配置
set wildmenu 					"增强命令行自动完成操作
set tags+=~/.vim/tags/cpp_src/tags "添加tags文件路径到 vimrc
" pathogen 插件管理
execute pathogen#infect()


"============================
"  TagList插件设置
"============================
autocmd FileType cpp set tags+=~/.vim/tags/cpp_src/tags  "设置tags文件包含
let Tlist_Show_One_File=1    	" 只展示一个文件的taglist
let Tlist_Exit_OnlyWindow=1  	" 当taglist是最后一个窗口时自动退出
let Tlist_Use_Right_Window=1 	" 在右边显示taglist窗口
let Tlist_Sort_Type="name"   	" tag按名字排序


"============================
"  补全插件设置
"============================
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType ruby set omnifunc=rubycomplete#Complete
autocmd FileType perl set omnifunc=perlcomplete#Complete

"============================
"  C++ 补全插件设置
"============================
autocmd Filetype c setlocal omnifunc=cppcomplete#Complete
autocmd Filetype cpp setlocal omnifunc=cppcomplete#Complete
" search namespaces in the current buffer   and in included files
let OmniCpp_NamespaceSearch = 1
let OmniCpp_MayCompleteArrow=1 " 打开 -> 操作符
let OmniCpp_MayCompleteDot=1 " 打开  . 操作符
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
let OmniCpp_DisplayMode = 1  " always show all members


"============================
"  Python 补全插件设置
"============================
autocmd Filetype python setlocal omnifunc=pythoncomplete#Complete
let g:pydiction_location='~/.vim/tools/pydiction/complete-dict'

"============================
"  Java 补全插件设置
"============================
autocmd Filetype java setlocal omnifunc=javacomplete#Complete
autocmd FileType java set omnifunc=javacomplete#Complete   
autocmd FileType java set completefunc=javacomplete#CompleteParamsInf
autocmd FileType java inoremap <buffer> . .<C-X><C-O><C-P>


"============================
"  自动添加文件头
"============================
"新建.c,.h,.sh,.java文件,自动插入文件头 
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.rb,*.java,*.py exec ":call SetTitle()" 
""定义函数SetTitle,自动插入文件头 
func SetTitle() 
    "如果文件类型为.sh文件 
    if &filetype == 'sh' 
        call setline(1,"\#!/bin/bash") 
        call append(line("."), "") 
    elseif &filetype == 'python'
        call setline(1,"#!/usr/bin/env python")
        call append(line("."),"# coding=utf-8")
        call append(line(".")+1, "") 
    else 
        call setline(1, "/*************************************************************************") 
        call append(line("."), "    > File Name: ".expand("%")) 
        call append(line(".")+1, "    > Author: DHD") 
        call append(line(".")+2, "    > Mail: ") 
        call append(line(".")+3, "    > Created Time: ".strftime("%c")) 
        call append(line(".")+4, " ************************************************************************/") 
        call append(line(".")+5, "")
    endif
    if expand("%:e") == 'cpp'
        call append(line(".")+6, "#include<iostream>")
        call append(line(".")+7, "using namespace std;")
        call append(line(".")+8, "")
    endif
    if &filetype == 'c'
        call append(line(".")+6, "#include<stdio.h>")
        call append(line(".")+7, "")
    endif
    if expand("%:e") == 'h'
        call append(line(".")+6, "#ifndef _".toupper(expand("%:r"))."_H")
        call append(line(".")+7, "#define _".toupper(expand("%:r"))."_H")
        call append(line(".")+8, "#endif")
    endif
    if &filetype == 'java'
        call append(line(".")+6,"public class ".expand("%:r"))
        call append(line(".")+7,"")
    endif
    "新建文件后,自动定位到文件末尾
endfunc 
autocmd BufNewFile * normal G


"============================
"  快捷键设置
"============================
"Ctrl + n 打开目录树
map <C-n> :NERDTree<CR> 		
"Ctrl + t 打开 taglist
map <F8> :Tlist<CR>
"ctags 生成 cpp 文件的 tags
map <F12> :call CreateTags()<CR>
"<F5> 编译运行
map <F5> :call ComplieAndRun() <CR>
"<C-F5> 调试
map <C-F5> :call Rungdb() <CR>


"============================
"  函数定义
"============================
"编译
func! ComplieAndRun()
	exec "w"
	if &filetype == 'c'
        exec "!g++ % -o %<"
        exec "!time ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ % -std=c++11 -o %<"
        exec "!time ./%<"
    elseif &filetype == 'java' 
        exec "!javac %" 
        exec "!time java %<"
    elseif &filetype == 'sh'
        :!time bash %
    elseif &filetype == 'python'
       "exec "!time python2.7 %"
        exec "!time python3.6 %"
    elseif &filetype == 'html'
        exec "!google-chrome % &"
    endif
endfunc

"调试
func! Rungdb()
	exec "w"
	exec "!g++ % -std=c++11 -g -o %<"
	exec "!gdb ./%<"
endfunc

"生成tags文件
func! CreateTags()
	if &filetype == 'c'
		exec "!ctags *.c *.h --c-kinds=+p --fields=+iaS --extra=+fq "
	elseif &filetype == 'cpp'
		exec "!ctags *.cpp *.h *.hpp *.c --c++-kinds=+px --fields=+iaS --extra=+fq "
	elseif &filetype == 'java'
		exec "!ctags *.java --java-kinds=+p --fields=+iaS --extra=+fq "
	elseif &filetype == 'python'
		exec "!ctags *.py --python-kinds --fields=+iaS --extra=+f "
	elseif &filetype == 'html'
		exec "!ctags *.html --html-kinds=+p --fields=+iaS --extra=+f "
	endif
endfunc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值