【工具调教】Vim使用速查
Vim速查 ¶
插入模式 ¶
字母 | 含义 |
---|---|
a |
在当前字符后插入 |
i |
在当前字符前插入 |
o |
插入新行到后 |
A |
在当前行后插入 |
I |
在当前行前插入 |
O |
插入新行到前 |
ctrl h
删除上一个字符ctrl w
删除上一个单词ctrl u
删除当前一行ctrl [
退出编辑模式进入normal模式(代替Esc)gi
快速回到最后一次编辑位置- 题外话:linux命令行快捷键:
- ctrl a 移动到当前行开头
- ctrl e 移动到当前行结尾
- ctrl b 向前移一位
- ctrl f 向后移一位
normal模式 ¶
快速移动 ¶
h
(左),j
(下),k
(上),l
(右)- 单词之间移动
w
/W
移动到下一个word/WORD开头,e
移动到尾部b
/B
移动到上一个word/WORD开头- word是以非空白符分割的单词,WORD是以空白符分割的单词
- 行间搜索移动
- 使用
f{char}
移动到char字符上,用t
移动到char的前一个字符 - 可以用分号
;
/逗号,
继续搜下一个/上一个 F
倒着搜
- 使用
- vim水平移动
0
移动到行首第一个字符,^
移动到第一个非空白字符$
移动到行尾,g_
移动到行尾非空白字符
- vim垂直移动
- 使用
()
在句子间移动 - 使用
{}
在段落间移动
- 使用
- vim页面移动
gg
/G
移动到文件的开头/结尾,Ctrl o
快速返回H
/M
/L
移动到屏幕开头/中间/结尾ctrl u
/ctrl f
上下翻页,zz
将当前行放在屏幕中间
增删改查 ¶
- 快速删除
x
快速删除一个字符- 删除2个字符
2x
- 删除2个字符
daw
快速删除一个单词,包含周围空格diw
快速删除一个单词,不包含周围空格dd
删除当前行- 删除2行
2dd
- 删除2行
dt[R]
从当前删除到[R]
字符前
- 快速修改
r[R]
将当前光标字符替换成字符[R]
R[S]
会将其后的字符挨个替换成字符串[S]
c
删除并进入插入模式- 同上述的
d
:caw
ciw
ct[R]
- 同上述的
C
删除当前光标后整行并进入插入模式s
删除当前光标字符并进入插入模式- 删除
[\d]
个字符并…[\d]s
- 删除
S
删除整行并进入插入模式
- 查询
/
/?
前向搜索、反向搜索n
/N
跳转到下一个、上一个匹配*
/#
当前单词的前向、后向匹配
Visual(可视)模式 ¶
- Normal模式下用
v
进入visual选择 - 使用
V
选择行 - 使用
ctrl v
进行方块选择
选择后可以用d
剪贴,或则y
复制
命令模式 ¶
substitute替换命令 ¶
- 命令格式
:[range] s[ubstitute]/{pattern}/{string}/[flags]
[range]
表示范围:10,20
表示10-20行,%
表示全部[pattern]
想要替换的字符串[string]
替换后文本[flags]
替换的标志g
全局范围内执行c
表示确认,可以确认或者拒绝修改n
报告匹配次数 不替换,用来查询匹配次数
命令行执行normal命令 ¶
格式
1 | :normal <command> |
用途:使用V
选中多行,然后:normal I"
在每行前面添加"
多文件切换 ¶
- 打开多文件
:e {FileName}
- Buffer缓冲区切换
:ls
列举当前缓冲区:b [num]
跳转到第[num]
个缓冲区:bpre
:bnext
:bfirst
:blast
:b [BufferName]
+ Tab补全
- 窗口
- 水平分割窗口:
<Ctrl w> s
:sp {FileName}
水平分割并打开新窗口 - 垂直分割窗口:
<Ctrl w> v
:vs
- 切换窗口
<Ctrl w> w
循环切换窗口<Ctrl w> h
切换到左边窗口<Ctrl w> j
切换到下边窗口<Ctrl w> k
切换到上边窗口<Ctrl w> l
切换到下边窗口
- 移动窗口
<Ctrl w> H
将当前窗口移动到左边 ,JKL同理
- 重排窗口
<Ctrl w> =
使所有窗口等宽等高<Ctrl w> _
最大化活动窗口的高度:[num]<Ctrl w> _
将高度设为[num]
行<Ctrl w> |
最大化活动窗口的宽度
- 水平分割窗口:
- Tab(标签页)操作
tabe[dit] {FileName}
在新标签页打开文件<Ctrl w> T
将当前窗口移动到新标签页tabc[lose]
关闭当前标签页及所有窗口tabo[nly]
保留当前标签页,关闭其他所有标签页tabn[ext]{N}
{N}gt
切换到编号为N的标签页tabn[ext]
gt
切换到下一个标签页tabp[revious]
gT
切换到上一个标签页
Vim文本对象 ¶
[number]<command>[text object]
:格式[number]
表示操作次数<command>
命令:d
删除,c
改变,y
复制[text object]
表示要操作的文本对象
- 文本对象
iw
当前单词aw
当前单词与当前单词之后的空格is
当前句子,as
同ip
当前段落i +[ ]
i(
小括号内内容,不包括小括号a(
小括号及小括号内容- 类似还有
[]
{}
<>
""
''
Vim复制粘贴 ¶
-
normal模式下复制粘贴
-
y(yank)
复制 -
d
剪贴 -
p(put)
粘贴 -
用
v(visual)
选中要复制的地方,再用d y p -
配合文本对象
-
-
insert模式下复制粘贴
-
粘贴代码格式混乱解决办法
- 当设置了
autoindent
(自动缩进)后,粘贴代码缩进可能会错乱 - 解决办法:
- 粘贴前使用命令:
:set paste
- 粘贴后撤销上一条命令:
:set nopaste
- 粘贴前使用命令:
- 当设置了
-
寄存器
-
Vim操作的是vim寄存器,而不是系统剪贴板
-
指定寄存器
-
使用
"{register}
作为前缀 执行 复制剪贴粘贴 命令时,可以指定寄存器 -
不指定默认使用无名寄存器 无名寄存器指定为
""
两个双引号 -
示例
1
2
3"add # 剪贴该行至a寄存器
"byy # 复制该行至b寄存器
"ap # 粘贴a寄存器内容 -
常见寄存器
寄存器符号 含义 a-z
有名寄存器 "0
复制专用寄存器 "+
复制到系统剪贴板 %
当前文件名 ".
上次插入文本 -
将系统剪贴板与无名寄存器关联
1
set clipboard=unnamed
-
-
Vim宏 ¶
宏的使用分为 录制 和 回放
- 录制:
- 使用
q{reg}
来录制,同时使用q
来结束录制 - 使用
q{register}
选择要保存的寄存器,把录制的命令保存到其中
- 使用
- 回放
- 使用
@{rigister}
回放寄存器中保存的一系列命令
- 使用
Vim补全 ¶
命令 | 补全类型 |
---|---|
Ctrl n |
普通关键字补全(向下) |
Ctrl p |
普通关键字补全(向上) |
Ctrl x Ctrl f |
文件名补全 |
Ctrl x Ctrl n |
当前缓冲区关键字 |
Ctrl x Ctrl i |
包含文件关键字 |
Ctrl x Ctrl ] |
标签文件关键字 |
Ctrl x Ctrl k |
字典查找 |
Ctrl x Ctrl l |
整行补全 |
Ctrl x Ctrl o |
全能(Omni)补全(可能需要安装插件) |
Vim配置 ¶
vim配置 ¶
1 | " 主题 |
Vim映射 ¶
1 | " 主题 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Forgo7ten'blog!
评论