VIM 教程
窗口命令,分屏
-
ctrl+w w 切换窗口
-
ctrl+w s 水平分割窗口
-
ctrl+w v 垂直分割窗口
-
vim -on file1 file2 ... filen 上下分屏
-
vim -On file1 file2 ... filen 左右分屏
-
ctrl+w h j k l 移动分屏光标
-
ctrl+w H J K L 移动分屏
-
ctrl+w c 关闭分屏
-
ctrl+w q 关闭分屏并退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
-
:e file 把 file 加载到新的缓冲区中
-
:sp fn 上下分屏打开新文件,并将 fn 加载到新的窗口中
-
:sp fn 分割窗口,并将 fn 加载到新的窗口中
缓冲区
- :ls 列出缓冲区
- :bn 跳转到下一个缓冲区
- :bn/:bp 多个文件间切换
- :b number 切换缓冲区
- :b fileName 加载文件
- :bd 删除缓冲区(关闭文件)
保存,退出编辑器
-
:w 将缓冲区写入文件,即保存修改
-
:w! 强制保存不退出
-
:q 退出,如果对缓冲区进行过修改,则会提示
-
:q! 强制退出,放弃修改
-
:qa! 退出所有不保存
-
:wq 保存修改并退出
-
:e file 打开文件
-
:e! 放弃修改,恢复文件到上次保存的位置
-
:x 保存并退出
-
:w file 保存到文件
-
:saves file 另存为
标签命令
-
:tabnew tabName 创建新 tab
-
:tabe fn 在一个新的标签页中编辑文件 fn
-
:tabn 切换下一个 tab
-
:tabp 切换上一个 tab
-
:tabr 切换到第一个标签页
-
:tabl 切换到最后一个标签页
-
:tabm [N] 把当前 tab 移动到第 N 个 tab 之后
-
:tabc 关闭 tab
-
:tabs 查看共几个 tab
-
gt 切换到下一个标签页
-
gT 切换到上一个标签页
-
g/t 切换 tab
-
ngt 切换第 n 个 tab
标记、书签
- ma 文件内标记,把当前位置存成标签 a
- mA 文件间标记
- `a 跳转到标记处
- 'a 跳转到标记行首
- :marks 查看标记
- :delmarks a 删除标记
- :delmarks! 删除所有小写标记
插入模式
- i 光标前
- I 光标行首
- a 光标后
- A 光标行尾
- o 光标下一行首插入
- O 光标上一行首插入
- s 删除光标处字符再插入
- S 删除光标行,再在行首输入
- Esc 退出插入模式
编辑
- J 将下一行和当前行连接为一行
- cc 删除当前行并进入编辑模式
- cw 删除当前字,并进入编辑模式
- c$ 擦除从当前位置至行末的内容,并进入编辑模式
- xp 交换当前字符和下一个字符
选择模式 - 标记文本
- v 进入可视模式,单字符模式
- V 进入可视模式,行模式
- Ctrl+v 进入可视模式,列模式,类似于 UE 的列模式
- va" 选中 "" 内的所有内容包括双引号
- vi" 选中 "" 内的所有内容,不包括 ""
- o 跳转光标到选中块的另一个端点
- U 将选中块中的内容转成大写
- O 跳转光标到块的另一个端点
- aw 选中一个字
- ab 选中括号中的所有内容,包括括号本身
- aB 选中{}括号中的所有内容
- ib 选中括号中的内容,不含括号
- iB 选中{}中的内容,不含{}
移动
-
0 移动到行首,不管有无缩进,就是跳到第 0 个字符
-
^ 移动到本行第一个不是 blank 的字符
-
$ 移动到行尾
-
g_ 移动到本行最后一个不是 blank 的字符
-
fa 移到本行下个 a 处
-
nfa 移到本行光标后第 n 个 a 处
-
Fa 移到上个 a 处
-
nFa 移到本行光标前第 n 个 a 处
-
ta 移动光标至 a 字符的前一个字符
-
nta 移动到第二个 a 字符的前一个字符处
-
Ta 同 ta 移动光标方向相反
-
nTa 同 nta 移动光标方向相反
-
w 移到下个单词开头,按标点或单词分割
-
W 移到下个单词结尾,跳到下一个字首,长跳,如 end-of-line 被认为是一个字
-
e 跳到下一个字尾
-
E 跳到下一个字尾,长跳
-
b 跳到上一个字
-
B 跳到上一个字,长跳
-
; 跳前一个指定字符
-
, 跳后一个指定字符
跨行移动
-
nG 移到 n 行行首,如 0G,就等价于 gg,100G 就是第 100 行
-
gg 移到文件第一行行首
-
gd 跳至当前光标所在的变量的声明处
-
G 移到最后一行行首
-
H 移到当前屏幕第一行行首
-
M 移到当前屏幕中间
-
L 移到当前屏幕尾部
-
zt 当前行移到第一行
-
zz 当前行移到中间
-
zb 当前行移动到尾部
-
`. 跳转至上次编辑位置 在屏幕上移动
-
% 匹配括号移动(跳到与当前括号匹配的括号处,如当前在{,则跳转到与之匹配的}处)
-
* 上一个单词
-
# 下一个单词
翻页
- ctrl + f 下一页
- ctrl + b 上一页
查找
- fx 在当前行中找 x 字符,找到了就跳转至
- Fx 跟 fx 的方向相反
- ; 重复上一个 f 命令,而不用重复的输入 fx
- tx 与 fx 类似,但是只是跳转到 x 的前一个字符处
- ),( 跳转到上/下一个语句
-
- 查找光标所在处的单词,向下查找
查找替换
- /pattern 向后搜索字符串 pattern
- ?pattern 向前搜索字符串 pattern
- n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
- N 上一个匹配(同上)
- :%s/old/new/g 搜索整个文件,将所有的 old 替换为 new
- :%s/old/new/gc 搜索整个文件,将所有的 old 替换为 new,每次都要你确认是否替换
复制、粘贴、删除、撤销、重作
d 删除
- dw 删除一个单词
- dnw 删除 n 个单词,
- dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )
- dnfa 删除光标处到第 n 个 a 的字符处
- dd 删除一整行
- ndd 删除光标处开始的 n 行
- d$ 删除光标到本行的结尾
- dH 删除屏幕显示的第一行文本到光标所在的行
- dG 删除光标所在行到文本的结束
- :n1,n2d 删除 n1 到 n2 行
- x 删除当前字符
- X 删除前一个字符
- D 删除到行末
y 复制
- yw 复制一个单词,还有 ynw
- yfa 复制光标到下一个 a 的字符处,还有 ynfa
- yy 复制一行,还有 nyy,,此命令前可跟数字,标识复制多行,如 - 6yy,表示从当前行开始复制 6 行
- y$ 复制到行末
- yH 复制屏幕显示的第一行文本到光标所在的行
- yG 复制光标所在行到文本的结束
p 粘贴
- p 粘贴粘贴板的内容到当前行的下面
- P 粘贴粘贴板的内容到当前行的上面
- ]p 有缩进的粘贴,vim 会自动调节代码的缩进
- "a 将内容放入/存入 a 寄存器,可以支持多粘贴板
移动
>>
将当前行右移一个单位<<
将当前行左移一个单位(一个 tab 符)>
块右移<
块左移,将当前行左移一个单位(一个 tab 符)==
自动缩进当前行
撤销和重作
- u 撤销
- ctrl + r 重作
重复命令
- . 该命令是重复上一个操作的命令
- n command 重复某个命令 n 次,如 10p 复制 10 次,10dd 删除十次。