//--------------------------------------------------------------------------------------
// 作者:蚂蚁会游泳
// 日期:2022.01.10
//--------------------------------------------------------------------------------------
前言
Vim被称为编辑器之神,被多数程序员所使用,它的优点非常明显,包括但不限于如下几点:
- 对硬件无要求,既可以安装在Linux系统下,也可以安装在Windows系统下
- 告别鼠标
- 高效的编辑模式和命令行模式
- 丰富的插件库几乎可以配置任何开发语言的IDE环境
本文是我在Windows10系统上安装git和vim的经验分享,适合对Windows系统命令行有一定了解的同学阅读。
1、前期准备
1.1 安装包下载
git
官网链接:https://git-scm.com/download/win
阿里云链接(64位,v2.34.1):https://www.aliyundrive.com/s/k5bxzGuJuQv
vim
官网链接:https://www.vim.org/download.php
阿里云链接(64位,v8.2.4046):https://www.aliyundrive.com/s/QZNu7rSV7Zk
1.2 安装教程
git与vim的安装全部采取默认设置,一路点击下一步即可。
不想默认安装在C盘的同学,可以自定义安装路径,比如:
D:\Git
D:\Vim
我的git与vim自定义了如上的安装路径。
2、配置
git
没什么好配的,因为今天的主角是gvim的安装。git安装完毕就可以在win命令行使用git命令了。
vim
修改系统环境变量,如下图:
修改好之后,桌面上会有三个快捷图标,点击gvim8.2即可启动gvim。
打开vim的安装路径我们可以看的2个文件夹和一个文件
D:\Vim
接下来对配置文件进行修改。随便用一个文本编辑器打开_vimrc文件。里面有一些代码,如下:
vim的配置
我们不用管这些代码,在这些代码之后,复制粘贴下面的代码:
" 基本配置
"
" 设置行号
set number
" 设置字体和大小
set guifont=Courier_new:h10:b:cDEFAULT
" 语法高亮。自动识别代码,使用多种颜色表示
syntax enable
" awesome colorscheme
colorscheme darkblue
" 支持使用鼠标
set mouse=a
" 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致
set autoindent
" 按下Tab键后,vim显示的空格数
set tabstop=4
" normal模式下,>>增加一级缩进、<<取消一级缩进、==取消全部缩进时,每一级缩进的空格数
set shiftwidth=4
" 自动将Tab转为空格(防止Tab键在不同编辑器缩进不一致导致问题)
set expandtab
" Tab转为多少个空格
set softtabstop=4
" 光标所在行高亮
set cursorline
" 关闭自动折行
set nowrap
" 垂直滚动时,光标距离顶部/底部的距离(单位:行)
set scrolloff=5
" 水平滚动时,光标距离行首或行尾的距离(单位:字符)
set sidescrolloff=30
" 设置行宽,即一行显示多少字符
set textwidth=1000
" 是否显示状态栏:0表示不显示,1表示只在多窗口显示,2表示显示
set laststatus=2
" 设置状态条显示的信息:文件名、光标所在字符的ASCII码、光标所在字符的ASCII码的十六进制、光标所在的位置、光标所在行之上的内容占整个文件的百分比、文件总行数
set statusline=\ %F%m%r%h%w\ \ \ \ ASCII=\%03.3b\ \ \ \ HEX=\%02.2B\ \ \ \ POS=%04l,%04v\ \ \ \ %p%%\ \ \ \ NumOfLine=%L
" 显示行尾的空格
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/
" 光标遇到括号时,自动高亮对应的另一半括号
set showmatch
" 命令行模式下,在底部显示当前键入的指令。例如键入dd删除一行时,键入第一个d,底部右侧显示d,完全键入dd时,操作完成,底部显示消失
set showcmd
" 搜索时,高亮显示搜索结果
set hlsearch
" 搜索时,每输入一个字符,自动跳到第一个匹配的结果
set incsearch
" 搜索时忽略大小写
set ignorecase
" 不创建交换文件
set noswapfile
" 保留 撤销 操作历史
set undofile
" 设置操作历史文件的保存位置
set undodir=~/.vim/.undo//
" vim需要记住多少次历史操作
set history=1000
" 命令模式下,底部操作指令按下 Tab 键自动补全。第一次按下 Tab,会显示所有匹配的操作指令的清单;第二次按下 Tab,会依次选择各个指令
set wildmenu
set wildmode=longest:list,full
" F5一键编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec '!g++ % -o %<'
exec '!time ./%<'
elseif &filetype == 'cpp'
exec '!g++ % -o %<'
exec '!time ./%<'
elseif &filetype == 'python'
exec '!python %'
" 如果显示时间,将上面一句换为exec '!time python %'
elseif &filetype == 'sh'
:!time bash %
endif
endfunc
" 粘贴时缩进混乱,设置F9快捷键开启和关闭paste模式
set pastetoggle=<F9>
" 定义F1快捷键为切换vim窗口
map <F1> <C-w>w
vundle
vundle的配置
在_vimrc中,粘贴下面的代码:
" Vundle配置
set nocompatible " 设置vim和vi不兼容。在兼容模式下运行时,Vim 大部分增强及改善的功能就不可用了,vundle要求必须有
filetype off " required
" 设置vundle的安装路径,并初始化vundle
set rtp+=D:\Vim\vimfiles\vundle
call vundle#begin() " Keep Plugin commands between vundle#begin/end.
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" 在vim中使用git命令
Plugin 'tpope/vim-fugitive'
" 在vim行号旁显示git diff的差异标记
Plugin 'airblade/vim-gitgutter'
" 插入和删除成对的符号(surrounding),如括号,引号
Plugin 'jiangmiao/auto-pairs'
" 给现有代码插入、删除或修改成对的符号(surrounding)
Plugin 'tpope/vim-surround'
" 一键注释单行或多行代码
Plugin 'scrooloose/nerdcommenter'
" nerdtree
Plugin 'scrooloose/nerdtree'
" 在nerdtree目录中显示git状态,用法暂不明了,之后使用git时再继续学习
Plugin 'Xuyuanp/nerdtree-git-plugin'
" AI代码补全工具tabnine
Plugin 'zxqfl/tabnine-vim'
call vundle#end() " All of your Plugins must be added before the following line
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
" filetype plugin on
"
" Brief help
" :PluginList - 列出已配置的 plugins
" :PluginInstall - 安装begin/end之间的 plugins; 添加 `!` 去更新或输入 :PluginUpdate
" :PluginSearch foo - 搜索 foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
vundle是gvim的插件之一,一个功能强大的插件管理器,我们用它来安装其它插件。举个例子,把gvim比作谷歌浏览器,那vundle就相当于tempermonkey,能让你的谷歌浏览器更强大。
vundle的安装
在vimfiles中新建一个文件夹,重命名为vundle,如下图:
在vumdle路径下打开cmd命令窗口,输入如下命令:
git clone https://github.com/gmarik/vundle.git D:\Vim\vimfiles\vundle
如图:
按回车键,之后就会自动下载vundle的安装文件到D:\Vim\vimfiles\vundle
路径下了。
其它插件的安装
点击桌面图标打开gvim,在命令模式输入下面指令:
:PluginInstall
安装下图中的一些插件:
向安装其它插件,直接修改begin/end
之间的代码即可。
其它插件的配置
在_vimrc中粘贴如下代码:
" 各种插件的配置
"
"
" NERD Commenter配置
" 将leader从"\"改为","
let mapleader = ","
" 在注释符后面自动添加空格
let g:NERDSpaceDelims = 1
" Use compact syntax for prettified multi-line comments:使用紧凑语法美化多行注释
let g:NERDCompactSexyComs = 1
" Align line-wise comment delimiters flush left instead of following code indentation:靠左对齐注释符,而不是跟随代码缩进
let g:NERDDefaultAlign = 'left'
" Allow commenting and inverting empty lines (useful when commenting a region):允许注释和反注释空行(在注释多行代码时很有用)
let g:NERDCommentEmptyLines = 1
" Enable trimming of trailing whitespace when uncommenting:取消注释的同时删除当前行末尾的空格
let g:NERDTrimTrailingWhitespace = 1
" Enable NERDCommenterToggle to check all selected lines is commented or not:暂时不知道什么意思,作什么用途
let g:NERDToggleCheckAllLines = 1
"
"
" NERDTree配置
" 将F2设置为开关NERDTree的快捷键
map <F2> :NERDTreeToggle<cr>
" 修改树的显示图标
" let g:NERDTreeDirArrowExpandable = '+'
" let g:NERDTreeDirArrowCollapsible = '-'
" 打开vim时如果没有文件自动打开NERDTree
autocmd vimenter * if !argc()|NERDTree|endif
" 当NERDTree为剩下的唯一窗口时自动关闭
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"
"
" nerdtree-git-plugin配置
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
3、报错汇总
Error.1
E117:Unknown function: vundle#begin
或
E117: Unkown function: vundle#installer#new
错误分析:rtp路径设置错误,vim找不到vundle插件
解决方法:
Error.2
[nerdtree-git-status] option ‘g:NERDTreeIndicatorMapCustom’ is deprecated, please use ‘g:NERDTreeGitStatusIndicatorMapCustom’
错误分析:本插件的原作者@Xuyuanp在更新版本后改变了变量的名字
解决方法:修改"g:NERDTreeIndicatorMapCustom"为"g:NERDTreeGitStatusIndicatorMapCustom"