VIM三种模式:命令模式、输入模式、底线命令模式。还有一种可见模式,鼠标进行选中文本。
一、命令模式
- 移动光标
命令 | 说明 |
---|---|
0 | 到行头 |
$ | 到行尾 |
G | 到文件最后一行 |
gg | 到文件第一行 |
H | 到当前屏幕第一行 |
M | 到当前屏幕中间一行 |
L | 到当前屏幕最后一行 |
/单词 | 到匹配的单词处,之后按 n 到下一个匹配的单词处 |
ngg 或者 :n回车 | 到第n行 |
w | 到下个单词 |
b | 返回上一个单词 |
gd | 移动到局部变量的定义处 |
gD | 移动到全局变量的定义处(仅限于当前文件) |
- 复制、删除、粘贴
命令 | 说明 |
---|---|
shift v + 移动键 | 选中文本 |
v + e | 选中单词 |
viw | 选中单词 |
ciw | 剪切单词 |
y | 复制; 可以之后输入数字,表示复制多少次 |
yy | 复制一行 |
gg ggyG | 全部复制 |
d | 剪切 |
dd | 删除(剪切)一整行 |
ndd | 删除(剪切)光标所在向下n行 |
daw | 删除光标所在处的单词 |
gg dG | 删除全部 |
p | 粘贴 |
x | 删除当前光标所在处的字符 |
d$ | 删除这一行当前字符后的内容 |
- 撤销、还原
命令 | 说明 |
---|---|
u | 取消上次操作 |
ctrl r | 重做上一个操作 |
- 进入其他模式
命令 | 说明 |
---|---|
i | 进入输入模式 |
: | 进入底线命令模式 |
- 格式调整
命令 | 说明 |
---|---|
shift v + 方向键选中文本 + = | 调整缩进格式 |
二、输入模式
| 命令 | 说明 | |:—|:—| |按ESC| 退出输入模式,进入命令模式| | i | 进入当前光标处进行输入 | | I | 进入当前光标后面的第一个非空格处开始输入 | | a | 到当前行的开头进行输入(在命令模式下输入a) | | A | 到当前行的最后进行输入 | | o | 到当前行的下一行开头进行输入 | | O | 到当前行的上一行开头进行输入 |
- 多行修改
Ctrl-V + 方向键
三、底线命令模式
按回车执行命令,每次结束后返回命令模式。
命令 | 说明 |
---|---|
:q | 退出文件 |
:w | 保存文件 |
:wq | 保存并退出文件 |
:q! | 强退 |
:w 文件名 | 另存为 |
:set nu | 显示行号 |
:set nonu | 取消行号显示 |
:e | 重新载入当前文件 |
:e! | 进行强制加载(放弃当前文件修改) |
分屏
命令 | 说明 |
---|---|
Ctrl+w s | 上下分屏 |
Ctrl+w v | 左右分屏 |
Ctrl+w 方向键 | 屏幕切换 |
Ctrl+w q | 退出当前分屏 |
Ctrl+w o | 关闭当前屏幕外其他屏幕 |
Ctrl+w HJKL | 注意是大写要加shift,往该方向扩充到全部,有屏幕切换的效果,也就是 |
Ctrl+w x | 交换上下左右窗口 |
Ctrl+w = | 上下左右窗口变相等大小 |
四、~/.vimrc配置
set nu
syntax on 语法高亮
参考:https://github.com/skywind3000/awesome-cheatsheets/blob/master/editors/vim.txt
五、插件使用
Vim可以自己下载插件,或者使用管理插件下载的插件来下载插件。
下载插件的扩展功能:
- 文件目录结构查看
下载nerdtree
- 函数定义跳转
VIM外下载ctags(exuberant ctags),然后在项目根目录下输入ctages -R . 生成tags文件夹, 最后,.~/.vimrc 中通过以下命令显式地指定tag文件路径: :set tags+=tags文件路径
这样,在tags所在目录打开VIM,就可以使用ctrl + ] 跳转到代码定义,使用ctrl + o返回之前文件。
六、注意事项
- VIM之间拷贝文件内容
如果要使用y复制和p粘贴,应该使用分屏,而不是打开两个vim
- Swap文件理解
一个VIM进程打开一个文件,如果编辑了,那么会生成一个swap文件,意思是保存编辑所做的修改(diff)。
如果正常关闭文件,则该次生成的swap文件消失。
如果此次文件非正常关闭,那么swap存在;又或者,在未关闭文件的时候,又启动了一个新VIM进程打开该文件。
此时VIM打开时候会注意到swap文件是存在的,因此会要求: (1)只读方式打开,说白了,就是此次打开不会影响其他文件,也关心其他文件的修改; (2)仍要编辑,说白了,不关心swap里面的变化,此时如果是两个同时编辑文件时候会有风险(编辑最终结果不确定); (3)恢复,此法最常用,也就是尝试将swap的diff同步到此次打开的文件 (4)退出