Vim的四种模式
模式 | 说明 |
---|---|
正常模式 | 可以使用快捷键命令,或按:输入命令行。 |
插入模式 | 可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。 |
可视模式 | 正常模式下按v可以进入可视模式,按V进入可视行模式,整行的选中。ctrl+v进入可视块模式。 |
替换模式 | 正常模式下,按R进入。 |
移动
- h 向左移动
- j 向下移动
- k 向上移动
- l 向右移动
- ctrl - f 上翻页
- ctrl - b 下翻页
- % 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。
- w 移动到单词前端(包含标点符号)
- W 单词间移动
- e 移动到单词末端(包含标点符号)
- E 移动到单词末端
- b 向上移动到单词词首(包含标点符号)
- B 空白字符分割的上词词首
- O 开始新的一行
- ^ 当前行的第一个非空字符
- $ 到 行尾
- gg 第一行
- gd 跳转到局部变量的定义处;
- [N]G 第N行行首
- tx 把光标移动到目标字符的前一个字符上
- fx 向前查找本行中的字符x
- ) 到句首
- ( 到句尾
- } 到段首
- { 到段尾
- * 向下搜索光标所在词
- `. 移动到最后改动的地方。
插入模式
- i 在光标之前插入
- I 行尾插入
- a 在光标之后插入
- A 行首插入
- o 当前行下插入一空行
- O 当前行上插入一空行
- Esc 返回模式选择
编辑
- r
- J
- cc
- cw
- c$
- s
- S
- u 撤销改动
- ctrl - r 重做
- . 重复上一命令
- ~
- g~iw
- gUiw
- guiw
- >>
- <<
- ==
剪切和复制
- dd 删除一行
- dw 删除一个单词
- x 删除当前光标下的字符
- X 删除当前光标左边的字符
- D 删除到行尾的内容
- yy 复制一行
- nyy 复制n行
- yw 复制一个单词
- y$ 复制到行尾
- p 粘贴到光标之前
- P 粘贴到光标之后
- ]p
- “a
- d 剪切
多文件
- :open 在vim窗口中打开一个新文件
- :split file 在新窗口中打开文件
- :e 打开文件
- :bn 切换到下一个文件
- :bp 切换到上一个文件
- :split 打开横向窗口
- :vsplit 打开纵向窗口
- ctrl - w
- ctrl - w w 移动到下一个窗口
- ctrl - w j 移动到下方的窗口
- ctrl - w k 移动到上方的窗口
- :tabm [N]
- :close 关闭窗口,最后一个窗口无法使用此命令
- :only 关闭所有窗口,只保留当前窗口
搜索/替换
- /pattern 向后查找
- ?pattern 向前查找
- n
- N
- :s/old/new 替换当前行的第一个匹配
- :s/old/new/g 替换当前行的所有匹配
- :s/old/new/gc 替换命令尾部加上c(confirm用于确认),在替换每个old前都会提示并确认
- :%s/old/new/ 替换所有行的第一个匹配
- :%s/old/new/g 替换整个文件的所有匹配
选中模式
- 文本标记
- v 进入可视模式,移动光标选择块
- V 整行整行的选中
- ctrl - v 进入可视块模式
- o 在可视模式中首尾跳转
- U 选中的所有单词变为大写
- u 选中的所有单词变为大写
- aw 以单词为单位跳转
- ab 选中()中的内容,包含()
- aB 选中{}中的内容,包含{}
- ib 选中()中的内容,不包含()
- iB 选中{}中的内容,不包含{}
- 命令
光标所在行向右缩进四个空格
- < 光标所在行向左缩进四个空格
- y
- d
- ~
离开
- :w 保存
- :wq 保存并退出(即使文件没有被修改也强制写入,并更新文件的修改时间。)
- :x 保存并退出(仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。)
- :q 退出
- :q! 强制退出
宏命令
- qa q+任意字母开始录制,再按q结束录制
- q 录制
- @a @+字母使用这个宏
执行shell命令
- :!command
- :!ls 列出当前目录下的文件
高级用法
- :X 设置密码
- :set key= 取消密码
编程常用
- gd: 跳转到局部变量的定义处;
- gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
- g;: 上一个修改过的地方;
- g,: 下一个修改过的地方;
- [[: 跳转到上一个函数块开始,需要有单独一行的{。
- ]]: 跳转到下一个函数块开始,需要有单独一行的{。
- []: 跳转到上一个函数块结束,需要有单独一行的}。
- ][: 跳转到下一个函数块结束,需要有单独一行的}。
- [{: 跳转到当前块开始处;
- ]}: 跳转到当前块结束处;
- [/: 跳转到当前注释块开始处;
- ]/: 跳转到当前注释块结束处;
- %: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else,#endif之间跳跃。
- ci’, di’, yi’:修改、剪切或复制’之间的内容。
- ca’, da’, ya’:修改、剪切或复制’之间的内容,包含’。
- ci”, di”, yi”:修改、剪切或复制”之间的内容。
- ca”, da”, ya”:修改、剪切或复制”之间的内容,包含”。
- ci(, di(, yi(:修改、剪切或复制()之间的内容。
- ca(, da(, ya(:修改、剪切或复制()之间的内容,包含()。
- ci[, di[, yi[:修改、剪切或复制[]之间的内容。
- ca[, da[, ya[:修改、剪切或复制[]之间的内容,包含[]。
- ci{, di{, yi{:修改、剪切或复制{}之间的内容。
- ca{, da{, ya{:修改、剪切或复制{}之间的内容,包含{}。
- ci<, di<, yi<:修改、剪切或复制<>之间的内容。
- ca<, da<, ya<:修改、剪切或复制<>之间的内容,包含<>。