Skip to content

从零开始打造一个可以当作IDE使用的超强Vim编辑器。

Notifications You must be signed in to change notification settings

xwzw/VimUseNote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 

Repository files navigation

Table of Contents

toc generated by gh-md-toc

Created by gh-md-toc

Windows平台下

1. Vim的安装

安装过程比较简单

单击此处打开 Vim 的官网

1.1 在windows平台下安装vim

在此链接中选择合适自己的版本进行下载。https://github.com/vim/vim-win32-installer/releases

本人安装的版本是:gvim_8.2.1101_x64_signed.exe

GVim是Vim的图形前端。

在安装过程中,选择组件时建议选择完整安装,其余选项均保持默认即可。

2. Vim的基础知识

2.1 Vim的四种模式

  • 正常模式:

    • 在此模式下使用快捷命令,或按:输入命令

    • 若要执行外部命令,按 :! 即可执行外部命令 如:

      :!cl file.cpp 

      即可使用cl执行编译file.cpp的命令

  • 插入模式:可以输入文本,在正常模式下,按以下命令进入插入模式。

    字符 小写时插入的位置 大写时插入的位置
    i 在当前字符前面插入 在当前行的最前面插入
    a 在当前字符后插入 在当前行的最后插入
    o 在当前行的下一行插入 在当前行的上一行插入
  • 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。

  • 替换模式:正常模式下,按R进入。 替换模式也有四种不同的类型

    字符 模式 作用
    R 进入替换(REPLACE)模式 新输入的文本将直接替代/覆盖已经存在的内容
    r 单字符REPLACE 新输入的字符将替代光标之下的当前字符,然后自动返回到常规模式
    gR 进入虚拟替换(VREPLACE)模式 同R有区别
    gr 单字符VREPLACE 同r有区别
    • 单字符命令中增加数字前缀,可以一次性替换多个字符(都替换成同一个字符) 例如

      3r*|3gr*

      会将后面三个字符均替换成*号

    • REPLACE和VREPLACE的区别

      模式 对于<Tab>的区别 对于<NL>的区别
      REPLACE 新字符将直接替代<Tab>键所占用的所有空格的位置,会破坏文档格式 输入<Enter>回车键将增加新行
      VREPLACE 在原有<Tab>键处输入字符,将仅仅替代单个空格,文本格式保持不变 输入<Enter>回车键将用新行替代当前行内容(即清空当前行,且是从当前字符所在位置开始往后清空

      也就是说,REPLACE将Tab只当作一个字符(整体)来看,而VREPLACE则将Tab当作多个空格来看


2.2 Vim的常用命令和快捷键



3. Vimrc文件的配置

说明:

  • 以下配置均可以在vim的命令模式下手动开启或关闭, 在命令模式下输入命令前首先输入 : 但不修改配置文件,只会对当前vim编辑窗口生效,重启即无效

  • _vimrc文件是vim的配置文件,修改它就可以修改vim的一些默认配置,比如语法高亮,缩进长度等。其位置就在vim的安装目录下。

  • 以下配置均只做简单但较为实用的介绍或配置,仅适合新手作为一个上手

  • 在配置文件中,使用双引号作为注释,形如

    "显示行号"
    set nu
  • 如有需要用到双引号作为字符串的情况,例如需要使用 clang-format -style=“…” 可以使用转义字符 \"

  • 对于大部分配置而言,需要关闭开启的配置,在命令前加上no即可,例如

    "显示行号"
    set nu
    "取消显示行号"
    set nonu

以下是一些常用配置及其中文说明

3.1 设置文件编码

若打开文件时中文显示乱码,则通过以下配置修改文件的编码,仅作示例

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

3.2 显示行号

set nu
set number

nu是number的缩写,这两条配置的效果是相同的,若要取消,在命令前加上no

取消显示行号

set nonu
set nonumber

3.3 突出显示当前行

set cursorline
set cul

cul是cursorline的缩写

3.4 突出显示当前列

set cursorcolumn
set cuc

3.5 设置突出显示行或列的颜色

vim中高亮行的默认颜色为darkred(深红)

"开启光亮光标行
  set cursorline
  hi CursorLine   cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
"开启高亮光标列
  set cursorcolumn
  hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white

一般来说,只需要高亮行即可

对于其它的一些语法高亮等本文不作记录 ,如有兴趣,参考:https://yyq123.blogspot.com/2017/02/vim-syntax-highlight.html

一些推荐使用的颜色:

black, brown, grey, blue, green, cyan, magenta, yellow, white,darkgrey

3.6 在Vim中启用鼠标

貌似不使用这个设置也能使用鼠标

"启用鼠标"
"set mouse=a"
"set selection=exclusive"
"set selectmode=mouse,key"

3.7 显示括号匹配

set sm
set showmatch

可以设置显示匹配的时常,个人建议不这么做

set matchtime=1  "单位是十分之一秒"

3.8 括号自动匹配

inoremap ( ()<LEFT>
inoremap { {}<LEFT>
inoremap [ []<LEFT>

该配置会在输入左括号时自动匹配右括号,推荐在替换模式下使用该配置,这样就可以在输入右括号时免去使用方向键

按此格式可以设置引号自动匹配

"引号自动匹配添加"
inoremap " ""<LEFT>
inoremap ' ''<LEFT>

当然,更实用的方式是使用插件 delimitMate,该插件对括号补全有一个最实用的功能:在一对括号之间回车,自动分为 3 行并调整缩进

3.9 设置缩进

set tabstop=4 "tab的长度"
set shiftwidth=4 "自动缩进的长度"
set smartindent 	"设置自动缩进的方式为此"

自动缩进的三种方式:

  • set autoindent 每行的缩进值与上一行相等,使用 set noautoindent 可以取消设置 当你在输入状态用回车键插入一个新行,或者在 normal 状态用 o 或者 O 插入一个新行时,autoindent 会自动地将当前行的缩进拷贝到新行,也就是"自动对齐”
  • set cindent 它会按照 C 语言的语法,自动地调整缩进的长度,比如,当你输入了半条语句然后回车时,缩进会自动增加一个 TABSTOP 值,当你键入了一个右花括号时,会自动减少一个 TABSTOP 值。
  • set smartindent 在这种缩进模式中,每一行都和前一行有相同的缩进量,同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),则取消缩进形式。此外还增加了识别C语言关键字的功能。如果一行是以#开头的,那么这种格式将会被特殊对待而不采用缩进格式。

3.10 设置粘贴模式

"set paste" "使用此设置,通过鼠标右键粘贴时不会变更格式"
set pastetoggle=<F9>	"在插入模式下,按F9自动切换粘贴模式"

3.11 设置非可见字符(tab or 空格)可见

显示非可见字符

set list

切换可见或不可见

set list!

设置显示模式

set listchars

样例: 将制表符(tab)显示为>-;将尾部空格(trail)显示为-

"设置tab和空格的可见字符"
set listchars=tab:>-,trail:-
"设置不可见可见字符的颜色"
hi SpecialKey guifg=darkgrey ctermfg=darkgrey

需要修改颜色修改 darkgrey(灰色) 为别的颜色即可

对于样式的更详细配置参考:https://segmentfault.com/a/1190000021101602

3.12 状态行的设置

"设置显示当前文件名(%t),是否修改过(%m,若修改过会显示+号),文件总行数,当前行占比和光标位置。
set statusline=%t%m\ LEN=%L\ [%p%%]\ %c,%l
"总是显示状态行"
set laststatus=2

关于状态行的更多设置和选项本人认为过于冗余本文不做描述

3.13 显示光标当前位置

该命令不能与状态行同时使用,同时本人建议只使用该选项而不开启状态行,或两者都不使用,是否使用根据个人习惯而定

set ruler

3.14 打开文件类型检测

"打开文件类型检测"
"filetype plugin indent on"
" 打开文件类型检测 "
"filetype on"

对于该配置建议阅读:https://vimjc.com/vim-filetype.html

3.15 ★重要—打开语法高亮显示★

" 打开语法高亮显示 "
syntax on

启用vim自带的语法高亮功能

3.16 代码折叠

Vim支持多种折叠形式:手动折叠manual、基于缩进行折叠indent、基于语法进行折叠syntax、未更改文本折叠diff

建议使用 indent 或者 syntax

"基于缩进进行代码折叠
set foldmethod=indent
"启动 Vim 时关闭折叠
set nofoldenable

如不设置第二个配置,在每次启动vim时所有的代码都默认是折叠状态的

对于代码折叠,有更智能的插件:SimpleFold

代码折叠的快捷键:

命令 作用
za 打开或关闭当前折叠
zM 关闭所有折叠
zR 打开所有折叠

3.17 ★★★配色方案★★★

可能你经过了以上配置后发现,你的vim界面还是很丑,不够美观。对于vim,其实你可以自己设置一个配色方案,如果你设置了一个完整的配色方案,那么你其实就可以在上面的那些配置中有需要配置颜色的地方,不进行配置。因为配色方案大都是一个完整的配色解决方案。

3.17.1 配色方案所在目录

vim有一个专门的目录用来存放配色方案。对于windows而言,其所在位置为 :Vim安装目录\vim82\colors。你会发现里面已经有一些在安装时就已经存在的配色方案。

3.17.2 下载或编辑一个配色方案

你可以下载或编辑某个配色方案的**.vim**文件,保存到~/vim82/colors目录下。

这里推荐一个github上评价极高的主题:https://github.com/morhetz/gruvbox

你可以在该项目的 colors 目录中看到一个名称为 gruvbox.vim 的文件,你可以直接把这个文件下载下来然后放在本地 vim的colors目录中,也可以自己在本地 vim的colors目录中新建一个文本文件,名字随意,但是后缀名必须是 .vim ,然后直接将 github 上的那个文件中的文本复制到你新建的文件中。

3.17.3 启用配色方案

你最好首先启用 vim的256色支持

"开启256色支持"
set t_Co=256    

将这个配置放在 vimrc 配置文件的开头部分。

然后,增加配置项 colorscheme filename 并保存 ,这里的 filename 。这里的filename就是你要使用的配色方案的名称,也就是你下载或自己新建的配色方案文件的文件名。

比如,colorscheme gruvbox

保存配置文件后,重启 vim 就可以看到一个好看的vim页面了。



4. 在Vim中安装并使用插件

4.1 ★★★插件管理工具——Vundle★★★

以下介绍的所有插件都是利用Vundle工具进行安装的

Vundle是一个Vim插件管理器,用于方便地安装、更新和卸载插件。且其本身就是一个插件。

多说一句,插件不需要安装太多,安装了有实用功能的插件就足以了,美化方面只要配色看着舒服就好,把Vim弄得花里胡哨的其实并不好看。比如后面要介绍的彩虹括号,缩进指示之类的插件,本人认为其实是没有必要安装的,当然,这个也看个人。

4.1.1 安装Vundle

Vundle基于Git架构,每一个插件都是一个项目的Repository,通过Vundle可以用简单的指令,可以一键安装/更新/删除所有插件

安装有两种方式:

1.在 https://github.com/VundleVim/Vundle.vim.git 下载 Vundle.vim 文件保存到 vim安装目录/vimfiles/vundle 下即可。

2.使用git的安装(推荐)

首先要下载 Git ,下载地址:https://gitforwindows.org/

安装完毕后配置环境变量(如果不知道环境变量是什么,请使用搜索引擎搜索,一般而言,安装Git时有配置到环境变量的选项),完成后运行CMD输入以下命令:git --version 若成功打印出版本信息则说明安装成功

然后执行以下命令将 Vundle 安装到指定目录

git clone https://github.com/VundleVim/Vundle.vim.git vim的安装目录/vimfiles/vundle/Vundle.vim

必须要安装Git并且配置环境变量成功才能执行!

例如:

git clone https://github.com/VundleVim/Vundle.vim.git "D:\Program Files\Vim\vimfiles\vundle\Vundle"

记得安装目录中如果带有空格需要加上引号,因此也建议在所有的路径中加上引号

值得注意的是,在Git中自带了一个Vim编辑器,不过版本较旧。

4.1.2 配置Vundle

无论以何种方式安装,都需要进行如下配置

在vimrc中将如下配置模板粘贴进去

"==================================Vundle插件管理器的配置=================================="

set nocompatible               "去除VIM一致性,必须"
filetype off                   "必须"

"设置包括vundle和初始化相关的运行时路径"
set rtp+=$VIM/vimfiles/vundle/Vundle
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'	"启用vundle管理插件,必须"

"在此增加其他插件,安装的插件需要放在vundle#begin和vundle#end之间"
"安装github上的插件格式为 Plugin '用户名/插件仓库名'"

 call vundle#end()
 
filetype plugin indent on     "加载vim自带和插件相应的语法和文件类型相关脚本,必须"

"==================================Vundle插件管理器的配置=================================="

**注意事项:**安装的路径一定要设置好,==第七行的 set rtp= 后接的是你的Vundle的安装路径==,如果该值不正确将无法正确运行。你可以在使用Git安装Vundle的时候为其指定安装位置。

4.1.3 安装插件

第一步,配置。在模板中,把要安装的插件按此格式:Plugin '需要安装的插件' 添加到call vundle#begin() call vundle#end() 之间,也就是第8行到第16行之间即可完成第一步的配置工作

例如:

"==================================Vundle插件管理器的配置=================================="

set nocompatible               "去除VIM一致性,必须"
filetype off                   "必须"

"设置包括vundle和初始化相关的运行时路径"
set rtp+=$VIM/vimfiles/vundle/Vundle
call vundle#begin('$VIM/vimfiles/vundle/')

Plugin 'VundleVim/Vundle.vim'	"启用vundle管理插件,必须"
Plugin 'Valloric/YouCompleteMe'
Plugin 'Chiel92/vim-autoformat'

"在此增加其他插件,安装的插件需要放在vundle#begin和vundle#end之间"
"安装github上的插件格式为 Plugin '用户名/插件仓库名'"

 call vundle#end()
 
filetype plugin indent on     "加载vim自带和插件相应的语法和文件类型相关脚本,必须"

"==================================Vundle插件管理器的配置=================================="

追加了两条Plugin即可完成配置,追加到了11行和12行。

这只是一个示例,如果你也追加了这两条Plugin,请先不要执行第二步的命令,因为其中的一个插件并不能简单的使用此法完成完整的安装。追加的这两个插件具体的作用和具体的安装方法将在下文做介绍。

第二步,安装。

在vim中执行 PluginInstall 命令即可自动完成所有插件的安装

其它安装方式

或者,你也可以在vim下使用 :PluginInstall 插件名 命令来直接安装

例如::PluginInstall Valloric/YouCompleteMe

4.1.4 卸载插件

先在vimrc配置文件中注释或者删除对应插件的配置信息,执行:

PluginClean

即可删除指定插件

4.1.5 更新插件

自动批量更新所有已安装的插件命令:

PluginUpdate

使用以下命令,可以查看更多帮助信息:

:help vundle

4.1.6 其它关于配置的说明

call vundle#begin()的括号中可以填写其它插件在安装时的安装路径,例如我设置的路径是:``$VIM/vimfiles/vundle/Plugin$VIM`表示vim的安装目录

对于Vundle和Plugin的安装路径,完全是自由的,可以自己选择其位置。

更多配置参阅官方文档。


4.2 实用插件:史诗级代码补全——YouCompleteMe

4.2.1 安装前的准备

YCM是一个用于自动代码补全的神器,它基于语义分析补齐:通过分析源文件,经过语法分析以后进行智能补全。YCM几乎对现在所有流行的编程语言都提供了非常强大的补齐功能

它不仅强大,同时也是传说中Vim上最难安装的插件。

在Windows下,安装YCM之前,你的电脑应该存在有如下的环境:

对于Vim,你的Vim必须支持Python2或Python3,要查看是否支持,在vim中输入命令 :version 即可查看,如果支持,你应该可以在列表中查看到类似 +python2/dyn +python3/dyn 的字样,若前面的符号是 - ,则说明不支持,请重新安装或编译你的vim,如果你在安装vim选择组件的过程中选择了完整安装,那么应该是支持的。

4.2.2 下载源码

可以使用Git来进行安装,但本文仅介绍使用Vundle的方式。

YCM的git地址:https://github.com/ycm-core/YouCompleteMe

在 vimrc 中 Vundle 的配置部分中添加 Plugin 'Valloric/YouCompleteMe' 然后在 Vim 中执行安装命令即可下载YCM的源码。下载过程可能会比较长。

在下载完源码后,在YCM的源码目录运行 git submodule update --init --recursive 来获取 YouCompleteMe 必要的相关依赖。同样下载过程可能会比较长。

4.2.3 编译源码

本文只介绍最简单的编译方式,详细请参考 YCM

下载完毕后,在源码目录执行

python install.py --语言选项 --msvc **编译。

对于语言选项,有如下选项:

  • C-family languages support:--clangd-completer
  • C# support: install Mono and add --cs-completer
  • Go support: install Go and add --go-completer
  • JavaScript and TypeScript support: install Node.js and npm and add --ts-completer
  • Rust support: --rust-completer
  • Java support: install JDK8 (version 8 required) and add --java-completer

例如:python install.py --clangd-completer

即可编译具有C族语言的语义补全功能的 YouCompleteMe 插件。

对于 -msvc 选项,你需要指定你的VS版本,其默认值是16。

YCM支持MSVC 14(Visual Studio 2015),15(2017)和MSVC 16(Visual Studio 2019)

4.2.4 编译命令举例

例如,我的python版本是python3.8,我想要编译带有C族语义补全功能的YCM插件且我的VS版本是2017,那么我的编译命令应该是

python install.py --clangd-completer --msvc 15

在YCM源码目录执行即可。

编译完成后的配置

此处暂仅给出一个样例

"==================================YCP插件的配置=================================="
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=1
let g:ycm_key_invoke_completion = '<c-z>'
set completeopt=menu,menuone

noremap <c-z> <NOP>

let g:ycm_semantic_triggers =  {
           \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
           \ 'cs,lua,javascript': ['re!\w{2}'],
           \ }

"设置补全菜单的颜色"
highlight PMenu ctermfg=0 ctermbg=242 guifg=black guibg=darkgrey
highlight PMenuSel ctermfg=242 ctermbg=8 guifg=darkgrey guibg=black
"==================================YCP插件的配置=================================="

完毕后即可在vim中使用代码补全功能



4.3 实用插件:代码自动格式化——vim-autoformat

4.3.1 插件安装

在Vundle中添加 Chiel92/vim-autoformat 字段,运行安装命令即可。于YCM的安装时需要的支持一样,该插件==需要vim对python==的支持。


4.3.2 插件介绍

插件git地址:https://github.com/Chiel92/vim-autoformat

该插件实质只是一个框架,要使用它还==需要相应语言的格式化工具==,对于vim-autoformat,常用的工具有:astyleclang-format

除了这两个之外还有:python-pep8,python3-pep8,python-autopep8和yapf(Google开发的Python格式化工具)等等。

简单说,安装了该插件后你==还需要根据你使用的语言下载相对应的格式化工具==以便更好的使用它。虽然不安装这些工具也能使用该插件。

因为Vim实际上是可以执行外部命令的,因此不安装插件也可以直接使用格式化工具,但安装插件后能够更方便快捷的对其进行管理和修改。

而且你必须会简单的使用代码格式化工具才能知道如何更好的使用该插件,因此,接下来首先介绍代码格式化工具——clang-format

4.3.3 下载并使用clang-format

如果你已经会使用 clang-format 或其它的代码格式化工具了,请直接跳过本节,到 4.3.4 节阅读vim-autoformat的配置教程。


4.3.3.1 LLVM和Clang

如果你已经安装并配置了 LLVM 可以跳过 ,直接看 4.3.3.3

clang-format 是基于开源编译器 clang 的一个命令行工具,能够自动化格式C/C++/Obj-C代码,支持多种代码风格:Google, Chromium, LLVM, Mozilla, WebKit,也支持自定义风格(通过编写.clang-format文件),能够很方便的统一代码格式。

而 clang,又是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。

LLVM 是构架编译器(compiler)的框架系统,同样以C++编写而成。

想了解更多请使用搜索引擎。

如果你想下载可以编译C/C++的LLVM,可以在此链接下载符合你的计算机要求的LLVM版本,如果只是想单独的下载clang的代码格式化工具 clang-format,请跳过本节。LLVM下载地址:https://releases.llvm.org/download.html

你可以在安装过程中选择将其添加到环境变量,之后在 CMD 下执行 clang --version 来查看是否安装成功,如果没有打印版本信息,请检查你的环境变量的配置。如果打印了版本信息,可以再执行 clang-format --version 来查看 clang-format 的版本信息。

并且,你可以使用 clang 命令编译 c 源码,使用 clang++ 命令编译 c++ 源码,形如:clang++ demo.cpp -o out.exe

本文不再对LLVM的使用做介绍。

如果你对该编译器有兴趣,可以参阅官方文档:https://clang.llvm.org/docs/ClangCommandLineReference.html

本人安装的版本是:Windows (64-bit) 单击此链接可以直接下载,不需要下载 .sig 文件


4.3.3.2 单独下载clang-format工具

因为clang-formatclang的一部分,所以事实上直接安装clang是最简单的方法。

如果你安装了 LLVM 或者 VS2017 以上的版本 ,那么都会自带有一个 clang-format 工具。但是VS自带的版本比较旧,不建议使用了。

如果你安装并配置好了 ==LLVM== ,就可以直接在命令行中使用clang-format,可跳过本小节。当然你也可以在本节中按照教程下载最新版本的clang-format并将其替换到LLVM中,其所在位置是LLVM的bin目录。

clang-format工具的单独下载地址:https://llvm.org/builds/

或者直接单击:clang-format-2663a25f.exe 即可下载单独的clang-format工具。

使用此方式下载好单独的 clang-format工具后,将其重命名为 clang-format.exe ,同时将其放在你喜欢的位置来方便在命令行中调用它。当然要把它所在的文件夹路径添加到环境变量的Path中。

你可能会发现,Vim并没有被配置在环境变量Path中的路径,但是你仍然可以使用 vim、gvim、evim 命令来启用vim。这其实是因为 Vim 在安装时在 C:\Windows 目录下生成了三个 .bat 文件vim.batgvim.batevim.bat 用于启用Vim。

你当然也可以把下载并重命名好的 clang-format.exe 也直接丢在 C:\Windows\ 目录下,即可在命令行中使用它,但我不建议这么做。你应该自己新建一个文件夹然后将文件夹的路径添加到环境变量的Path中去。

比如,在D盘中新建一个文件夹 ClangFormat ,然后把重命名后的 clang-format.exe 放进去,再在环境变量的Path中添加如下字段:D:\ClangFormat


4.3.3.3 clang-format的简单命令

可以在桌面新建一个文本文件,比如 demo.cpp,写入一些代码进去用作实验。在 cmd 中,定位到桌面并开始测试。

  • 预览使用默认风格格式化后的代码

    clang-format demo.cpp
    

    此命令可以将格式化后的代码在cmd窗口中打印出来,但并不会实际的修改它。你可以利用cmd的文件重定向 > 将打印的内容输出到一个文件中,比如

    clang-format demo.cpp >demo2.cpp
    
  • 直接在源文件上进行代码格式化 加上 选项 -i 即可直接在源文件上对代码格式进行修改

    clang-format -i demo.cpp
    

    执行此命令后再打开 demo.cpp 文件会发现文件的格式已经被修改了。在配置 Vim 的 vim-autoformat 插件时不需要用到此选项。

  • ★★★重要·指明代码规范,其默认值为 LLVM★★★ 添加选项 -style= 来指定要使用的格式规范,而格式规范也是代码格式化工具的精髓所在。

    clang-format -style=Microsoft demo.cpp
    

    该命令可以预览使用 Microoft 规范的 demo.cpp 格式化后的代码。

    目前支持的值有:

    此外,除了使用这些值,你也可以在 style= 后进行自定义值,形如

    clang-format -style="{ BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4 }" demo.cpp
    

    其中使用了几个常用的选项,这里只介绍其中几个较常用选项的含义,记得在此处要使用双引号,不使用的话会被当成有多个选项。

    • UseTab: 在文件中使用制表符的方式。其值有但不限于:

      • Never,从不
      • Always,每当填充至少需要从一个制表符停靠点到下一个制表符停靠点时使用制表符
    • TabWidth:制表符的长度

    • IndentWidth:官网的解释是 The number of columns to use for indentation. 建议和制表符长度保持一致。

    • BreakBeforeBraces:在何时断开大括号,其值有但不限于:

      • Attach:始终将括号附加到周围环境

      • Allman:始终在括号前断开。

      • 具体区别自行实验。

  • 你也可以将自定义的代码格式规范保存在文件中,并在需要时调用它,保存需要使用 --dump-config 命令,这不在本文的介绍范围内,本文对clang-format的介绍篇幅已经太大。具体请参阅官方命令选项的官方文档或使用搜索引擎。

对于更详细的样式的选项,请参阅文档:https://clang.llvm.org/docs/ClangFormatStyleOptions.html

对于更详细的clang-format的命令选项,请参阅官方文档:https://clang.llvm.org/docs/ClangFormat.html


4.3.4 vim-autoformat的使用和配置

要执行格式化命令,在vim中执行:Autoformat 即可

"==================================vim-autoformat插件的配置=================================="
"设置保存时自动格式化(*表示所有文件)"
"au BufWrite * :Autoformat"
au BufWrite *.cpp,*.hpp :Autoformat
au BufWrite *.c,*.h :Autoformat

"设置clang-format格式化,style后面的格式是VS的格式"
let g:formatdef_clangformat_Microsoft = '"clang-format -style=Microsoft"'

let g:formatters_cpp = ['clangformat_Microsoft']
let g:formatters_cc = ['clangformat_Microsoft']
let g:formatters_hpp = ['clangformat_Microsoft']
let g:formatters_c = ['clangformat_Microsoft']
let g:formatters_h = ['clangformat_Microsoft']


"==================================vim-autoformat插件的配置=================================="

各个参数含义的详细介绍:

  • au BufWrite *.type : xxxxx 在保存文件后缀名为 type 的文件时自动执行 xxxxx 命令,如果为Type为 *,则对所有的文件在保存时都执行 xxxxx 命令。 配置模板的案例中,au BufWrite *.cpp,*.hpp :Autoformat ,意为在执行保存文件的命令时,如果文件类型是 cpphpp 则自动执行 Autoformat 命令。

  • let g:formatdef_xxxxx 为全局定义一个格式定义变量 xxxxx,如果不知道这是什么,按照接下来介绍的模板来进行设置即可

    • 形如:let g:formatdef_MICRVS = '"clang-format -style=Microsoft"' ,就是定义了一个名为MICRVS的格式变量(请允许我这么称呼它),可以在其中使用下划线形如let g:formatdef_MICR_VS = '"clang-format -style=Microsoft"'则定义了一个名为MICR_VS的格式变量。
    • 定义的表达式需要使用单引号==和==双引号将定义部分圈起来,定义部分即是 clang-format 的命令,其中,==不需要使用-i选项==
    • 当然,你也可以在 -style 后使用自定义命令,不过你需要使用一个转移字符 \" 才能在-style后表示一个双引号,因为对 vimrc 而言双引号是注释。 形如:let g:formatdef_clangformat_Microsoft = '"clang-format -style=\"{ BasedOnStyle: Microsoft, UseTab: Always, IndentWidth: 4, TabWidth: 2 }\" "'
    • 这是一个类似 VS 代码规范的自定义案例,本人使用的就是这种格式: \"{ BasedOnStyle: LLVM, UseTab: Always, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4 }\"
  • formatters_type=[xxxxx] 顾名思义,为指定的type,指定一个格式化变量。形如

    let g:formatters_cpp = ['clangformat_Microsoft']
    let g:formatters_cc = ['clangformat_Microsoft']
    

    就为文件类型为 .cpp.cc 的文件指定了名为 clangformat_Microsoft 的格式变量,在调用 Autoformat 命令时,将为这两个类型的文件使用该格式变量的格式。

对于vim-autoformat的更多配置选项,请参阅官方文档:https://github.com/Chiel92/vim-autoformat



4.4 括号/引号自动补全——delimitMate

如果你完成了 4.1 到 4.3 的插件安装,我不得不说你是一个很有耐心的人了。但是不用担心了,接下来介绍的几个插件的安装和使用都非常之简单了!当然,都是基于4.1节中安装的 Vundel 的安装。

Vundle 配置中添加 Plugin 'Raimondi/delimitMate',然后在vim执行安装命令PluginInstall,再重启Vim就可以愉快的使用它了!

功能介绍:

括号和引号的自动补全和智能匹配。例如:

  • 输入前大括号补全后大括号
  • 在一对括号之间回车,自动分为 3 行并调整缩进(本人使用该插件的唯一原因
  • 输入前引号自动补全后引号

这是 delimitMate 的官网:https://github.com/Raimondi/delimitMate

你可以在 vim 下执行::help delimitMate 来查看官方文档。

你可能发现无法在vim中使用上述功能介绍中的第二个功能,这是因为 delimitMate 默认是关闭这个功能的,你需要在vimrc中添加如下配置:

"==================================delimitMate插件的配置=================================="

set backspace=start,eol
let delimitMate_expand_cr = 1 "需要backspace包含start,eol
let delimitMate_expand_space = 1 "需要backspace包含start,eol

"==================================delimitMate插件的配置=================================="

你也可以关闭某些类型文件的自动补全

" 比如说关闭python文件的
" au FileType python let b:delimitMate_autoclose = 0

请以 :help delimitMate 的官方文档为准。

如果你无法在结束输入后输入右括号直接覆盖原位置的右括号,请按快捷键 shift+tab 即可跳转到右符号的后面。或者使用 替换模式 进行编辑。



4.5 彩虹括号匹配——rainbow_parenthsis

这不是一个自动补全的插件,而是根据不同括号的位置显示不同的颜色。

如果你不需要可以不下载此插件

Vim可以通过设置 set showmatch 打开自带的括号匹配功能,但是,编写代码时经常会出现一行代码中有多重括号嵌套,这时阅读和分析这种连续嵌套的多重括号会变得较为困难。

rainbow_parenthsis 就是一个对不同括号( 包括()[]{}<> )使用不同彩色进行高亮匹配显示的Vim插件,虽然功能较为简单,但是却十分实用。

在 Vundle 中添加 Plugin 'kien/rainbow_parentheses.vim' 然后在vim执行安装命令 PluginInstall 即可完成安装。

然后在 vimrc 中添加如下配置,重启vim就可以看到彩虹颜色的括号了

"需要使用到的颜色"
let g:rbpt_colorpairs = [
    \ ['brown',       'RoyalBlue3'],
    \ ['Darkblue',    'SeaGreen3'],
    \ ['darkgray',    'DarkOrchid3'],
    \ ['darkgreen',   'firebrick3'],
    \ ['darkcyan',    'RoyalBlue3'],
    \ ['darkred',     'SeaGreen3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['brown',       'firebrick3'],
    \ ['gray',        'RoyalBlue3'],
    \ ['black',       'SeaGreen3'],		"建议把这一行删掉,因为是黑色的括号"
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['Darkblue',    'firebrick3'],
    \ ['darkgreen',   'RoyalBlue3'],
    \ ['darkcyan',    'SeaGreen3'],
    \ ['darkred',     'DarkOrchid3'],
    \ ['red',         'firebrick3'],
    \ ]

let g:rbpt_max = 16		"开启16对括号匹配"
let g:rbpt_loadcmd_toggle = 0

"Always On:*表示对所有文件开启"
au VimEnter * RainbowParenthesesToggle	"启动Vim时自动执行该命令开启彩虹括号匹配"
au Syntax * RainbowParenthesesLoadRound "开启圆括号()匹配"
au Syntax * RainbowParenthesesLoadSquare "开启方括号[]匹配"
au Syntax * RainbowParenthesesLoadBraces "开启大括号{}匹配"
"au Syntax * RainbowParenthesesLoadChevrons" "开启尖括号<>括号匹配"


4.6 缩进指示——indentLine

只需要在Vim配置文件 ~/.vimrc 中增加 Plugin 'Yggdroot/indentLine' 并使用 :PluginInstall 进行安装即可

在配置文件中添加 let g:indentLine_enabled = 0 可以关闭该插件。

在vim命令中可以使用 :IndentLinesToggle 命令来打开或关闭显示缩进线。

4.6.1 修改指示线颜色

indentLine 插件默认用灰色覆盖掉当前 Vim配色方案 的”隐藏颜色(conceal color)”,如果需要恢复使用配色方案中的 conceal color,需要关闭 indentLine_setColors 选项:let g:indentLine_setColors = 0

如果需要指定 indentLine 插件显示的缩进指示线的颜色,可以使用 g:indentLine_color_term 选项。例如,可以使用 let g:indentLine_color_term = 255 (需要在vimrc中配置开启支持256色功能,如何配置可以去查看 4.7 节的最后一部分)将 indentLine 插件在 Vim 中显示的缩进指示线颜色设置为白色。

4.6.2 修改缩进指示线样式

插件默认使用 ¦ 来标识缩进,可以通过 g:indentLine_char 选项进行更改。例如,可以设置indentLine显示的缩进线为 ¦;也可以使用 let g:indentLine_char_list = ['|', '¦', '┆', '┊'] 为不同的缩进层级设置不同的缩进线

4.6.3 一些注意事项

该插件似乎只能对使用空格缩进的缩进显示缩进线,而无法对使用 Tab 键进行缩进的缩进线进行显示。你可以利用 vim-autoformat 代码格式化插件指定代码格式为不使用tab键,只是用空格来进行缩进,例如,'"clang-format -style=\"{ BasedOnStyle: LLVM, UseTab: Never }\" -"' 将 UseTab 设为 Never,即可实现只是用空格不使用tab。

或者,你可以利用在本文第 3 节中的 3.11 小节中的配置,实现在使用tab键时的类似于显示缩进线功能的配置, 形如

"修改空格和tab的可见字符"
set listchars=tab:¦\ ,trail:-

将tab键的缩进字符改成 ¦\即可,当然也可以使用 \ ¦



4.7 另一款缩进线指示——vim-indent-guides

个人比较偏爱上一款。

在 Vundle 的配置中添加Plugin 'nathanaelkane/vim-indent-guides' 然后在 vim 中执行命令 :PluginInstall 即可完成安装。

插件git地址:https://github.com/nathanaelkane/vim-indent-guides

对gVim而言,**此插件可以直接与gVim一起使用,无需进行配置。**仅对gVim而言,它将自动检查您的配色方案并选择合适的颜色。

以下是一个配置案例:

"==================================vim-indent-guides的配置=================================="

"设置默认启用插件"
let g:indent_guides_enable_on_vim_startup = 1

"取消缩进引导自动设置颜色"
let g:indent_guides_auto_colors = 0
"手动设置颜色"
hi IndentGuidesOdd  guibg=red   ctermbg=238
hi IndentGuidesEven guibg=green ctermbg=darkgray

"设置缩进线长度,不设置的话,缩进线会很粗"
let g:indent_guides_guide_size = 1


"==================================vim-indent-guides的配置=================================="

不设置默认启用,可以通过如下命令启动:

:IndentGuidesEnable
:IndentGuidesDisable
:IndentGuidesToggle

对于手动设置颜色的部分,gui即表示GVim,而ctermbg则表示在cmd状态下运行的vim。

值得注意的是,在手动设置颜色时,你可能注意到从前我们设置颜色时都是使用的英文关键字比如blue来设置颜色的。而使用了数字,比如上面的案例中使用了 238 这个数字,这其实是Vim所支持的其它颜色,256色。但是,默认情况下Vim不会启用,如果要启用,请在vimrc文件的开头部分就进行如下配置

"开启256色支持"
set t_Co=256    

关于配色,后文可能会继续提到。

如果你对该插件的跟多配置感兴趣,查看官方文档:https://github.com/nathanaelkane/vim-indent-guides



4.8 实用插件:快速注释——NERD Commenter

在你的 Vundle 插件中添加 Plugin 'preservim/nerdcommenter' 然后执行 PluginInstall 即可完成安装。

插件git地址:https://github.com/preservim/nerdcommenter

安装完插件后即可直接使用,在命令模式下使用 \cc 来注释,\cu 来取消注释。前面可以加上数字来指定注释或取消注释的行数,例如 5\cc 即可快速往下注释5行。

你可以自定义插件的注释符号,请参阅官方文档。



4.9 状态栏美化——vim-airline

在Vundle中添加 Plugin 'vim-airline/vim-airline' 然后执行 :PluginInstall 即可完成该插件的安装。

git地址:https://github.com/vim-airline/vim-airline

这是一个示例配置

"==================================vim-airline的配置=================================="

"开启选项卡显示所有缓冲区功能"
let g:airline#extensions#tabline#enabled = 1
"为标签行设置分隔符"
let g:airline#extensions#tabline#left_sep = '>'
let g:airline#extensions#tabline#left_alt_sep = '>'
"使用路径格式化"
let g:airline#extensions#tabline#formatter = 'default'
"设置状态行到顶部"
"let g:airline_statusline_ontop=1
"设置状态栏样式"
"let g:airline_left_sep = ''
"let g:airline_left_alt_sep = ' ❯'
"let g:airline_right_sep = ''
"let g:airline_right_alt_sep = '❮ '

"==================================vim-airline的配置=================================="

如果你对状态栏的各种属性不满意,你也可以对其进行自定义,请参阅其文档。

在最近的提交里,vim-airline 插件与其主题插件 vim-airline/vim-airline-themes 已经分开成了两个项目,要使用 vim-airline 的主题,你需要在 Vundle 中添加 Plugin 'vim-airline/vim-airline-themes' 然后在 vim 中执行 :PluginInstall 进行安装

git地址:https://github.com/vim-airline/vim-airline-themes

安装后,在 vim 中执行命令 :airline_theme=<theme> 来替换主题,如 :AirlineTheme base16

而对于 vimrc ,在其中添加 :let g:airline_theme='<theme>' 来设置主题。你可以使用上一个命令,找到合适的主题后再配置 vimrc。

在此处查看现有主题:https://github.com/vim-airline/vim-airline/wiki/Screenshots



4.10 实用插件:在Vim显示树形目录——NERD tree

该插件的作者与 NERD Commenter 的作者是同一人。

安装

NERDTree是一款用来在Vim界面显示树形目录的文件管理器插件,可在vim操作界面进行文件打开、目录浏览操作,实用性很强。

在Vundle中添加 :Plugin 'preservim/nerdtree' 再在vim中执行 :PluginInstall 命令即可完成安装。

安装好后,在Vim中执行该命令::NERDTree 即可打开目录树。

设置快捷键

你也可以为开启目录树设置一个快捷键,在vimrc中配置:nnoremap <leader>t :NERDTree<CR> 即可在vim的命令模式下输入(无需首先输入:,因为它是一个快捷键而不是命令,只是你把这个快捷键绑定到了一个命令上面而已)\t打开目录树。

前缀键(leader),Vim预置有很多快捷键,再加上各类插件的快捷键,大量快捷键出现在单层空间中难免引起冲突。为缓解该问题,而引入了前缀键<leader>。藉由前缀键, 则可以衍生出更多的快捷键命名空间(namespace)。例如将r键配置为<leader>r<leader><leader>r 等多个快捷键。

在示例的配置中,输入一个前缀键然后按 t 就可以打开目录树。前缀键默认是指 \ ,关于前缀键,和如何配置快捷键,本文不做更多介绍。

配置

如果你想启动自动打开目录树,可在 vimrc 中配置:autocmd VimEnter * NERDTree 即可在启动时自动打开。

此外,NERDTree的窗口默认是设置在左边的,如果你想把它放到右边去,可以在 vimrc 中添加如下配置:let NERDTreeWinPos="right"

4.10.1 NERD Tree 常用命令

  • q 关闭 NERDTree

  • o 在已有窗口中打开文件或目录,并将光标跳到该窗口

  • O 递归打开选中 结点下的所有目录

  • x 合拢选中结点的父目录

  • X 递归 合拢选中结点下的所有目录

  • P 跳到根结点

  • p 跳到父结点

  • u 设置上级目录为根路径

  • U 设置上级目录为跟路径,但是维持原来目录打开的状态

  • r 刷新光标所在的目录

  • R 刷新当前根路径

  • I 显示或者不显示隐藏文件

  • f 打开和关闭文件过滤器

  • A 全屏显示 NERDTree,或者关闭全屏

  • C 将根路径设置为光标所在的目录

About

从零开始打造一个可以当作IDE使用的超强Vim编辑器。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published