三、vim的基本使用和插件基础
一、vim简介
vim是一个文本编辑器,在Unix以及类Unix系统中广泛使用,与Emacs并列为两大类Unix操作系统编辑器。vim前身是vi编辑器,vim是vi的扩展。早期vim开发者只是为了完全复制vi以供自己使用,但后来vim被移植到Unix上,之后vim被加入了更多的功能。最后在版本的不断迭代以及更多开发者的使用,vim被很多人成为《编辑器之神》。而与他并列的另一款编辑器Emacs更是被称为《神之编辑器》。
不过,在没接触过vim的新手刚刚打开vim的时候肯定会觉得这个东西真难用。鼠标也点不了,编辑也不知道怎么编辑,退出也退出不了。这也是完全随即字符串笑话的由来。但是相信我,当你掌握了vim真正应该如何使用以后,你会爱上这种感觉的。到时候你只会觉得鼠标是累赘,多余的东西!
这是一张编辑器学习困难度的曲线图。不难看出,Notepad看起来并没有什么难度,pico也没什么亮点。Visual Studio也是一个循序渐进的过程。而最后的两个,vi/vim直接是天崩开局且稳定发挥没有任何起伏,Emacs则是让你先入个门然后再放大招。
二、入门
首先,我们这章是学习vim。所以首先的准备就是安装vim。vim在Windows和Linux下都可以安装,这里推荐在Linux下使用。如果条件允许可以尝试去手动编译安装一下,后续我们需要用到vim的python3支持。部分直接包安装的vim可能不会开启python相关支持。
在上一章中,简单提了以下vim的编译安装。给了一篇我先前写的比较潦草的安装教程,这里我们重新详细来说一下vim的编译安装。
1.1 编译安装vim
首先,在我们开始之前,你需要先安装 gcc、make、python、python3、git。 之后的相关依赖具体在预编译的时候再去根据情况安装。然后你需要下载vim源码。
下载源码:
git clone https://github.com/vim/vim.git
进入vim根目录后你可以大致看一下目录结构,也可以打开README.md查看一下基本介绍。这里我们可以先跑以下configure,看看在无参的情况下当前环境是否缺少依赖。通常应该是不会缺少的,vim的兼容性很高。
当然我们费这力气去下载源码编译安装可不是仅仅为了使用vim最新版本,我们还需要对configure传入一些参数以开启支持。
1 ./configure --with-features=huge \ --with-x \ 2 --enable-multibyte \ 3 --enable-rubyinterp=yes \ 4 --enable-python3interp=yes \ 5 --with-python3-config-dir=/usr/lib/python<version>/config-<version>-x86_64-linux-gnu \ 6 --with-python-config-dir=/usr/lib/python<version>/config-x86_64-linux-gnu \ 7 --enable-perlinterp=yes \ 8 --enable-luainterp=yes \ 9 --enable-gui=auto \ 10 --enable-cscope \ 11 --prefix=/usr/local
参数信息:
--with-features=huge:支持最大特性
--enable-rubyinterp:打开对 ruby 编写的插件的支持
--enable-pythoninterp:打开对 python 编写的插件的支持
--enable-python3interp:打开对 python3 编写的插件的支持
--enable-luainterp:打开对 lua 编写的插件的支持
--enable-perlinterp:打开对 perl 编写的插件的支持
--enable-multibyte:打开多字节支持,可以在 Vim 中输入中文
--enable-cscope:打开对cscope的支持
--enable-gui=auto 表示自动采用相应 gvim
--with-python-config-dir=/usr/lib/python<version>/config-x86_64-linux-gnu/ 指定 python 路径
--with-python3-config-dir=/usr/lib/python<version>/config-<version>m-x86_64-linux-gnu/ 指定 python3路径
--prefix=/usr/local/vim:指定将要安装到的路径 # 这里我没有用prefix参数,采用的是默认的安装路径,你可以根据你的需要选择。
先不要着急直接复制去跑,此处你需要注意 python的路径。你需要把<version>改成你的版本号,版本号可能会因为更新或者发行版不同等等不一样。
可以看到我这里的路径上版本号是2.7和3.12,将版本号修改后再跑一边带参数的configure。
如果报了以上错误,看最后一条报错,已经告诉你怎么处理了。这里是因为之前空参编译过一次,这里又有参编译,与之前的有差异。所以需要使用交叉编译继续,我们只需要把之前的预编译结果删除就可以正常编译了 <- run `make distclean` and\or `rm auto/config.cache` ->
预编译完成,没有报错。可以直接编译安装了!(编译安装时候可能需要sudo权限)
安装完成后再输出一边version 可以看到已经支持python3
1.2 vim基本知识
现在我们可以打开vim,打开后可以看到到一个vim的基本信息并且给我们列出了可执行的一些操作。
- type :q <Enter> to exit 输入 :q <回车> 退出vim
- type :help <Enter> or <F1> for on-line help 输入 :help<回车> 或 <F1> 跳转帮助文档
- type :help version9<Enter> for version info 输入 :help version9<回车> 查看vim9版本信息
在开始使用vim之前,我们需要了解一些vim的基本知识和概念。在vim中,通常分为四种模式。命令模式(Command Mode)、输入模式(Inster Mode)、命令行模式(Command-Line Mode)、可视模式(Visual Mode)。各个教材或者教程中根据性质的不同称呼或分类略有不同。
当我们直接进入vim或者打开文件的时候就已经进入了命令模式,在这个模式下你会发现无法输入文本。你需要按 i 来进入输入模式,也叫插入模式。此时你输入的 i 并不是输入了一个 i 而是一个指令,输入后你可以开始输入文本。按Esc可以退出输入模式,回到命令模式。命令模式的指令几乎布满整个键盘,所有的键都有它自己的用处。
当你在命令模式的时候输入 : 就可以进入命令行模式。命令行模式的命令显示在最下方,当你进入的时候最下方会成为一个输入框,以供你输入命令。例如上面的 :help 实际上就是的操作就是进入命令行并执行了一个help命令,help命令用来打开帮助文档。在命令行模式下你可以输入一些命令来做保存退出等操作,加上插件还可以做更多操作。
1.3 vim的基本使用
我们学习任何的一个东西,首先考虑的便是帮助文档,这里我们采用一个vim的官方中文教程来学习如何使用vim,这个教程结束后你可以简单的使用vim。将vim完全当作一个编辑器来使用。现在退出vim,回到终端界面,尝试输入vimtutor进入vim的中文教程。如果无法运行的话尝试先运行下面两条命令来创建一个vimtutor副本
下载vimtutor:
https://github.com/HanielF/VimTutor.git
创建副本:
cd VimTutor && vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor' -c 'w! vimtutor_copy' -c 'q';ls -l
现在我们进入教程
可以看到这是一个1.7的教程版本,完成教程的时间大概在30分钟左右。
第一节和第二节讲的是光标的移动和vim的推出,根据教程来实操就行。
第三节是文本的删除,用x删除单个字符来将原本的病句删除为正确的句子 <- the cow jumped the moon -> 并且在此节的末尾有一句很重要的话:不要强行记忆,记住一点:在使用中学习! 这句话其实应该贯彻我们的整个合集当中。任何的命令以及操作等,不要去强行记忆,一边使用一边学习。强行记忆做不到太好的效果,在实践中才能更好的提高。
第四五六节也是很简单的一些操作,跟着教程走就可以了。第一讲就结束了,到这里其实已经可以说你已经基本会vim了。可以进行简单的文本操作,可以保存可以退出。但是会这一点的操作对于vim来说只是冰山一角,所以建议应当做完教程的全部。当你做完整个教程后,那么你就是真的基本掌握vim的基本使用。
三、一个小进阶
3.1 基本配置
vim在启动的时候会加载一个 .vimrc 的文件,这个文件相信大家在上一部分的教程中已经有所接触了。不过可能最后的配置并没有把vimrc_exampl.vim复制出来,这是因为我们是编译安装的vim。且是最新版,如果你的是以前的版本或者通过包管理器安装的版本那么应该是可以复制出来的,这里我放一个vim8的vimrc_example.vim
" An example for a vimrc file. " " Maintainer: Bram Moolenaar <Bram@vim.org> " Last change: 2019 Dec 17 " " To use it, copy it to " for Unix: ~/.vimrc " for Amiga: s:.vimrc " for MS-Windows: $VIM\_vimrc " for Haiku: ~/config/settings/vim/vimrc " for OpenVMS: sys$login:.vimrc " When started as "evim", evim.vim will already have done these settings, bail " out. if v:progname =~? "evim" finish endif " Get the defaults that most users want. source $VIMRUNTIME/defaults.vim if has("vms") set nobackup " do not keep a backup file, use versions instead else set backup " keep a backup file (restore to previous version) if has('persistent_undo') set undofile " keep an undo file (undo changes after closing) endif endif if &t_Co > 2 || has("gui_running") " Switch on highlighting the last used search pattern. set hlsearch endif " Put these in an autocmd group, so that we can delete them easily. augroup vimrcEx au! " For all text files set 'textwidth' to 78 characters. autocmd FileType text setlocal textwidth=78 augroup END " Add optional packages. " " The matchit plugin makes the % command work better, but it is not backwards " compatible. " The ! means the package won't be loaded right away but when plugins are " loaded during initialization. if has('syntax') && has('eval') packadd! matchit endif
这个文件里 " 开头的是注释," 开头的行是不会被加载的,其他的是一些简单配置。你可以尝试把这个复制到你的 .vimrc当中再次打开vim尝试编辑一些东西看看有什么变化。可能你并不太能感受到有什么变化,这不要紧。我们这里并不打算使用这个配置文件,回到你的home把 .vimrc当中的内容清除,我会提供一份我的没有插件配置的基本配置。通用于所有vim版本。
我的 .vimrc:
set number set relativenumber set cursorline set textwidth=120 " 行宽,一行显示多少字符 set wrap set linebreak set wrapmargin=2 set showmode set showcmd set encoding=utf-8 set t_Co=256 set autoindent set tabstop=4 set shiftwidth=4 set expandtab set softtabstop=2 set laststatus=2 set ruler set showmatch set hlsearch set incsearch set backup set undofile set backupdir=~/.vim/.backup/ set directory=~/.vim/.swp/ set undodir=~/.vim.undo/ set autochdir " set visualbell set history=5000 set autoread set listchars=tab:»■,trail:■ set list set wildmenu set wildmode=longest:list,full filetype indent on syntax on set nocompatible set backspace=indent,eol,start
很简单,做是做了一些简单的set。由于配置较多,我们挑几个比较关键或者说比较常用的几个来说。
- set number 显示行号
- set encoding=utf-8 采用utf-8编码
- set tabstop=4 tab宽度键采用四个空格(默认为8个)
- set backup 启用备份
- set undofile 启用撤销记录
- set backupdir=~/.vim/.backup/ 设置备份文件位置
- set undodir=~/.vim/.undo/ 设置undofile文件位置
- set dircetory=~/.vim/.swp/ 设置缓存文件位置
其他的配置可以去百度或者帮助文档查看具体作用。vimrc的基本语法其实很简单,就是set 然后你想要的操作就可以,单个双引号是注释,vim不会加载。
3.2 插件
插件是一个让vim百花齐放的操作,拥有插件的vim可以做绝大部分的编辑操作,包括编程等。现在你已经可以完成vim编辑的大部分操作,如果不用来写代码的话你的vim知识已经是完全够用了。但是如果你开始接触vim了那么你对vim的探索绝对不会止步于此。插件部分因为过于复杂,所以不细讲,也不去深究,需要你自己去探索。
目前有很多款vim的插件管理器,我用的是vim-plug,对于安装插件非常方便,大多数插件也支持vim-plug的安装。
安装vim-plug:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
vim-plug 安装插件也非常简单,只需要在vimrc文件中加入以下代码
call plug#begin() " List your plugins here Plug 'tpope/vim-sensible' call plug#end()
这里开头和结尾的两个call是这段代码的头尾,要安装插件只需要在这两段之间输入你要安装的插件即可。这里的这个例子里安装了一个叫tpope/vim-sensible的插件,这算是一个起步配置文件,他可以为你配置语法高亮等等设置,避免去一步一步配置而产生的麻烦。在vimrc中添加完字段后需要打开vim,在命令行模式下跑一个PlugInstall 的命令来安装,跑了之后vim-plug会自动安装相应插件。对于插件的配置不同你可能需要去查阅各个插件的相关文档。
PlugInstall
到此,你已经入门vim,后续你可以通过更多其他文章或者官方文档了解更多vim以及vim插件相关并完善你自己的vim配置。
最后给大家看一下我的vim配置下可以产生什么样的效果:
很长时间没写码了,所以一个很简单的示范,可以看到在插件加持下vim使用起来与IDE基本无异。