介绍

Vim 在大多数的 Linux 发型版本中都是默认安装好的,无需再手动进行安装。

查看是否已经安装的命令:rpm -qa | grep vim

CentOS下安装,直接运行 yun install vim 即可安装最新版本的 Vim

命令行输入 vimtutor即可进入长文本进行练习

Vim 一共有三种常用模式:

  • 普通模式
  • 插入模式
  • 命令行模式

    键盘图与工作模式切换


普通模式

移动光标

键名 作用
h 光标左移
j 光标下移
k 光标上移
l 光标右移

除了单独的移动光标之外,我们还可以利用 Vim 的组合思想 —— 数字前缀组合来移动多行,具体细节会在相应章节细说。

组合键 作用
2+j 向下移动两行
5+h 向左移动五个字符=
  • 还有针对更加丰富粒度的词组法:
    快捷键 含义 速记
    w/W 正向移动到下一个词首 word
    b/B 反向移动到上一个词首 back
    e/E 正向移动到下一个词尾 word end
    ge 反向移动到上一个词尾

转跳

有时我们使用 Vim 打开某一个文件时只需要阅读某一特定位置就行,这个时候可以使用 Vim 的跳转快捷键来帮我们快速的定位需要阅读的位置:

Vim 跳转快捷方式:

快捷方式 功能
ctrl+f/F 跳转到下一页
ctrl+b/B 跳转到上一页
ctrl+d/u 向上或向下跳转半页
gg 跳转到文件第一行
G 跳转到文件最后一行
<行数>gg/G 跳转到指定行数,例如 12gg或者12G 代表跳转到 12 行
{g}+Ctrl-g/G 查看文件信息。

缩进

每种语言开发中都会又缩进的硬性(Python)或者软性要求。一般来说通过 Vimrc 写到配置中,这样不必要每次手动缩进。但是有时候可能需要非常规的缩进。这时候就需要手动操作缩进了,可以针对单行或者多行甚至块。

快捷键 含义
>> / :> 向右缩进
m,n> / :m>(n-m+1) m到n行缩进
m>n m行开始共n行缩进

组合

以上的移动方式相对比较单一,但是 Vim 组合的思想和特性给予了 Vim 更加高效的方式。关于 Vim 的组合思想有一个公式:[count]+operator+[count]+motion

  • count:次数的意思,用于重复;
  • operator :操作方式就是增删改之类的。例如复制(y),删除(d)等;
  • motion :Vim help 中会有相应的解释。简单来说就是operator的操作对象。比如一个单词、句子或者移动的方向等。

Vim 中可以通过 help 帮助来查看 Vim 的功能说明,相当于一个说明书和Linux 中man一样。

选择

可视化模式主要用于对文本进行选择,类似于平时使用鼠标选中操作文本。我们可以选中相应文本,然后针对选中的文本指定操作:复制,替换等。

可视化模式主要有三种方式:

  • v:字符级别可视化
  • V: 行级别可视化
  • Ctrl-v: 块级别可视化

    删除、复制与粘贴

快捷键 功能
d 剪切选定文本内容
y 复制选定文本内容
p/P 粘贴到光标前/后
u 撤销上一步操作
Ctrl+r 恢复之前撤销操作
组合快捷键 功能
x 删除光标下单个字符,据组合大家可以试试多个字符如何删除
y2w 光标正向复制两个单词
D/d$ 删除当前行光标后所有字符
dd 删除当前行
dG 删除光标之后所有行
d^ 删除当前行光标到行首所有字符
daw 删除当前光标单词

修改与替换

快捷键 含义 备注
r 替换光标下单个字符
cw 修改单个单词
c$ 修改光标之后行内内容
R 进入替换模式

substitute 替换命令

除了简单的快捷键替换之外。还有更加强大的命令式替换。这种方式为了处理更加复杂的场景,尤其是结合正则表达式。

substitute 是 Vim 中最常用的搜索和替换的命令。可以缩写为 s

替换公式::[range]s[ubstitute]/{pattern}/{string}/[flags]
默认情况下,s 只会作用域当前行的第一个匹配项。
flag选项
| 选项 | 含义 | 备注 |
|:—-|:—-|:—-|
| g | 全局替换 | global(也只是针对当前行全局而非全文) |
| c | 每次替换前需要确认 | confirm |
| e | 没有匹配项时不显示错误 | error |
| i | 表示忽略大小写 | ignore |
| I | 表示区分大小写 | |

range 选项

选项 含义 备注
% 执行范围:全局 这个才是真正意义上的全局
n,m n到m 行替换 :12,33s/time/ting/g
$ 最后一行 :12,$s/time/ting/g
n;/pattern/ n行到下一个匹配patter行 :12;/ting/time/ting/g

插入模式

插入模式是最容易理解的模式,就是和我们平时使用的编辑器一样就是为了插入字符的。进入这个模式也很简单,主要有三种方式:

i 键进入

i 表示 insert,即插入的意思,言简意赅。打开 Vim 编辑器并点击 i 键,这个时候编辑器左下角会出现 – INSERT – 字样,就这样表示进入插入模式了。

a 键进入

a 表示 append 意思,打开编辑器后点击 a 键进入此模式。和 insert 不同的是,这个时候光标会移动到下一个字符,然后再进入插入模式。

o 键进入

o 这个方式会在当前行下面新插入一行,并进入插入模式。

大写字母方式进入插入模式

这些命令还可以以大写字母方式进入插入模式,我们来看一下会有什么不一样的效果。

  • I 键:光标所在行首进行插入
  • A 键:光标所在行尾进行插入
  • O 键:光标所在行前新插入一空行进行插入

    命令行模式

顾名思义,命令行模式下的操作当然就是以命令为主,Vim 为我们提供了大量的丰富的命令,你可以把命令行模式当做是普通模式的加强版,它可以用来做到许多普通模式做不到的事情。

在普通模式下按下 : ,这时你会看到窗口的左下角出现了一个 : ,代表你已经进入命令行模式可以进行命令的输入,输入的命令会出现在 : 的后面。

指令 含义 备注
set number 显示行号
set hlsearch 高亮搜索
set incsearch 增量实时搜索
set ignorecase 大小写忽略
set autoindent 自动缩进 在这种缩进形式中,新增加的行和前一行使用相同的缩进形式
set smartindent 自动缩进 在这种缩进模式中,每一行都和前一行有相同的缩进量
set softtabstop tab键实际占有的列数
set expandtab tab 转化为空格
set shiftwidth=4 换行缩进为4个空格
set tabstop=4 设置tab 为4个空格