VIM

VIM入门

Posted by PYQ on December 21, 2021

Ⅰ. VIM概述

vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的notepad(记事本)编辑器。

Vim(Vi improved)是vi编辑器的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用。Vim有着悠久的历史。80 年代末,Bram Moolenaar在vi的基础上开发了Vim 1.0版本。

  • 1994年,Vim3.0中加入了里程碑式的多窗口编辑模式。
  • 1996年,Vim4.0中加入了图形化界面的版本。
  • 1998年,Vim5.0中加入了语法高亮的功能。

目前VIM最新的版本是8.1,VIM是按照VIM许可证发布的开源软件,这个协议兼容GPL。它的协议中包含一些慈善条款,建议用户向荷兰ICCF捐款,用于帮助乌干达的艾滋病患者。这也是为什么会在VIM启动时显示Help poor children in Uganda!的字样。

Linux通常都已经默认安装好了vi或vim文本编辑器,我们只需要通过vim命令就可以直接打开vim编辑器了,如下图所示。有些精简版的Linux操作系统,默认并没有安装vim编辑器(可能自带的是vi编辑器)。当我们在终端中输入vim命令时,系统会提示“command not found”。此时通过各发行版的包管理源进行下载即可,比如Ubuntu操作系统可通过命令sudo apt-get install vim

VIM启动界面

在打开VIM后可以通过输入:help查看其使用手册,中文版使用手册可参考Github中的user_manual-2.3.0.pdf。

Ⅱ. VIM的四种模式

VIM常用的有四个模式:

  • 正常模式 (Normal-mode)
  • 插入模式 (Insert-mode)
  • 命令模式 (Command-mode)
  • 可视模式 (Visual-mode)

也有教程翻译为只有三种模式,分别为命令模式、插入模式、末行模式,本文按照官方文档教程中的四种模式及命名进行学习。

2.1 正常模式

启动VIM后默认位于正常模式。正常模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是 vim 的功能键,而不会在文本中键入对应的字符。在这个模式下,我们可以通过键盘在文本中快速移动光标。不论是什么模式,按一下键就会切换到正常模式,命令模式或者可视模式下执行完操作以后,就会自动进入正常模式。

正常模式

2.2 插入模式

正常模式中按下或者会进入插入模式。该模式启动以后,就会进入编辑状态,通过键盘输入内容。

插入模式

2.3 命令模式

正常模式中,按下<:>键或者会进入命令模式。在命令模式中可以执行一些输入并执行一些VIM或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。

命令模式

2.4 可视模式

正常模式按下,可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。

可使模式

Ⅲ. VIM编辑器的使用

3.1 对文件的基本操作

(1) 使用VIM打开文件

1
vim file
  • 如果文件已存在,则直接打开
  • 如果文件不存在,则自动在该目录下创建一个新文件

(2) 使用VIM一次打开多个文件

1
vim file1 file2

此时默认显示第一个文件,在正常模式下输入:ls将显示打开的所有文件的序号和文件名。

image-20211220173337252

若需要切换文件,在正常模式下输入:bn(n即为文件序号)即可。

(3) 使用VIM一次性显示多个文件

在(2)中我们学习了如何使用VIM打开多个文件,但一次性只能显示一个文件。VIM可以实现分屏操作,有左右和上下两种分屏方式。

左右分屏,O后面的数字表示分几个屏

1
vim -O2 file1 fiel2

左右分屏

上下分屏,o后面的数字表示分几个屏

1
vim -o2 file1 file2

上下分屏

(4) VIM分屏后的操作

移动光标

+号表示同时按下

  • 把光标移到右边的屏中:+
  • 把光标移到左边的屏中:+
  • 把光标移到上边的屏中:+
  • 把光标移到下边的屏中:+
  • 把光标移到下一个屏中:+
  • 把光标移到上一个屏中:+ <p>

控制分屏尺寸

  • 减少当前窗口高度(对上下分屏才有用):+ <->(字体大小会发生变化)
  • 增加当前窗口高度(对上下分屏才有用):+ <+>(字体大小会发生变化)
  • 减少当前窗口宽度(对左右分屏才有用):+ <<>(按完ctrl w 后松开,同时按下shift <)
  • 增加当前窗口宽度(对左右分屏才有用):+ <>>(按完ctrl w 后松开,同时按下shift >)
  • 使所有窗口恢复均等:+ <=>

关闭分屏

  • 关闭除当前分屏外的其他分屏::only
  • 关闭所有分屏::qa

(5) VIM编辑器保存文件

在正常模式下输入命令:w,即可保存文件。

(6) VIM编辑器退出文件

在正常模式下输入命令:q,即可退出文件。

若想保存并退出文件,输入命令:wq即可,也可通过命令:x实现。

若想强制退出文件,输入命令:q!即可。

(7) VIM打开另一个文件

若想不退出文件再进入另一个文件,可通过命令:e file打开另一个文件。

(8) 恢复文件至上次保存的位置

在对文件进行编辑后,若想放弃对文件的修改,可通过命令:e!恢复文件至上次保存的位置。

(9) 文件另存为

若想将文件另存为可通过命令:saveas file,此时将在该目录下新生成文件。

3.2 正常模式下的操作

当我们打开VIM编辑器默认进入的即为正常模式,在正常模式下我们能进行的操作包括移动光标、复制、剪切、粘贴、撤销与恢复等。

(1) 移动光标

  • 移动光标到首行:gg
  • 移动光标到末行:G

(2) 翻屏

  • 向上翻屏:+,或
  • 向下翻屏:+,或
  • 向上翻半屏:+
  • 向下翻半屏:+

(3) 快速定位光标到指定行

行号+,如`150G`代表快速移动光标到第150行。

(4) 复制/粘贴

单行复制

复制光标所在那一行可通过命令yy

多行复制

从当前行开始复制指定的行数,如5yy表示复制5行。

粘贴

在想要粘贴的地方按下p键,复制的内容将粘贴在光标所在行的下一行,如果想粘贴在光标所在行之前,则使用P键。

(5) 剪切/删除

单行剪切/删除

当我们想要对一行进行剪切/删除时,可通过命令dd执行。dd严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。

多行剪切/删除

从当前行剪切/删除多行,如3dd表示剪切/删除多行。

剪切/删除所在行的内容,但是删除之后下一行不上移,可通过实现。

(6) 撤销/恢复

若想撤销之前的操作,可通过命令u实现。

若想取消撤销操作,可通过+完成操作。

3.3 命令模式下的操作

在正常模式下,使用:即可进入命令模式。在命令模式下,我们可以进行保存、退出、查找、替换等操作。部分命令已在3.1节讲解,此处不再赘述。

(1) 查找/搜索

在VIM编辑器中,若想搜索某个关键词,在正常模式下,通过命令/关键词,即可搜索当前行及以下的满足条件的结果,并且在第一个结果处高亮

在搜索结果中切换上/下一个结果:N/n (大写N代表上一个结果,小写n代表下一个结果)。

(2) 文本内容的替换

只替换光标所在这一行的第一个满足条件的结果(只能替换1次)

1
:s/要替换的关键词/替换后的关键词

替换光标所在这一行中的所有满足条件的结果(替换多次,只能替换一行)

1
:s/要替换的关键词/替换后的关键词/g	

针对整个文档中的所有行进行替换,只替换每一行中满足条件的第一个结果

1
:%s/要替换的关键词/替换后的关键词

针对整个文档中的所有关键词进行替换(只要满足条件就进行替换操作)

1
:%s/要替换的关键词/替换后的关键词/g

(3) 显示行号

若想在VIM编辑器中显示行号,可通过命令set numberset nu(只会生效一次,退出文档重新进入效果消失)。

显示行号

(4) 语法高亮

在查看与编辑代码文件时,想要出现idea或编辑器中语法高亮的效果可通过在正常模式下输入命令:syntax on

语法高亮

(5) set paste模式

在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加。原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内容作为用户的键盘输入来处理。导致在遇到换行符的时候,如果Vim开启了自动缩进,就会默认的把上一行缩进插入到下一行的开头,最终使代码变乱。 在粘贴数据之前,输入:set paste开启paste模式;粘贴完毕后,输入:set nopaste关闭paste模式。

3.4 编辑模式下的操作

在正常模式下通过按键即可进入编辑模式,编辑模式的作用比较简单,主要是实现对文件的内容进行编辑。

(1) 按键和按键

:insert缩写,代表在光标之前插入内容。

:append缩写,代表在光标之后插入内容。

3.5 可视模式下的操作

在正常模式下通过按键即可进入可视模式。

(1) 可视模式复制操作

  1. 在正常模式下按,进入可视模式。
  2. 使用方向键<↑> <↓> <←> <→>选择要复制的内容,然后按键进行复制(区别于正常模式下的`yy`)。
  3. 移动光标,停在需要粘贴的位置,按<p>键进行粘贴操作

(2) 为配置文件添加#多行注释

  1. 在正常模式下通过+,进入可视化区块模式(列模式)。
  2. 使用上下键选择需要注释的多行。
  3. 按下键盘==(大写)键==,进入插入模式。
  4. 输入#号注释符。
  5. 输入完成后,连续按两次Esc即可完成添加多行注释的过程。

(3) 为配置文件去除#多行注释

  1. 在正常模式下通过+,进入可视化区块模式(列模式)。
  2. 使用上下键选中需要移除的#号注释。
  3. 直接按键即可完成删除注释的操作。

Ⅳ. 让你的VIM编辑器更高效

3.3节中我们提到可通过设置显示行号和语法高亮使得编辑和查看更加高效,但通过在命令模式输入命令只能单次生效。为使修改永久生效,我们可以编辑vim的配置文件进行修改。

1
vim ~/.vimrc

网络上拥有很多已经配置好的配置文件,可直接在Github中搜索.vimrc寻找适合自己的配置文件。

image-20211220222320939

下面给出一种参考方案:

首先安装vim插件管理工具vim-plug,Vim-plug是一个自由、开源、速度非常快的、极简的vim插件管理器。它可以并行地安装或更新插件。你还可以回滚更新。它创建浅层克隆shallow clone最小化磁盘空间使用和下载时间。它支持按需加载插件以加快启动时间。其他值得注意的特性是支持分支/标签/提交、post-update 钩子、支持外部管理的插件等。

安装和使用起来非常容易,你只需打开终端并运行以下命令:

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

安装完成后,修改配置文件,一个参考的.vimrc配置文件,如果想切换hybrid主题,只需修改下列配置文件中的colorscheme hybrid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
" 设置行号
set number

"代码高亮
syntax on

"开启光标下划线
set cursorline

"将前缀键定义为逗号
let mapleader=','
let g:mapleader=','

"使用jj进入正常模式
inoremap jj <ESC>

"使用leader+w直接保存
inoremap <leader>w <Esc>:w<cr>

"use ctrl+h/j/k/l switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l

"command模式下格式化json字符串
com! FormatJSON %!python3 -m json.tool

"安装插件
call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'rakr/vim-one'
Plug 'yggdroot/indentline'
Plug 'w0ng/vim-hybrid'
call plug#end()

"设置主题
colorscheme one
let g:one_allow_italics = 1
set background=dark

立即启动生效。

1
source ~/.vimrc

打开vim编辑器,在正常模式下输入命令:PlugInstall下载插件即可。若提示命令不存在,请输入如下命令,或重新下载vim-plug。

1
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/plugin/Vundle.vim

效果展示。

one主题。

one主题

one主题

hybrid主题。

hybrid主题

hybrid主题

配合oh my tmux使用。

image-20211221165122267

如果想要安装更多插件可以在vimawsome网站中搜索,该网站提供了教程以及效果展示。