vim常用操作汇总
光标移动
上下左右 k/j/h/l
行首 0 或者 ^
行尾 $
单词和字符串间移动
指令 | 动作 |
---|---|
w/W | 正向移动到下一个单词开头,大写的忽略特殊字符、符号等 |
b/B | 和w相对应的反向移动,移动到上一个单词开头 |
e/E | 正向移动到下一个单词结尾 |
ge | 反向移动 |
{num+} f/F+空格 | 正向/反向移动到本行空格的地方,num相当于移动几次 |
跳转
指令 | 动作 |
---|---|
ctrl+f | 向下翻页 |
ctrl+b | 向上翻页 |
ctrl+d/u | 向下/向上翻半页 |
gg | 文件行首 |
G | 最后一行 |
行号+gg/G | 都是跳到指定行号的行 |
g+ctrl+g/G | 查看光标位置,输出包含行、列、词、字节位置 |
缩进操作符
指令 | 动作 |
---|---|
» 和 « 或者 :> 和 :< | 当前行右缩进和左缩进,后者命令行模式 |
:line_num1,line_num1+x> 或者 :line_num>x | 命令行模式,批量缩进,缩进x行 |
复制粘贴
复制剪贴内容存于寄存器, :reg
可以查看寄存器内容
指令 | 动作 |
---|---|
yy / 8yy | 复制/8行 |
dd / 8dd | 剪贴/8行 |
p/P | 粘贴到光标前/后 |
u | 撤销 |
ctrl+r | 重做 |
yw | 复制当前光标单词 |
y8w / y8W | 复制含当前光标的正向8个单词,大写W的含义和W移动含义相同(忽略一些符号) |
x/4x/X | 剪贴单个字符/4个字符,大写就是反向 |
d{w/h/j/k/l} | 可以各种组合 |
d$/D | 删除光标到行尾 |
d^ | 删除光标到行首 |
插入、查找、替换
插入
指令 | 动作 |
---|---|
I/A i/a | 行首、行尾插入,向前向后插入 |
o/O | 下一行、上一行插入 |
num + (i/I/A/a/o/O) | 多次插入,即重复插入多个字符或者多行 |
转换
指令 | 动作 |
---|---|
~ | 单个字符大小写转换 |
g~w | 单词大小写反转 |
g~$ 或 g~~ | 整行大小写反转 |
gU或gu + 回车 | 整行转大写或小写 |
gU/uw | 单词转大写或小写,转换光标到词尾的部分 |
’.’:点操作符表示重复上一次操作
查找
组合键 | 含义 |
---|---|
f/F {字符} | 反向或正向查找一个字符 |
df{字符} | 删除光标到查找字符的位置直接的内容 |
/{字符串} | 命令行模式查找 |
替换
命令行模式下查找替换:
s/xx/yy/g 当前行所有xx替换为yy,g表示整行的所有
1,$ s/xx/yy/g 整个文件的替换
%s/xx/yy/g 同上,%表示整个范围
直接替换:
- R 进入了替换模式,单个字符替换,需手动退出替换模式
- r 单次单个字符替换
- cw 修改光标到单词的结尾的内容
- c$或者C,修改光标后面的行内容
可以配合后文的可视化模式批量替换
操作符汇总
输入:h operator
查看
|
|
缓冲区
vim编辑文件时开辟的一块内存空间buffer,临时存放vim打开的文件。
vim file1 file2 … 可同时打开多个文件
查看缓冲区列表:
- :files
- :buffers
- :ls
输出四列依次表示:缓冲区序号、指示状态、文件名、光标位置
指示状态:
- - 只读缓冲区
- a 活动缓冲区,当前显示在屏幕上的
- h 隐藏缓冲区
- % 当前的缓冲区
- # 交换缓冲区
- + 已经更改的缓冲区
- = 只读缓冲区
缓冲区操作:
指令 | 含义 |
---|---|
:bp[revious] | 上一个缓冲区 |
:bn[ext] | 下一个缓冲区 |
:bf[irst] | 到第一个缓冲区 |
:bl[ast] | 到最后一个缓冲区 |
:buffer 序号或者文件名 | 指定缓冲区 |
:ball | 编辑所有缓冲区 |
:badd ok.sh | 增加一个缓冲区 |
:bd[elete] ok.sh | 删除一个缓冲区 |
:bufdo %s/pattern/replace/ge | update | 多buffer查找替换,(即bufdo cmd) |
:qall | 退出所有 |
:wall | |
:n,mbd或者%bd | 删除n到m号或者删除所有 |
分屏/多窗口
- 垂直: vim -On [FILE_1] [FILE_2] … O打开水平分屏, n是个数字,代表分屏数量
- 水平: vim -on [FILE_1] [FILE_2] … o表示垂直分屏
分屏操作(以ctrl+w开始):
指令 | 含义 |
---|---|
ctrl+w c/q | 关闭当前窗口/最后一个窗口 close/quit,(分屏操作一般都是ctrl+w再跟指令) |
ctrl+w s | 上下分屏当前打开的文件,镜像,split |
:sp filename | 上下分割,并打开一个新的文件 |
ctrl+w v | 左右镜像(分屏)一个当前打开的文件 |
:vsp filename | 左右分割,并打开一个新的文件 |
分屏调整操作:
指令 | 含义 |
---|---|
ctrl+w K/J/L/H | 上下右左移动 |
ctrl+w +/-/= | 增加/减少/所有屏幕高度一致 |
工作区移动:
ctrl+w hjkl
标签
指令 | 含义 |
---|---|
:tabnew | 新建标签页 |
:tabfind | 查找并在新标签页中打开文件 |
:tabs | 显示已经打开的标签页列表 |
:tabclose | 关闭当前标签页 |
:tabonly | 仅保留当前标签页打开 |
:tabn/p/first/last | 移动到下/上/第一/最后一个标签页 |
文本对象
模式:
|
|
- operator:v可视化模式选择对象,或者c/x/d/y等操作符(也可以选择之后跟操作符做对应动作)
- a: 包含尾部间隔空格
- i: 只是内容本身,不包含尾部单词间隔空格
词、句子、段落
文本对象 | 说明 | 备注 |
---|---|---|
w | word | 单词 |
s | sentence | 句子 |
p | paragraph | 段落 |
块文本对象
文本对象 | 说明 | |
---|---|---|
]/[ | [] 块 | |
)/(、b | ()块 | |
>/< | <>块 | |
}/{、B | {} 块 | |
t | 标签块: <> </> |
示例:
- viw:选中单词
- vip:选中段落
- vi(:选中圆括号中的内容
- vit:选中标签中的内容
- daw:删除单词(vawd)
- dw:删除光标到单词尾
- yas:复制句子
- v2i{:选中两层大括号之间的内容
宏
可以理解为批处理,类似于一个函数,一个命令组
- 普通模式下,q 键便是宏录制/停止快捷键。
- 宏录制后需要放在寄存器的,所以需要跟上寄存器名字q{register}。比如:qa
- 录制完毕后,按下 q 键停止
- 调用时候只需要 @{register} 即可。就像微博一样 @ 一下。
- 重复调用 n@{register}
指令 | 说明 | |
---|---|---|
qa | 录制宏到寄存器a | |
qA | 寄存器a中追加宏 | |
n@a | 执行n遍寄存器 | |
@@ | 执行一遍上一次操作 | |
:n,m normal @a | n到m行执行寄存器a中宏 | |
:let @a= ’ | 编辑宏 |
可视化模式
三种子模式:
- v:面向字符的可视化模式
- V:面向行的
- Ctrl+v:面向块的
操作:
- gv:重选上次高亮区域
- o:切换选取边界,即光标位置在前还是后
其他
- 寄存器
- 插件
我的.vimrc配置
|
|
内容整理网络,部分来自自imooc