编写Vim配置,我的Vim我做主

2019/8/29 23:51:00Chixm83 阅读0 点赞0 评论

编写 vim 配置,我的 vim 我做主

本教程基于慕课网视频教程玩转 Vim 从放弃到爱不释手进行记录的第二篇插件篇。 第一篇链接:初始 VIM 篇

什么是Vim配置

什么是Vim的配置,为什么要使用它?

Vim里非常多常用的设置,比如:set number设置行号

Vim里临时设置,没法持久化,每次设置很烦

Vim提供了一种持久化配置的方式,让我们自定义配置

如何编写Vim配置文件

如何编写自己的Vim配置文件呢? Linux/Unix下新建一个隐藏文件.vimrc。 或使用Vim直接打开vim ~/.vimrc进行编写然后保存。 这里的~/.vimrc文件表示用户个人的配置,只对当前用户生效。 另外,Vim 的全局配置一般在/etc/vim/vimrc或者/etc/vimrc,对所有用户生效。

接着我们就可以开始自定义自己的配置了

Vim配置都包含什么

编辑Vim配置文件,都可以设置什么

常用设置,比如:set nu设置行号:colorscheme hybrid 设置主题

常用的vim映射,vim中的映射比较复杂,源于vim有多种模式

自定义的vimscript函数和插件的配置

常用设置

我们可以把常用到的设置写到.vimrc里避免每次打开vim重新设置。

比如上面的:set nu``:colorscheme hybrid 等,Vim里有非常多的这种配置,可以自己加入一些常见的设置选项看看效果.

不熟悉的情况下也可以做拿来主义,多去参考一下別人的配置看看那些对自己有用(不建议直接整个配置文件的复制拿来用,刚起步有些东西还搞不懂,而且遇到报错也解决不下,只会更糟心)。 这里推荐一篇Vim配置入门,介绍了配置基础知识和部分基础配置。

Vim映射

什么是Vim映射?

Vim映射就是把[一个操作]映射到[另一个操作

如果你不满意现在的按键设置,比如vim本来的命令

或者你想映射一些方便的快捷键

按照你的意愿定制Vim。[当按下某些按键时,放弃你默认的操作,按照我的想法去做]

Vim中的映射比较复杂,源于 vim 有多种模式

设置一下leaderlet mapleader="," 常用的是逗号或空格

比如用inoremap <leader>w <Esc>:w<cr> 在插入模式保存

Vim中的映射概念稍微复杂,但是非常强大。

Vim 映射迷人眼

模式映射

Vim 常用模式normal/visual/insert都可以定义映射 用nmap/vmap/imap定义映射只在normal/visual/insert分别有效

基本映射

基本映射指的是normal模式下的映射

使用map 就可以实现映射。

比如:map - x然后按-就会删除字符:map <space> viw告诉 vim 按下空格的时候选中整个单词:map <c-d> dd 可以使用ctrl+d执行dd删除一行

visual模式映射

:vmap \ U把在 visual 模式下选中的文本大小(u/U转换大小写)

insert模式映射

:imap <c-d> <Esc>ddi 在 insert 模式下删除一行后继续编辑模式

现有映射的问题?

定义了如下映射

BASH
:nmap - dd
:nmap \ -

当你按下``时,Vim会解释其为-。我们又映射了-!Vim会继续解 析-dd,即宅会删除整行。(是不是有点类似于递归)

递归与非递归映射

*map系列命令有递归的风险

如果你安装了一个插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效

想要保证插件映射没有冲突会非常痛苦

解决方案就是使用非递归映射

非递归映射

Vim提供了非递归映射,这些命令不会递归解释

使用*map对应的nnoremap/vnoremap/ inoremap

何时使用递归映射(*map)?何时使用非递归映射呢?(*nnoremap

任何时候都应该使用非递归映射,拯救自己和插件作者

Vim 安装插件,竟如此简单

什么是插件?

和其他现代流行编辑器一样,Vim 同样支持强大的插件扩展

Vim 插件是使用 vimscript 或者其他语言编写的 vim 功能扩展

编辑器自带的功能有限,有了插件之后几乎可以无限制扩充其功能

如何安装插件?

原始的方式是直接clone 插件代码,如今 vim 有很多插件管理器

目前 Vim 有很多插件管理器可供选择,你可以选择一个顺手的

常见的有vim-plug,Vundle,Pathogen,Dein.Vim,volt

综合性能、易用性、文档等几个方面,这里推荐使用vim-plug

使用vim-plug安装插件

我们将使用vim-plug 安装我们的第一个插件

https://github.com/junegunn/vim-plug

学习一个新东西的最好方式就是看官方的文档示例

按照官方的教程,我们就可以非常容易地了解它的使用方式

Unix下安装:

BASH
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

vim ~/.vimrc文件末尾加入以下亮行配置来启用vim-plug

BASH
call plug#begin()
call plug#end()

安装你的第一个插件

我们将安装 vim-startify,一个好用的 vim 开屏插件

https://github.com/mhinz/vim-startify

修改你的.vimrc 文件,增加该插件名称

BASH
call plug#begin()
Plug 'mhinz/vim-startify'
call plug#end()

重新启动vim 或者:source ~/.vimrc,执行:PlugInstall

使用:q退出安装界面(:qa 退出所有窗口),重启 Vim 你见过会神奇地发现插件生效了!

如何寻找自己需要的插件

如何搜寻插件

现有需求,后有插件。大部分插件托管在了 github 上,

寻找插件途径:

1.通过 google 搜索关键词寻找想要的插件

例如:

搜索文件管理相关的:vim file manager plugin

搜索编写 Python 的插件:vim python plugin github

2.vim插件库:https://vimawesome.com/

3.浏览网上开源的vim配置借鉴想要的插件

vim美化插件,让你的 vim 与众不同

vim 美化插件

更改 vim 的外观

修改启动界面:https://github.com/mhinz/vim-startify

状态栏美化:https://github.com/vim-airline/vim-airline

增加代码缩进线条:https://github.com/yggdroot/indentline

主题美化:https://github.com/dracula/vim

**注意:****dracula**主题启用要放在插件结束之后

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

Vim文件目录和搜索插件,跳转文件so easy

文件管理器nerdtree

使用nerdtree插件进行文件目录树管理

https://github.com/scrooloose/nerdtree

安装

BASH
call plug#begin()
......
" nerdtree
Plug 'preservim/nerdtree'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件配置

BASH
" nerdtree
" 查找文件位置
nmnnoremap <leader>v :NERDTreeFind<cr>
" 打开关闭目录树
nnoremap <leader>g :NERDTreeToggle<cr>
" 显示隐藏文件
let NERDTreeShowHidden=1
" 隐藏文件
let NERDTreeIgnore = [
            \ '.git$', '.hg$', '.svn$', '.stversions$', '.pyc$', '.pyo$', '.svn$', '.swp$',
            \ '.DS_Store$', '.sass-cache$', '__pycache__$', '.egg-info$', '.ropeproject$',
            \ ]

快捷键:

,g 可以快速打开关闭目录树

,v光标快速移回目录树,定位到光标在移之前的文件名上,<ctrl>+w+p 可以快速跳转过去打开的文件上

快速搜索文件-模糊搜索器

如果想快速根据文件名查找打开一个文件呢?

如果想快速查找并且打开一个文件可以用 ctrlp 插件

https://github.com/ctrlpvim/ctrlp.vim

安装

BASH
call plug#begin()
......
"ctrlp
Plug 'ctrlpvim/ctrlp.vim'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件配置

BASH
"ctrlp
let g:ctrlp_map = '<c-p>'

更改默认映射调用 CtrlP 进行搜索:<ctrl>+p

Vim快速定位插件,文件位置任我行

Vim移动命令

在基础篇讲了很多 vim 中移动的命令

比如w/e基于单词移动,gg/G文件首尾,0/行首尾,f{char}查寻字符

ctrl+f ctrl+u 前后翻屏

那假如我想快速跳到当前窗口显示区的任意位置呢?

如何移动到任意位置

可以使用vim的搜索/加上n跳转,但是使用easymotion更方便

https://github.com/easymotion/vim-easymotion

安装

BASH
call plug#begin()
......
" easymotion
Plug 'easymotion/vim-easymotion'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件配置

官方文档比较长,其实一个映射就能应付

BASH
" easymotion
nmap ss <Plug>(easymotion-s2)

使用ss 调用搜索就可以在整个文件可视区域快速跳转到任意位置。

Vim-surround,编辑也要成双成对

vim-surround

如果快速让你更换一对单引号为双引号,你会怎么做?

一个一个查找然后替换,是不是比较低效?

https://github.com/tpope/vim-surround

安装

BASH
call plug#begin()
......
" 快速更换成对的字符
Plug 'tpope/vim-surround'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件使用

normal 模式下增加,删除,修改成对内容

ds (delete a surrounding)

cs(change a surrounding)

ys (you add a surrounding)

给单词加引号,光标移动到要加入的单词上,可以依次按ys iw "

BASH
Hello  # ys iw "
"Hello"

给单词的双引号改单引号,光标移动到要加入的单词上,可以依次按cs " '

BASH
"Hello"  # cs " '
'Hello'

给单词的括号,光标移动到要加入的单词上,可以依次按cs ( ]这里要更改的括号使用后面的反括号可以避免出现空格

BASH
("Hello") # cs ( ]
["Hello"]

删除成对的内容用ds,删除"可以用ds "

BASH
["Hello"] # ds "
[Hello] #ds [
Hello

强大的Vim模糊搜索与替换插件

模糊搜索

我们经常需要在一个代码项目中模糊搜索一些文本,怎么办呢?

Vim 自带的搜索/可以搜索当前文件,但是项目有很多个文件

需要一个插件来模糊搜索多个文件内容

使用 Ag.vim 或者 fzf.vim 都可以很好地支持模糊搜索

fzf与fzf.vim

fzf是一个强大的命令行模糊搜索工具,fzf.vim集成到了 vim 里

https://github.com/junegunn/fzf.vim

fzf.vim依赖于主fzf资源库的基本Vim插件,这意味着你需要在Vim上同时设置"fzf""fzf.vim"

安装fzf

fzfgithub:https://github.com/junegunn/fzf

使用 git 安装:

BASH
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

安装fzf.vim

BASH
call plug#begin()
......
" 模糊搜索工具
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件使用

使用 Ag [PATTERN] 模糊搜索字符串(也可以替代ctrlp 插件)

使用 Files [PATH] 模糊搜索目录

搜索替换插件far.vim

如果想要批量搜索替换,可以试试 far.vim

https://github.com/brooth/far.vim

安装

BASH
call plug#begin()
......
" 搜索替换插件
Plug 'brooth/far.vim'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件使用

BASH
# 把 foo 替换成 bar,指定文件夹和目录 **/*.py
:Far foo bar **/*.py
# 确认替换
:Fardo
# 退出预览窗口
:q

Vim tagbar,更愉快地浏览代码

tagbar

代码大纲,Vim 当然也有,而且支持非常多编程语言

https://github.com/majutsushi/tagbar

需要安装 Universal Ctags 生成对应的 tag 文件

依赖

文档:https://docs.ctags.io/en/latest/

github:https://github.com/universal-ctags/ctags

安装

Building with configure (*nix including GNU/Linux)

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

Building on Mac OS

Building with Homebrew

BASH
brew tap universal-ctags/universal-ctags
brew install --HEAD universal-ctags

安装tagbar

BASH
call plug#begin()
......
Plug 'preservim/tagbar'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件使用

BASH
" tagbar
nnoremap <leader>t :TagbarToggle<CR>

使用快捷键,t 进行打开

vim-interestingwords

高亮你感兴趣的单词,浏览代码很有用

https://github.com/lfv89/vim-interestingwords

浏览代码的时候经常需要知道一个变量的使用方式

我们可以使用这个插件同事高亮多个单词

安装tagbar

BASH
call plug#begin()
......
" 单词高亮
Plug 'lfv89/vim-interestingwords'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件使用

光标移动到要高亮的词上,用,k高亮显示 (小写k) 用 n 和 N 导航高亮显示的单词 使用,K 清除整个缓冲区中的所有高亮字词(大写K)

Vim快速注释代码

vim-commentary

vim 注释插件有很多,这里使用这个比较轻量

https://github.com/tpope/vim-commentary

记住常用的命令 gc 注释和取消注释

插件会根据不同的文件类型使用不同注释,python(#) golang(//)

安装vim-commentary

BASH
call plug#begin()
......
" 快速注释代码
Plug 'tpope/vim-commentary'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件使用

光标移动到要注释的行或者词上,按快捷键gc 进行注释,有注释的按会解注释

强大的 vim 代码补全插件

deoplete.nvim

一个强大的 neovim/vim8 异步补全插件

https://github.com/shougo/deoplete.nvim

多编程语言的支持,支持模糊匹配

需要安装对应编程语言的扩展

安装deoplete

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()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

插件配置

BASH
" deoplete
let g:deoplete#enable_at_startup = 1
set completeopt-=preview

coc.vim

一个强大的 neovim/vim8 补全插件。LSP 支持

https://github.com/neoclide/coc.nvim

full Language Server Protocol support as VSCode

多语言插件支持

Vim代码格式化与静态检查

格式化与静态检查

为什么需要这些工具呢?能让工具做的就不用让人去费心

把精力集中代码逻辑本身,而不是整理格式这些浪费精力的事情上

静态检查是为了让编写的代码更加规范。golint/pylint/eslint等

无论你编写何种编程语言,最好都加上自动格式化和静态检查

Neoformat

vim-autoformat 和 Neoformat 是两种使用较多的格式化插件

https://github.com/sbdchd/neoformat

需要安装对应语言的格式化库。python autopep8/js的prettier等

安装Neoformat

BASH
call plug#begin()
......
Plug 'sbdchd/neoformat'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

需要安装对应语言的格式化库,如:autopep8

BASH
pip install autopep8

插件使用

输入命令:Neoformat 后回车

静态检查Lint

neomake 和 ale 是两种常用的int 插件,这里我们选用 ale

https://github.com/wOrp/ale

同样需要安装对应语言的 lint 库。比如eslint/pylint/golint等

vim8/neovim 支持异步检查,不会影响 vim 编辑,推荐使用

安装ale

BASH
call plug#begin()
......
Plug 'wOrp/ale'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

需要安装对应语言的格式化库,如:pylint

BASH
pip install pylint

vim和git,强强联手

Fugitive

在Vim 里使用 Git

https://github.com/tpope/vim-fugitive

Gedit, Gdiff, Gblame, Gcommit 等

vim-gitgutter

在vim 里显示文件变动

https://github.com/airblade/vim-gitgutter

当我们修改文件之后可以显示当前文件的变动

哪些行新增,哪些行修改了,哪些行删除了

gv.vim

如何在命令行查看提交记录呢?有个命令行工具叫做 tig

https://github.com/junegunn/gv.vim

使用:GV 命令调用

可以浏览代码提交变更

愉快写 golang 之vim-go插件

功能强大的 golang 插件 vim-go

https://github.com/fatih/vim-go

代码补全,重构,跳转,自动格式化,自动导入等功能

安装vim-go

BASH
call plug#begin()
......
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

python-mode把 vim 打造成轻量 Python IDE

Python 插件使用比较多的是 jedi-vim 和 python-mode

https:/github.com/python-mode/python-mode

python-mode同样具备基本的补全、跳转、重构、格式化功能

即使是在服务器上也能愉快调试 python 代码了

安装python-mode

BASH
call plug#begin()
......
Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }
call plug#end()

重新加载一下:source ~/.vimrc,然后安装:PlugInstall

Vim和Tmux,天作之合

强大的终端复用工具。通过 brew(mac) apt-get(ubuntu)安装

可以复用终端、分屏、托管进程等

在服务器上即使退出服务器也不会被kill,托管进程也很方便

可以方便地分割屏幕实现多个进程公用屏幕

5-4 站在巨人的肩膀上,使用强大的开源配置

开箱即用

如果你已经熟悉了 vim 配置,可以从网上直接使用一些开源配置

https://github.com/SpaceVim/SpaceVim

https://github.com/PegasusWang

其他开源配置。不推荐新手直接使用,越复杂的配置上手成本越高

评论区