初入编辑器之神:Vim

Vim是一款功能强大、高度定制的文本工具。

Vim安装

  • Ubuntu
apt install vim

vi和vim是什么关系?

  • vi

可视化接口(visual interface),EX(行文本编辑器)的可视化接口

  • vim

vi(VIM - Vi IMproved)的加强版本

  1. 增加了多级撤销
  2. 多窗口操作
  3. 提高了稳定性,减少了崩溃以及崩溃后也可以恢复
  4. 关键字自动补全以及上下文相关的补全

I. vim工作模式

  • 普通模式

vim打开一个文件时的默认模式(命令模式)

  • 插入模式

键盘上的i键盘即进入插入模式,o/a都可以进入插入模式

  • 命令行模式

shift+:即可进入命令行模式

:set nulber # 显示行号

配置文件子/etc/vim/vimrc或者~/.vimrc

  • 可视化模式
​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​​​‍‌​​‌​​​​‍‌​​‌‌​‌‌‍‌‌​‌​​‌​‍‌​​‌​​​​‍‌​​‌‌​​‌‍‌‌​‌​​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌‌​‌‍‌​​‌‌​‌​‍‌​​‌‌​​​‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​‌​​​‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌‌​‌​​‌​‍‌​​‌​​​​‍‌​​‌‌​​‌‍‌‌​‌​​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​‌​‍‌​​‌‌​‌‌‍‌​​‌​‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​​‌‌​‌‍‌‌​‌‌‌​​‍‌‌​‌‌‌‌‌‍​‌​‌‌​‌‌‌‌​​​‌​‍​‌​‌‌‌​‌​​‌‌​‌​‍​​​​​​​‌‌‌​‌​​‌‍​‌‌‌​​​​​‌‌​‌‌‌​‍​‌​‌​​‌‌​​‌​‌‌‌‍​‌‌​​​‌‌​‌‌​‌​​‍​​​​‌‌​‌​‌​​​​‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​‌​‌​​‌‍‌​​‌​‌‌​‍‌​​‌​​‌​‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​​​‌‌​‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌​‌‌‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​​‌‌​‌‍‌​​‌​​​​‍‌​​​‌​​​‍‌​​​‌‌​​‍‌​​‌‌​‌​‍‌​​‌‌‌‌​‍‌‌​‌​​​‌‍‌​​‌‌‌​​‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​‌​​​‌‌‍‌​​‌​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​​‌​‌​‍‌​​​​‌‌‌‍‌​‌​​​‌‌‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​​​‍‌​​‌​​​​‍‌​​‌‌​‌‌‍‌‌​‌​​‌​‍‌​​‌​​​​‍‌​​‌‌​​‌‍‌‌​‌​​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌‌​‌‍‌​​‌‌​‌​‍‌​​‌‌​​​‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​‌​​​‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌‌​‌​​‌​‍‌​​‌​​​​‍‌​​‌‌​​‌‍‌‌​‌​​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​‌​‍‌​​‌‌​‌‌‍‌​​‌​‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​​‌‌​‌‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

键盘上的v进入可视化模式,上下左右移动光标选中文本,可以进行后续的粘贴、删除、复制等操作

  • 替换模式

R就可以进入到替换模式

II. 光标移动

  • 单个字符移动
字符移动方向
h向左移动
l向右移动
j向下移动
k向上移动

10>l向左移动10个字符

  • 单词移动
单词移动方向
w将光标移动到下一个单词的开头
b将光标移动到前一个单词的开头
e将光标移动到下一个单词的词末
E移动到单词的结尾(忽略标点符号)
ge将光标移动到上一个单词的词末
2w指定移动的次数
  • 行移动
单词移动方向
$将光标移动到当前行的行尾
0将光标移动到当前行的行首
^将光标移动到当前行的第一个非空字符
`2\`移到当前行的第2列
fx将光标移动到当前行的第一个字符x
3fx将光标移动到航前行的第3个字符x
tx将光标移动到目标字符x的前一个字符上
fx和tx可以通过;,进行正向或反向重复移动
%用于符号间的移动,它会在一对()[]{}之间跳跃
  • 文本块移动
单词移动方向
(移到当前句子的开头
)移到下一个句子的开头
{移到当前一段的开头
}移到下一段的开头
[[移到当前这一节的开头
]]移到下一节的开头
  • 在屏幕中移动
单词移动方向
xG\跳转到指定的第x行,G移动到文件按末尾
``2次单引号)返回到跳转前的位置
gg移动到文件开头
x%移动到文件中间,就使用50%
H移动到当前屏幕的开头
M移动到当前屏幕中间
`L移动当前屏幕的末尾
ctrl+G查看当前的位置状态

III. 滚屏与跳转

  • 半屏滚动
快捷键方向
ctrl+u向上滚动
ctrl+d向下滚动
  • 全屏滚动
快捷键方向
ctrl+b向上滚动
ctrl+f向下滚动
  • 定位光标的位置
定位位置
zz将光标置于屏幕的中间
zt将光标移动到屏幕的顶部
zb将光标移动到屏幕的底部
  • 设置跳转标记
标记跳转
mx设置跳转位置
`x跳转到设置

IV. 文本插入操作

按键描述
i在当前光标的前面插入字符
a在当前光标的后面追加字符
o在当前光标的下一行行首插入字符
I在一行的开头添加文本
A在一行的结尾处添加文本
O在光标当前行的上一行插入文本
s删除当前光标处的字符并进入到插入模式
S删除光标所在处的行,并进入到插入模式
u撤销修改

V. 文本删除

  • 字符删除
按键描述
x删除当前光标所在处的字符
X删除当前光标左边的字符
  • 单词删除
按键描述
dw删除一个单词(从光标处到空格)
daw删除光标所在的整个单词(包括空白字符)
diw删除整个单词文本,但是保留空格字符不删除
d2w删除从当前光标开始处的 2 个单词
d$删除从光标到一行末尾的整个文本
d0删除从光标到一行开头的所有单词
dl删除当前光标处的字符=x
dh删除当前光标左边的字符=X
  • 行删除
按键描述
dd删除当前光标处的一整行=D
5dd删除从光标开始处的5行代码
dgg删除从光标到文本开头
dG删除从光标到文本结尾
  • 行合并
按键描述
J删除一个分行符,将当前行与下一行合并

VI. 文本复制、剪切与粘贴

按键描述
y复制,p:粘贴
yw复制一个单词
y2w复制2个单词
y$复制从当前光标到行结尾的所有单词
y0复制从当前光标到行首的所有单词
yy复制一整行
2yy复制从当前光标所在行开始的2
  • 复制文本块
  1. 首先进入visual模式:v
  2. 移动光标选择文本
  3. 复制与粘贴的操作

VII. 文本修改与替换

按键描述
cw删除从光标处到单词结尾的文本并进入到插入模式
cb删除从光标处到单词开头的文本并进入到插入模式
cc删除一整行并进入到插入模式
~修改光标下字符的大小写
r替换当前光标下的字符
R进入到替换模式
xp交换光标和下一个字符

VIII. 组合命令使用

更改删除复制从光标位置到...
cHdHyH屏幕顶端
cLdLyL屏幕低端
c+d+y+下一行
`c5\``d5\``y5\`本行的第五列
2c)2d)2y)往下第二个句子
c{d{y{上一段
cGdGyG文件结尾
c13Gd13Gy13G第13行

IX. 文本查找与替换

  • 字符串查找
表达式描述
/string正向查找
?string反向查找
  • 设置高亮显示

:set hls

  1. *按键将当前光标处的单词高亮显示
  2. 使用n浏览下一个查找高亮的结果
  • 字符串替换
操作描述
:s/old/new将当前行的第一个字符串old替换为new
:s/old/new/g将当前行的所有字符串old替换为new
:90s/old/new/g将指定行的所有字符串old替换为new
:90,93s/old/new/g9093行的所有字符串old替换为new
:%s/old/new/g将文本中所有的字符串old替换为new
:%s/old/new/gc依次替换每个字符串关键字
:%s/^struct/int/g将所有以struct开头的字符串替换为int

X. 修改的撤销、重做和保存

操作描述
u撤销上一步的操作
Ctrl+r将原来的插销重做一遍
U恢复一整行原来的面貌(文件打开时的文本状态)
q若文件没有修改,直接退出
q!文件已经被修改,放弃修改退出
wq文件已经被修改,保存修改并退出
e!放弃修改,重新回到文件打开时的状态

XI. 编辑多个文件

  • 文件和缓冲区的区别
  1. 文件是保存在磁盘上的,而打开的文件的文件是在内存中
  2. 在内存中有一个缓冲区,用来存放打开的文件
  3. vim 每次打开文件时都会创建一个缓冲区,vim 支持打开多个文件
操作描述
:buffers`查看缓冲区列表==ls
:buffer N`根据缓冲区列表的编号跳转到指定缓冲区
:bnext/bprev`遍历缓冲区列表
:bfirst/blast`分别调到缓冲区列表的开头和结尾
:write`将缓冲区的修改保存到磁盘上
:edit! e!`放弃缓冲区的修改,恢复到文件打开时的状态
:edit file`编辑另一个文件
:wnext`保存当前缓冲区的修改并跳转到缓冲区列表中的下一个文件

:set autowrite

XII. 标签页与折叠栏

标签页的新建:tabedit file/tab split

标签页的切换: tabn/tabp

    按键:gt/gT

标签页的关闭: tabclose
关闭当前的标签页,:tabonly

  • 创建一个折叠

zf200G: 将光标和 200 行之间的代码折叠起来

  • 折叠的打开与关闭
  1. za: 打开和关闭折叠
  2. zr/zm: 一层一层地打开和关闭折叠
  3. zR/zM: 分别打开和关闭所有的折叠
  • 折叠键的光标移动
  1. zj: 跳转到下一个折叠处
  2. zk: 跳转到上一个折叠处
  • 删除折叠
  1. zd: 删除光标下的折叠
  2. zD: 删除光标下的折叠以及嵌套的折叠
  3. zE: 删除所有的折叠标签

创建的折叠当退出 vim 之后就失效了。

XIII. 多窗口操作

  • 分割窗口

split/vsplit filename

  • 窗口间跳转

ctrl+w hjkl
ctrl+w w

  • 移动窗口

ctrl+w HJKL

  • 调整窗口尺寸
  1. ctrl+w +/- 调整窗口的高度
  2. ctrl+w </> 调整窗口的宽度
  3. ctrl+w = 所有的窗口设置相同的尺寸
  4. :resize n 将当前窗口尺寸调整为 N 行
  • 关闭窗口
  1. close: 关闭一个窗口
  2. qall: 退出所有窗口
  3. qall!: 放弃修改,退出所有窗口
  4. wqall: 保存并退出所有窗口
  5. wall: 保存所有窗口