初识 Vim
主要的四种模式:
- normal:默认进入的模式,最常用的模式
- insert:插入模式,像正常的文本编辑器一样输入
- command:命令模式,在底部输入命令
- visual:可视模式,对文本进行选择
normal 模式:基本的移动
hjkl
:上下左右gg
:跳到第一行G
:调到最后一行ctrl+u
:向上翻半页ctrl+d
:向后翻半页number+gg
:跳到第几行zz
、zt
、zb
:光标行设置为屏幕居中、首行(top)、末行(bottom)
insert 模式
i
:代表“insert”,当前光标之前开始输入
a
:代表“append”,当前光标之后开始输入
o
:下方插入新的一行,然后开始输入
s
:删除当前光标的字符,然后开始输入
I
:在本行的开头开始输入
A
:在本行的末尾开始输入
O
:上方插入新的一行,然后开始输入
S
:删除当前行,然后开始输入
command 模式
Normal 模式下输入 : 进入 Command 模式
- :w :保存当前文件
- :q :退出
- :q! :放弃当前更改,然后退出
- :wq :保存当前更改,然后退出
- :h {command} :显示关于命令的帮助
<Esc>
回到 Normal 模式
visual 模式
-
normal 模式下按
v
可进入可视模式 -
进入可视模式后可以用 Normal 模式下的移动命令选择文本
-
可视模式下
x
,y
:剪切/复制;回到 Normal 模式下p
:粘贴 -
Normal 模式下按 V 进入行可视模式,一次选中一整行,在需要选中多行时很方便
<Esc>
回到 Normal 模式
移动和编辑
基于单词的移动
简单的 hjkl
显然无法满足我们的需要
- w :代表“word”,跳转到下一处单词的开头
- b :代表“back”,跳转到上一处单词的开头
- e :代表“end”,跳转到下一处单词的结尾
- ge :
e
的反向版本,跳转到上一处单词的结尾
w
、b
、e
大写版本 W
、B
、E
对应的单词是连续的非空字符
基于搜索的移动
行内移动:
f{char}
、t{char}
:跳转到本行下一个char
字符出现处、出现前;
、,
:快速向后、向前重复ft
查找F{char}
、T{char}
:往前搜索而非往后
文件中搜索:
- /{pattern} :跳转到本文件中下一个 pattern 出现的地方
- ?{pattern} :跳转到本文件中上一个 pattern 出现的地方
- pattern 可以是正则表达式
- * :等价于 /{pattern} , pattern 是当前光标下的单词
- nN :快速重复 / 查找
基于标记的移动
-
m{mark} :把当前位置标记为 mark
-
`{mark} :跳转到名为 mark 的标记位置
mark 是 a-z 的字符
常用场景:当需要临时离开当前光标处,做一些事情后再快速地回来
我比较习惯用的标记是 mm
内置标记:
-
`` :上次跳转前的位置
-
`. :上次修改的位置
-
`^ :上次插入的位置
其他实用的跳转
-
^
、$
:跳转到本行的开始、结尾 -
%
:跳到匹配的配对符(括号等)处
Operator+Motion=Action
{operator}{motion} :一次编辑动作
常见操作符:
c
:代表"change",修改,删除内容并进行插入模式d
:代表"delete",删除y
: 代表"yank",复制v
:代表"visual",选中文本,进入可视模式
例子:
dgg
:删除到第一行ye
:复制到单词结尾d$
:删除到行尾dt;
:删除直到分号为止的内容
大部分操作符连续按两次( cc/dd/yy ):将其作用在这一行上
- dd :删除这一行
重复操作:.
命令
.
:重复上一次修改u
:撤销上一次修改ctrl+r
:重做上一次修改
.
命令非常适合用于需要多次重复某一个修改动作的场景。省去了重复输入命令,大大提高效率
批量操作:数字+动作
{count}{action} :重复 count 次 action 动作
动作可以是移动动作或是编辑动作
4j
:向下移动 4 行3dw
:删除 3 个单词2yy
:复制 2 行4p
:粘贴 4 次
数字+动作 是一种重要的批量操作方式,命令直观,语义明确
.
命令可以直观地看到每一次的变化,在合适的时候停止- 数字+动作则需要预先知道动作的次数
技巧:使用相对行号确定移动范围
当涉及行操作时,使用相对行号能够更直观地确定范围
:set relativenumber
:开启
:set norelativenumber
:关闭
文本对象操作
。。。
寄存器与宏
。。。
命令模式
。。。