编写Vim配置,我的Vim我做主
<h2>编写 vim 配置,我的 vim 我做主</h2>
<p>本教程基于慕课网视频教程 <a href=“https://www.imooc.com/learn/1129” title=“玩转 Vim 从放弃到爱不释手”>玩转 Vim 从放弃到爱不释手</a> 进行记录的第二篇插件篇。
第一篇链接:<a href=“https://moshanghua.net/details/1725” title=“初始 VIM 篇”>初始 VIM 篇</a></p>
<h3>什么是Vim配置</h3>
<p>什么是Vim的配置,为什么要使用它?</p>
<p>Vim里非常多常用的设置,比如 <code>:set number</code> 设置行号
Vim里临时设置,没法持久化,每次设置很烦
Vim提供了一种持久化配置的方式,让我们自定义配置</p>
<h3>如何编写Vim配置文件</h3>
<p>如何编写自己的Vim配置文件呢?
Linux/Unix下新建一个隐藏文件 <code>.vimrc</code> 。
或使用Vim直接打开 <code>vim ~/.vimrc</code> 进行编写然后保存。
这里的 <code>~/.vimrc</code> 文件表示用户个人的配置,只对当前用户生效。
另外,Vim 的全局配置一般在 <code>/etc/vim/vimrc</code> 或者 <code>/etc/vimrc</code>,对所有用户生效。</p>
<p>接着我们就可以开始自定义自己的配置了</p>
<p>Vim配置都包含什么
编辑Vim配置文件,都可以设置什么
常用设置,比如<code>:set nu</code> 设置行号 <code>:colorscheme hybrid </code>设置主题
常用的vim映射,vim中的映射比较复杂,源于vim有多种模式
自定义的vimscript函数和插件的配置</p>
<h3>常用设置</h3>
<p>我们可以把常用到的设置写到.vimrc里避免每次打开vim重新设置。</p>
<p>比如上面的<code>:set nu</code> <code>:colorscheme hybrid </code>等,Vim里有非常多的这种配置,可以自己加入一些常见的设置选项看看效果.</p>
<p>不熟悉的情况下也可以做拿来主义,多去参考一下別人的配置看看那些对自己有用(不建议直接整个配置文件的复制拿来用,刚起步有些东西还搞不懂,而且遇到报错也解决不下,只会更糟心)。
这里推荐一篇 <a href=“http://www.ruanyifeng.com/blog/2018/09/vimrc.html” title=“Vim配置入门”>Vim配置入门</a>,介绍了配置基础知识和部分基础配置。</p>
<h3>Vim映射</h3>
<p>什么是Vim映射?
Vim映射就是把[一个操作]映射到[另一个操作</p>
<p>如果你不满意现在的按键设置,比如vim本来的命令
或者你想映射一些方便的快捷键
按照你的意愿定制Vim。[当按下某些按键时,放弃你默认的操作,按照我的想法去做]</p>
<p>Vim中的映射比较复杂,源于 vim 有多种模式</p>
<p>设置一下 <code>leader</code> 键 <code>let mapleader="," </code>常用的是逗号或空格</p>
<p>比如用 <code>inoremap <leader>w <Esc>:w<cr></code> 在插入模式保存</p>
<p>Vim中的映射概念稍微复杂,但是非常强大。</p>
<h2>Vim 映射迷人眼</h2>
<h3>模式映射</h3>
<p>Vim 常用模式 <code>normal</code> / <code>visual</code> / <code>insert</code> 都可以定义映射
用 <code>nmap</code> / <code>vmap</code> / <code>imap</code>定义映射只在<code>normal</code> / <code>visual</code> / <code>insert</code>分别有效</p>
<h3>基本映射</h3>
<p>基本映射指的是normal模式下的映射</p>
<p>使用 <code>map</code> 就可以实现映射。</p>
<p>比如 <code>:map - x</code> 然后按 <code>-</code> 就会删除字符
<code>:map <space> viw</code> 告诉 vim 按下 <code>空格</code> 的时候选中整个单词
<code>:map <c-d> dd </code>可以使用 <code>ctrl+d</code>执行 <code>dd</code>删除一行</p>
<h3>visual模式映射</h3>
<p><code>:vmap \ U</code>把在 visual 模式下选中的文本大小(<code>u</code> / <code>U</code>转换大小写)</p>
<h3>insert模式映射</h3>
<p><code>:imap <c-d> <Esc>ddi</code> 在 insert 模式下删除一行后继续编辑模式</p>
<h3>现有映射的问题?</h3>
<p>定义了如下映射</p>
<pre><code class=“language-Bash”>:nmap - dd
:nmap \ -</code></pre>
<p>当你按下 <code></code> 时,Vim会解释其为 <code>-</code>。我们又映射了 <code>-</code>!Vim会继续解
析 <code>-</code> 为 <code>dd</code>,即宅会删除整行。(是不是有点类似于递归)</p>
<h3>递归与非递归映射</h3>
<p><code>*map</code>系列命令有递归的风险
如果你安装了一个插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效
想要保证插件映射没有冲突会非常痛苦
解决方案就是使用非递归映射</p>
<h3>非递归映射</h3>
<p>Vim提供了非递归映射,这些命令不会递归解释</p>
<p>使用 <code>*map</code> 对应的 <code>nnoremap</code> / <code>vnoremap</code> /<code> inoremap</code></p>
<p>何时使用递归映射(<code>*map</code>)?何时使用非递归映射呢?(<code>*nnoremap</code>)</p>
<p><strong>任何时候</strong>都应该使用非递归映射,拯救自己和插件作者</p>
<h2>Vim 安装插件,竟如此简单</h2>
<h3>什么是插件?</h3>
<p>和其他现代流行编辑器一样,Vim 同样支持强大的插件扩展</p>
<p>Vim 插件是使用 vimscript 或者其他语言编写的 vim 功能扩展
编辑器自带的功能有限,有了插件之后几乎可以无限制扩充其功能</p>
<h3>如何安装插件?</h3>
<p>原始的方式是直接clone 插件代码,如今 vim 有很多插件管理器</p>
<p>目前 Vim 有很多插件管理器可供选择,你可以选择一个顺手的</p>
<p>常见的有 <code>vim-plug</code>, <code>Vundle</code>, <code>Pathogen</code>, <code>Dein.Vim</code>, <code>volt </code>等</p>
<p>综合性能、易用性、文档等几个方面,这里推荐使用 <code>vim-plug</code></p>
<h3>使用vim-plug安装插件</h3>
<p>我们将使用 <code>vim-plug</code> 安装我们的第一个插件</p>
<p><a href=“https://github.com/junegunn/vim-plug”>https://github.com/junegunn/vim-plug</a></p>
<p>学习一个新东西的最好方式就是看官方的<a href=“https://github.com/mhinz/vim-startify/blob/master/README.md” title=“文档示例”>文档示例</a>
按照官方的教程,我们就可以非常容易地了解它的使用方式</p>
<p><strong> Unix下安装:</strong></p>
<pre><code class=“language-Bash”>curl -fLo ~/.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim</code></pre>
<p><code>vim ~/.vimrc</code> 文件末尾加入以下亮行配置来启用 <code>vim-plug</code></p>
<pre><code class=“language-Bash”>call plug#begin()
call plug#end()
</code></pre>
<h2>安装你的第一个插件</h2>
<p>我们将安装 vim-startify,一个好用的 vim 开屏插件</p>
<p><a href=“https://github.com/mhinz/vim-startify”>https://github.com/mhinz/vim-startify</a></p>
<p>修改你的.vimrc 文件,增加该插件名称</p>
<pre><code class=“language-Bash”>call plug#begin()
Plug 'mhinz/vim-startify'
call plug#end()
</code></pre>
<p>重新启动 <code>vim </code>或者 <code>:source ~/.vimrc</code>,执行 <code>:PlugInstall</code></p>
<p><img src=“http://assets.moshanghua.net/images/msh-1796-07.png” alt=“” /></p>
<p>使用 <code>:q</code> 退出安装界面(<code>:qa</code> 退出所有窗口),重启 Vim 你见过会神奇地发现插件生效了!</p>
<h2>如何寻找自己需要的插件</h2>
<h2>如何搜寻插件</h2>
<p>现有需求,后有插件。大部分插件托管在了 github 上,</p>
<p>寻找插件途径:</p>
<p>1.通过 google 搜索关键词寻找想要的插件</p>
<p>例如:</p>
<p>搜索文件管理相关的:vim file manager plugin</p>
<p>搜索编写 Python 的插件:vim python plugin github</p>
<p>2.<code>vim</code> 插件库:<a href=“https://vimawesome.com/”>https://vimawesome.com/</a></p>
<p>3.浏览网上开源的vim配置借鉴想要的插件</p>
<h2>vim美化插件,让你的 vim 与众不同</h2>
<h2>vim 美化插件</h2>
<p>更改 vim 的外观</p>
<p>修改启动界面:<a href=“https://github.com/mhinz/vim-startify”>https://github.com/mhinz/vim-startify</a></p>
<p>状态栏美化:<a href=“https://github.com/vim-airline/vim-airline”>https://github.com/vim-airline/vim-airline</a></p>
<p>增加代码缩进线条:<a href=“https://github.com/yggdroot/indentline”>https://github.com/yggdroot/indentline</a></p>
<p>主题美化:<a href=“https://github.com/dracula/vim”>https://github.com/dracula/vim</a></p>
<p><strong>注意:<code>dracula</code>主题启用要放在插件结束之后</strong></p>
<pre><code class=“language-Bash”>call plug#begin()
" vim 开屏插件
Plug 'mhinz/vim-startify'
" 状态栏美化插件
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" 代码缩进线条
Plug 'yggdroot/indentline'
" 主题
Plug 'dracula/vim'
call plug#end()
" 主题启用要放在插件结束之后
" 设置主题
colorscheme dracula</code></pre>
<h2>Vim文件目录和搜索插件,跳转文件so easy</h2>
<h3>文件管理器nerdtree</h3>
<p>使用nerdtree插件进行文件目录树管理</p>
<p><a href=“https://github.com/scrooloose/nerdtree”>https://github.com/scrooloose/nerdtree</a></p>
<p>安装</p>
<pre><code class=“language-Bash”>call plug#begin()
…
" nerdtree
Plug 'preservim/nerdtree'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件配置</p>
<pre><code class=“language-Bash”>" nerdtree
" 查找文件位置
nmnnoremap <leader>v :NERDTreeFind<cr>
" 打开关闭目录树
nnoremap <leader>g :NERDTreeToggle<cr>
" 显示隐藏文件
let NERDTreeShowHidden=1
" 隐藏文件
let NERDTreeIgnore = [
\ '.git
\ '.DS_Store
\ ]</code></pre>
<p>快捷键:</p>
<p>按 <code>,g</code> 可以快速打开关闭目录树</p>
<p>按 <code>,v</code> 光标快速移回目录树,定位到光标在移之前的文件名上,<code><ctrl>+w+p</code> 可以快速跳转过去打开的文件上</p>
<h3>快速搜索文件-模糊搜索器</h3>
<p>如果想快速根据文件名查找打开一个文件呢?
如果想快速查找并且打开一个文件可以用 ctrlp 插件</p>
<p><a href=“https://github.com/ctrlpvim/ctrlp.vim”>https://github.com/ctrlpvim/ctrlp.vim</a></p>
<p>安装</p>
<pre><code class=“language-Bash”>call plug#begin()
…
"ctrlp
Plug 'ctrlpvim/ctrlp.vim'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件配置</p>
<pre><code class=“language-Bash”>"ctrlp
let g:ctrlp_map = '<c-p>'</code></pre>
<p>更改默认映射调用 CtrlP 进行搜索:<code><ctrl>+p</code></p>
<h2>Vim快速定位插件,文件位置任我行</h2>
<h3>Vim移动命令</h3>
<p>在基础篇讲了很多 vim 中移动的命令</p>
<p>比如<code>w</code> / <code>e</code>基于单词移动,<code>gg</code> / <code>G</code>文件首尾,<code>0</code> / <code>$</code> 行首尾,<code>f{char}</code>查寻字符</p>
<p><code>ctrl+f</code> <code>ctrl+u </code>前后翻屏</p>
<p>那假如我想快速跳到当前窗口显示区的任意位置呢?</p>
<h3>如何移动到任意位置</h3>
<p>可以使用vim的搜索/加上n跳转,但是使用easymotion更方便</p>
<p><a href=“https://github.com/easymotion/vim-easymotion”>https://github.com/easymotion/vim-easymotion</a></p>
<p>安装</p>
<pre><code class=“language-Bash”>call plug#begin()
…
" easymotion
Plug 'easymotion/vim-easymotion'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件配置</p>
<p>官方文档比较长,其实一个映射就能应付</p>
<pre><code class=“language-Bash”>" easymotion
nmap ss <Plug>(easymotion-s2)</code></pre>
<p>使用 <code>ss</code> 调用搜索就可以在整个文件可视区域快速跳转到任意位置。</p>
<h2>Vim-surround,编辑也要成双成对</h2>
<h3>vim-surround</h3>
<p>如果快速让你更换一对单引号为双引号,你会怎么做?</p>
<p>一个一个查找然后替换,是不是比较低效?</p>
<p><a href=“https://github.com/tpope/vim-surround”>https://github.com/tpope/vim-surround</a></p>
<h3>安装</h3>
<pre><code class=“language-Bash”>call plug#begin()
…
" 快速更换成对的字符
Plug 'tpope/vim-surround'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<h3>插件使用</h3>
<p>normal 模式下增加,删除,修改成对内容</p>
<p>ds (delete a surrounding)
cs(change a surrounding)
ys (you add a surrounding)</p>
<p>给单词加引号,光标移动到要加入的单词上,可以依次按<code>ys</code> <code>iw</code> <code>"</code></p>
<pre><code class=“language-Bash”>Hello # ys iw "
"Hello"</code></pre>
<p>给单词的双引号改单引号,光标移动到要加入的单词上,可以依次按<code>cs</code> <code>"</code> <code>'</code></p>
<pre><code class=“language-Bash”>"Hello" # cs " '
'Hello'</code></pre>
<p>给单词的括号,光标移动到要加入的单词上,可以依次按<code>cs</code> <code>( </code> <code>]</code>,<strong>这里要更改的括号使用后面的反括号可以避免出现空格</strong></p>
<pre><code class=“language-Bash”>("Hello") # cs ( ]
["Hello"]</code></pre>
<p>删除成对的内容用 <code>ds</code>,删除 <code>"</code> 可以用 <code>ds</code> <code>"</code></p>
<pre><code class=“language-Bash”>["Hello"] # ds "
[Hello] #ds [
Hello
</code></pre>
<h2>强大的Vim模糊搜索与替换插件</h2>
<h3>模糊搜索</h3>
<p>我们经常需要在一个代码项目中模糊搜索一些文本,怎么办呢?</p>
<p>Vim 自带的搜索/可以搜索当前文件,但是项目有很多个文件</p>
<p>需要一个插件来模糊搜索多个文件内容</p>
<p>使用 Ag.vim 或者 fzf.vim 都可以很好地支持模糊搜索</p>
<h3>fzf与fzf.vim</h3>
<p>fzf是一个强大的命令行模糊搜索工具,fzf.vim集成到了 vim 里</p>
<p><a href=“https://github.com/junegunn/fzf.vim”>https://github.com/junegunn/fzf.vim</a></p>
<p><code>fzf.vim</code> 依赖于主 <code>fzf</code> 资源库的基本 <code>Vim</code> 插件,这意味着你需要在 <code>Vim</code> 上同时设置 <code>"fzf"</code> 和 <code>"fzf.vim"</code>。</p>
<p>安装<code>fzf</code></p>
<p>fzfgithub:<a href=“https://github.com/junegunn/fzf”>https://github.com/junegunn/fzf</a></p>
<p>使用 git 安装:</p>
<pre><code class=“language-Bash”>git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install</code></pre>
<p>安装<code>fzf.vim</code></p>
<pre><code class=“language-Bash”>call plug#begin()
…
" 模糊搜索工具
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件使用</p>
<p>使用 Ag [PATTERN] 模糊搜索字符串(也可以替代ctrlp 插件)
使用 Files [PATH] 模糊搜索目录</p>
<h3>搜索替换插件far.vim</h3>
<p>如果想要批量搜索替换,可以试试 far.vim</p>
<p><a href=“https://github.com/brooth/far.vim”>https://github.com/brooth/far.vim</a></p>
<p>安装</p>
<pre><code class=“language-Bash”>call plug#begin()
…
" 搜索替换插件
Plug 'brooth/far.vim'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件使用</p>
<pre><code class=“language-Bash”># 把 foo 替换成 bar,指定文件夹和目录 **/.py
:Far foo bar **/.py
确认替换
:Fardo
退出预览窗口
:q</code></pre>
<h2>Vim tagbar,更愉快地浏览代码</h2>
<h3>tagbar</h3>
<p>代码大纲,Vim 当然也有,而且支持非常多编程语言</p>
<p><a href=“https://github.com/majutsushi/tagbar”>https://github.com/majutsushi/tagbar</a></p>
<p>需要安装 Universal Ctags 生成对应的 tag 文件</p>
<p>依赖</p>
<p>文档:<a href=“https://docs.ctags.io/en/latest/”>https://docs.ctags.io/en/latest/</a></p>
<p>github:<a href=“https://github.com/universal-ctags/ctags”>https://github.com/universal-ctags/ctags</a></p>
<p>安装</p>
<p>Building with configure (*nix including GNU/Linux)</p>
<pre><code class=“language-Bash”>$ git clone https://github.com/universal-ctags/ctags.git
$ cd ctags
$ ./autogen.sh
$ ./configure --prefix=/where/you/want # defaults to /usr/local
$ make
$ make install # may require extra privileges depending on where to install</code></pre>
<p>Building on Mac OS</p>
<p>Building with Homebrew</p>
<pre><code class=“language-Bash”>brew tap universal-ctags/universal-ctags
brew install --HEAD universal-ctags</code></pre>
<p>安装tagbar</p>
<pre><code class=“language-Bash”>call plug#begin()
…
Plug 'preservim/tagbar'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件使用</p>
<pre><code class=“language-Bash”>" tagbar
nnoremap <leader>t :TagbarToggle<CR></code></pre>
<p>使用快捷键 <code>,t</code> 进行打开</p>
<h3>vim-interestingwords</h3>
<p>高亮你感兴趣的单词,浏览代码很有用</p>
<p><a href=“https://github.com/lfv89/vim-interestingwords”>https://github.com/lfv89/vim-interestingwords</a></p>
<p>浏览代码的时候经常需要知道一个变量的使用方式</p>
<p>我们可以使用这个插件同事高亮多个单词</p>
<p>安装tagbar</p>
<pre><code class=“language-Bash”>call plug#begin()
…
" 单词高亮
Plug 'lfv89/vim-interestingwords'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件使用</p>
<p>光标移动到要高亮的词上,用 <code>,k</code> 高亮显示 (小写k)
用 n 和 N 导航高亮显示的单词<br />
使用 <code>,K</code> 清除整个缓冲区中的所有高亮字词(大写K)</p>
<h2>Vim快速注释代码</h2>
<h3>vim-commentary</h3>
<p>vim 注释插件有很多,这里使用这个比较轻量</p>
<p><a href=“https://github.com/tpope/vim-commentary”>https://github.com/tpope/vim-commentary</a></p>
<p>记住常用的命令 gc 注释和取消注释</p>
<p>插件会根据不同的文件类型使用不同注释,python(#) golang(//)</p>
<h3>安装vim-commentary</h3>
<pre><code class=“language-Bash”>call plug#begin()
…
" 快速注释代码
Plug 'tpope/vim-commentary'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<h3>插件使用</h3>
<p>光标移动到要注释的行或者词上,按快捷键 <code>gc</code> 进行注释,有注释的按会解注释</p>
<h2>强大的 vim 代码补全插件</h2>
<h3>deoplete.nvim</h3>
<p>一个强大的 neovim/vim8 异步补全插件</p>
<p><a href=“https://github.com/shougo/deoplete.nvim”>https://github.com/shougo/deoplete.nvim</a></p>
<p>多编程语言的支持,支持模糊匹配</p>
<p>需要安装对应编程语言的扩展</p>
<p>安装deoplete</p>
<pre><code class=“language-Bash”>call plug#begin()
…
" 代码补全
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>插件配置</p>
<pre><code class=“language-Bash”>" deoplete
let g:deoplete#enable_at_startup = 1
set completeopt-=preview</code></pre>
<h3>coc.vim</h3>
<p>一个强大的 neovim/vim8 补全插件。LSP 支持</p>
<p><a href=“https://github.com/neoclide/coc.nvim”>https://github.com/neoclide/coc.nvim</a></p>
<p>full Language Server Protocol support as VSCode</p>
<p>多语言插件支持</p>
<h2>Vim代码格式化与静态检查</h2>
<h3>格式化与静态检查</h3>
<p>为什么需要这些工具呢?能让工具做的就不用让人去费心</p>
<p>把精力集中代码逻辑本身,而不是整理格式这些浪费精力的事情上</p>
<p>静态检查是为了让编写的代码更加规范。golint/pylint/eslint等</p>
<p>无论你编写何种编程语言,最好都加上自动格式化和静态检查</p>
<h3>Neoformat</h3>
<p>vim-autoformat 和 Neoformat 是两种使用较多的格式化插件</p>
<p><a href=“https://github.com/sbdchd/neoformat”>https://github.com/sbdchd/neoformat</a></p>
<p>需要安装对应语言的格式化库。python autopep8/js的prettier等</p>
<p>安装Neoformat</p>
<pre><code class=“language-Bash”>call plug#begin()
…
Plug 'sbdchd/neoformat'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>需要安装对应语言的格式化库,如:autopep8</p>
<pre><code class=“language-Bash”>pip install autopep8</code></pre>
<p>插件使用</p>
<p>输入命令 <code>:Neoformat</code> 后回车</p>
<h3>静态检查Lint</h3>
<p>neomake 和 ale 是两种常用的int 插件,这里我们选用 ale</p>
<p><a href=“https://github.com/wOrp/ale”>https://github.com/wOrp/ale</a></p>
<p>同样需要安装对应语言的 lint 库。比如eslint/pylint/golint等</p>
<p>vim8/neovim 支持异步检查,不会影响 vim 编辑,推荐使用</p>
<p>安装ale </p>
<pre><code class=“language-Bash”>call plug#begin()
…
Plug 'wOrp/ale'
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<p>需要安装对应语言的格式化库,如:pylint</p>
<pre><code class=“language-Bash”>pip install pylint</code></pre>
<h2>vim和git,强强联手</h2>
<h3>Fugitive</h3>
<p>在Vim 里使用 Git</p>
<p><a href=“https://github.com/tpope/vim-fugitive”>https://github.com/tpope/vim-fugitive</a></p>
<p>Gedit, Gdiff, Gblame, Gcommit 等</p>
<h3>vim-gitgutter</h3>
<p>在vim 里显示文件变动</p>
<p><a href=“https://github.com/airblade/vim-gitgutter”>https://github.com/airblade/vim-gitgutter</a></p>
<p>当我们修改文件之后可以显示当前文件的变动</p>
<p>哪些行新增,哪些行修改了,哪些行删除了</p>
<h3>gv.vim</h3>
<p>如何在命令行查看提交记录呢?有个命令行工具叫做 tig</p>
<p><a href=“https://github.com/junegunn/gv.vim”>https://github.com/junegunn/gv.vim</a></p>
<p>使用:GV 命令调用</p>
<p>可以浏览代码提交变更</p>
<h2>愉快写 golang 之vim-go插件</h2>
<p>功能强大的 golang 插件 vim-go</p>
<p><a href=“https://github.com/fatih/vim-go”>https://github.com/fatih/vim-go</a></p>
<p>代码补全,重构,跳转,自动格式化,自动导入等功能</p>
<p>安装vim-go</p>
<pre><code class=“language-Bash”>call plug#begin()
…
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<h2>python-mode把 vim 打造成轻量 Python IDE</h2>
<p>Python 插件使用比较多的是 jedi-vim 和 python-mode</p>
<p><a href=“https://github.com/python-mode/python-mode”>https:/github.com/python-mode/python-mode</a></p>
<p>python-mode同样具备基本的补全、跳转、重构、格式化功能</p>
<p>即使是在服务器上也能愉快调试 python 代码了</p>
<p>安装python-mode</p>
<pre><code class=“language-Bash”>call plug#begin()
…
Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }
call plug#end()</code></pre>
<p>重新加载一下<code>:source ~/.vimrc</code>,然后安装 <code>:PlugInstall</code></p>
<h2>Vim和Tmux,天作之合</h2>
<p>强大的终端复用工具。通过 brew(mac) apt-get(ubuntu)安装</p>
<p>可以复用终端、分屏、托管进程等</p>
<p>在服务器上即使退出服务器也不会被kill,托管进程也很方便</p>
<p>可以方便地分割屏幕实现多个进程公用屏幕</p>
<h2>5-4 站在巨人的肩膀上,使用强大的开源配置</h2>
<p>开箱即用</p>
<p>如果你已经熟悉了 vim 配置,可以从网上直接使用一些开源配置</p>
<p><a href=“https://github.com/SpaceVim/SpaceVim”>https://github.com/SpaceVim/SpaceVim</a></p>
<p><a href=“https://github.com/PegasusWang/vim-config”>https://github.com/PegasusWang</a></p>
<p>其他开源配置。不推荐新手直接使用,越复杂的配置上手成本越高</p>
