sudo apt install vim
sudo yum install vim
vimrc 配置文件
linux下为 ~/.vimrc
, windows下为安装目录下的 _vimrc
文件
linux下vim插件的存放目录为
cd ~/.vim/
#如没有可自行创建
#mkdir ~/.vim/
windows下插件存放目录为,软件安装目录下的 vimfile
文件夹
项目地址
https://github.com/tpope/vim-pathogen
安装命令
mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
解释
项目地址
https://github.com/jiangmiao/auto-pairs
安装命令
git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pair
解释
从GitHub上获取项目的文件夹复制到 ~/.vim/bundle 目录下(此后的插件都是此方式,之后不再赘述)
项目地址
https://github.com/scrooloose/nerdtree
安装命令
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle
说明
ctags并不是一个vim的插件,它是一个可执行的程序,通过它可以生成索引文件,用于变量与函数的跳转,列出及代码补全
linux下的安装
sudo apt-get install ctags #Ubuntu
sudo yum install ctags #CentOs
windows下的安装 点此下载
把下载下来的压缩文件解压,把其中的 ctags.exe 文件添加环境变量(不会请自行百度)
项目地址
http://www.vim.org/scripts/script.php?script_id=273
安装命令
cd ~/.vim/bundle && wget "http://www.vim.org/scripts/download_script.php?src_id=19574" -O taglist.zip && unzip taglist.zip -d taglist
项目地址
http://www.vim.org/scripts/script.php?script_id=1520
安装命令
cd ~/.vim/bundle && wget "http://www.vim.org/scripts/download_script.php?src_id=7722" -O omnicppcomplete.zip && unzip omnicppcomplete.zip -d omnicppcomplete
额外添加库函数补全的方法
以 STL 标准库为例
mkdir -p ~/.vim/tags && cd ~/.vim/tags && wget "http://www.vim.org/scripts/download_script.php?src_id=9178" -O - | tar jxvf -
~/.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
项目地址
http://www.vim.org/scripts/download_script.php?src_id=3640
安装命令
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
项目地址
https://github.com/ervandew/supertab
安装命令
cd ~/.vim/bundle && git clone https://github.com/ervandew/supertab.gi
以下是我的vimrc文件
几点说明
"============================
" windows下解决乱码问题(linux下不需要)
"============================
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
"解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
"解决consle输出乱码
language messages zh_CN.utf-
"============================
" 基本设置
"============================
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 "增强命令行自动完成操作
"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 = 2
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 . .
"============================
" 自动添加文件头
"============================
"新建.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")
call append(line(".")+7, "using namespace std;")
call append(line(".")+8, "")
endif
if &filetype == 'c'
call append(line(".")+6, "#include")
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 :NERDTree
"Ctrl + t 打开 taglist
map :Tlist
"ctags 生成 cpp 文件的 tags
map :call CreateTags()
" 编译运行
map :call ComplieAndRun()
" 调试
map :call Rungdb()
"============================
" 函数定义
"============================
"编译
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