来源:Vim基础&高级技巧教学切合实际工作-第二期基础知识、基础操作

一、Vim模式

  • Normal模式(所有输入都当成命令):操作文本、定位和移动等

  • Insert模式(编辑器模式):文本编辑等

模式 进入方法
Normal模式 Esc进入Normal模式(Ctrl+[)
Insert模式 i进入Insert模式(oOaA)

进入Normal模式推荐使用Ctrl+[,这样手可以不用离开主键区

进入Insert模式上述5种方法的区别:i在当前光标前面输入文本;a在当前光标后面输入文本;o在当前光标所在行下面新建一行进行输入;O在当前光标所在行上面一行新建一行进行输入;A在当前光标所在行末尾进行输入

1.Normal/Insert模式

  • 方向类
操作 命令
上下左右方向 hjkl(左下上右)
跳转到对应行 LineNumber gg
页首(第一行) gg
页尾(最后一行) G
行首 0
行尾 $
下一个词组开头 w&W(小写w以字符和空格划分词组,大写W以空格划分词组)
下一个词组末尾 e&E
向前移到词组开头(返回到上一个词组) b&B
  • 查找类
操作 命令
当前行向后查找 f
当前行向前查找 F
查找一对类如([{ %
全局查找单词 /+单词 n(查找下一个结果) N(查找上一个结果)
查找当前光标下的单词 *(查找下一个) #(查找上一个)
  • 删除、替换、粘贴、复制操作
操作 命令
删除一个字母 x&X(小写x表示向后删除,大写X表示向前删除)
替换当前字母 r规则 r+a-zA-Z
替换模式 R(进入该模式,光标变为下划线模式,替换好后按EscCtrl [进入Normal模式)
复制 y
粘贴 p
删除 d

dd表示删除一行,也可以和其他”方向”等例如dw表示删除一个词组,d$表示从当前行光标处删除到末尾

yy表示复制当前行 yw表示复制一个词组 y$表示复制当前光标到行尾

粘贴/删除命令都会将内容放入寄存器中,可以使用p来粘贴

  • 重复、数字+指令
操作 命令
重复上一次命令 .
数字+指令 例如:3dd d8j(删除当前行下面的8行)
  • 撤销、重做、保存
操作 命令
撤销(undo) u
重做(redo) Ctrl+r
保存 :w
退出 :q
保存并退出 wq
强制退出 :q!

2.Visual模式

使用v进入该模式,相当于使用鼠标按住选择段落,选择后再使用命令对选择的段落进行处理,如dx的删除操作

二、进阶操作

1.非Ctrl指令

操作 命令
删除当前光标至行尾并进入插入模式 c/c$(与d$a等价)
删除当前光标再进入插入模式 s(与xi等价)
对齐(行首输入=G将该文件进行对齐) = (=num 将光标到num行进行对齐)
跳转到行首(与0不同的是该命令会忽略开头前的空格) ^
跳转到行尾(与$不同的是该命令会忽略行尾后的空格) g_
向左缩进/向右缩进 <</>>(num <<:包括光标在内num行向左缩进)
删除一行并进入插入模式 cc/S
合并行(将下一行合并到当前行) J
选中一行进入visual mode V
visual mode模式下大小写转换 u&U
当前光标下的字母大小写互相转换 ~

2.Noraml模式下ctrl指令

操作 命令
向下翻一页 ctrl f
向上翻一页 ctrl b
向下翻半页 ctrl d
向上翻半页 ctrl u
计数加一(光标往后寻找到的第一个数字加一) ctrl a

3.vi/yi/ci/di/va…

i表示in

vi(可以选中括号中的内容,若想把()包含进去则使用va(

常用如下:

1
2
3
vi( vi[ vi< vi" vi' vi{ viw viW
va( va[ va< va" va' va{
ci( ciw等等

4.替换

1
2
3
4
5
6
7
8
9
10
11
12
:s/search/replace # 当前行替换匹配第一个
:s/search/replace/g # g表示全部匹配

:s/^/#/g 可以使用正则表达式来搜索替换,这个例子里是在shell中行首进行注释

:s/Search/replace/i # 使用i来表示不区分大小写

# 指定范围进行搜索替换
:10,20s/search/replace # 10,20表示第10行到第20行进行匹配
:%s/search/replace # %s表示当前文件全部匹配

:s/\<search\>/replace # 严格对search字符串匹配 即匹配sea不会匹配search