vim的操作操作是基于模式的,常见的模式包括
- 插入模式 (INSERT)
- 编辑模式 (NORMAL)
- 可视模式 (VISUAL)
- 命令行模式 (:)
Normal 模式是是最常用的模式,在normal模式下可以通过按键命令进入其他模式,在其他模式下,通过Esc
可以回到Normal模式。
操作
编辑模式(Normal)下的操作
在其他模式下按Esc
进入Normal模式
命令
- hjkl –> 光标移动,对应为←↓↑→。
- 0 –> 光标移动到行头
- ^ –> 光标移动到本行第一个非空字符的位置
- $ –> 光标移动到本行行末
- g_ –> 光标移动到本行最后一个非空字符的位置>
- f<a-char> –> 在当前行内,光标移动到下一个<a-char>字符所在位置
- F<a-char> –> 同f<a-char>,但为反方向的移动
- <a-num>f<a-char> –> 在当前行内,光标移动到第<a-num>个<a-char>字符所在位置
- t<a-char> –> 在当前行内,光标移动到第一个<a-char>字符的前一个字符位置
- T<a-char> –> 同t<a-char>, 但为反方向移动
- <Line-Number>G –> 光标跳到<Line-Number>指定的行
- gg –> 到第一行
- G –> 到最后一行
- w –> 光标移动到下一个单词(word)的开头
- b –> 光标移动到上一个单词(word)的开头
- e –> 光标移动到下一个单词的末尾(end)
- ge –> 光标移动到上一个单词的末尾(end)
- % –> 在当前行将光标移动到括号所在位置,多次按%可以在多个多个括号之间切换
- * –> 将光标移动到当前匹配当前光标所在词的下一个
- # –> 将光标移动到当前匹配当前光标所在词的上一个
- u –> 撤销上一次操作(undo)
- <C-r> –> 恢复上一次操作(redo)
- /<a-pattern> –> 搜索匹配<a-pattern>的字符,按n可以跳到下一个匹配项
- x –> 删除当前字符
- dd –> 删除当前行,并保存到剪贴板
- d<a-char> –> 在当前行内,删除光标位置到<a-char>之前的字符
- p –> 粘贴
- a –> 在光标后插入(append),并进入插入模式
- A –> 在行末插入,并进入插入模式
- o –> 在当前行前插入,并进入插入模式
- O –> 在当前行后插入,并进入插入模式
- cw –> 替换从光标所在位置到一个单词结尾的字符(change word),并进入插入模式
- ZZ –> 保存并退出
- . –> 小数点,重复上一个命令
- <a-num><a-command> –> 重复执行<a-num>次<a-command>命令
- gUU –> 将当前行的字符串变大写
- guu –> 将当前行的字符串变小写
- yy –> 拷贝当前行
- ye –> 拷贝光标所在位置到本单词最后一个字符的字符串
- >> –> 当前行向右缩减
- << –> 当前行向左缩进
- == –> 自动缩减
- J => 删除当前行的换行符,即将下一行与当前行连接起来
插入模式下的操作
在Normal模式中输入i
进入插入模式
命令
- <C-n> –> 自动补全,next
- <C-p> –> 自动补全,previous
可视模式下的操作
在Normal模式中输入v
进入可视模式
命令
- hjkl –> 或使用←↓↑→来创建选区
- i<an-object> –> 区域选择,不包括<an-object>的区域,<an-object>可以为一个字符,或者一个单词
- a<an-object> –> 区域选择,包括<an-object>的区域
命令行模式下的操作
在Normal模式中输入:
进入命令行模式
命令
- wq –> 保存并退出
- x –> 保存并退出
- w –> 保存,可以加文件名w filename
- q –> 退出
- q! –> 不保存退出
- e
–> 打开一个文件 - saveas
–> 另存为 - n –> 切换到下一个文件
- <Line-Number> –> 光标跳转到<Line-Number>指定行
- %s/foo/bar/g –> 在全局(globle)替换foo为bar
- %s/foo/bar/gcI –> 在全局(globle)替换foo为bar,需要确认(commit),并且忽略(Ignore)大小写
- s/foo/bar/g –> 在光标当前所在行全局(globle)替换foo为bar
其他技巧
块操作
- <C-v> –> 开始块操作
- <C-n> –> 向下选择块,(也可以使用其他方式来选择)
- <any-command>
ESC
–> 执行command,ESC
键使得操作对区块的每一行生效