# Vim
# 常用快捷键
# 普通模式 normal mode
# 光标移动
| 按键 | 功能 | 辅助记忆 |
|---|---|---|
h j k l | 上/下/左/右移动 | ←↑↓→ |
w/W | 移动到下个单词开头(标点视为单词/跳过标点) | word |
e/E | 移动到单词结尾(标点视为单词/跳过标点) | end |
b/B | 移动到上个单词开头(标点视为单词/跳过标点) | back |
0 | 移动到行首 | hard ⇤ |
^ | 移动到行首的非空白字符 | soft ⇤ |
$ | 移动到行尾 | ⇥ |
H | 当前屏幕的第一行 | High |
M | 当前屏幕的中间 | Middle |
L | 当前屏幕的最后一行 | Low |
gg | 移动到文件第一行 | Go to Top |
G | 移动到文件最后一行 | Go to EOF |
5G | 移动到文件第5行 | Go to line5 |
% | 匹配括号 | |
*/# | 向下/上匹配当前单词 |
# 查找
| 按键 | 功能 | 辅助记忆 |
|---|---|---|
f{char}/F{char} | 在行内向下/向上查找字符{char}(光标在字符上) | find |
t{char}/T{char} | 在行内向下/向上查找字符{char}(光标在字符前) | till |
;/, | 与f/F/t/T结合使用,查找顺序相同/相反的下一个匹配项 | / |
/pattern | 文档内向下查找匹配项 | / |
?pattern | 文档内向上查找匹配项 | / |
n/N | 与/和?结合使用,查找顺序相同/相反的下一个匹配项 | next |
s/S{char}{char} | 文档内向下/上查找匹配项(vim.sneak插件),;下一个匹配项 | sneak |
# 文本操作
| 按键 | 功能 | 辅助记忆 |
|---|---|---|
yy | 复制当前行 | yank |
5yy | 复制 5 行 | 5*yank |
yw | 复制当前单词(光标所在到单词结尾)(包含其后空格) | yank word |
yaw | 复制当前单词(包含其后空格) | yank around word |
yiw | 复制当前单词(不包含其后空格) | yank inside word |
dd | 剪切当前行 | delete |
5dd | 剪切 5行 | 5*delete |
dw/dW | 剪切当前单词(光标所在到单词结尾)(包含其后空格)(不包含/包含标点) | delete word |
daw/daW | 剪切当前单词(包含其后空格) | delete around word |
diw/diW | 剪切当前单词(不包含其后空格) | delete inside word |
D | 剪切, 从光标位置到行末 | Delete ⇥ |
p/P | 在光标后/前粘贴 | paste |
x/X | 剪切掉当前/前一个字符,不进入插入模式 | |
J | 去掉行尾的换行符,即连接两行 | Join |
u | 撤销 | undo |
<ctrl-r> | 重做 | redo |
# 插入模式 insert mode
| 按键 | 功能 | 辅助记忆 |
|---|---|---|
i | 从光标前开始插入字符 | insert |
I | 从行首开始插入字符 | Insert |
a | 从光标后开始插入字符 | append |
A | 从行尾开始插入字符 | Append |
o | 在当前行之下另起一行插入字符 | open a new line |
O | 在当前行之上另起一行插入字符 | Open a new line |
r | 替换当前字符 | replace |
R | 替换连续的几个字符 | Replace |
cw/cW | 替换当前单词(不包含/包含标点) | change |
C | 替换光标所在行光标后面的内容 | Change |
# 可视模式 visual mode
| 按键 | 功能 | 辅助记忆 |
|---|---|---|
v | 选择字符 | visual |
V | 选择行 | Visual line |
<ctrl-v> | 选择块 | visual block |
gv | 重复上次的高亮区域 | |
o | 结合可视模式用的o,回到活动端点 | |
vw | 选择当前单词(光标所在到单词结尾) | visual word |
vaw | 选择单词(包含其后空格) | visual around world |
viw | 选择单词(不包含其后空格) | visual inside world |
vit | 选择标签内的内容(html) | visual inside tags |
# 命令模式 excute mode
# 替换命令:
:s/target/replacement/:替换当前行的第一个target为replacement
:s/target/replacement/g:替换当前行的所有的target为replacement
:n,$s/target/replacement/:替换第n到最后一行的第一个target为replacement
:n,$s/target/replacement/g:替换第n到最后一行的所有的target为replacement
:%s/target/replacement:替换所有行的第一个target为replacement
:%s/target/replacement/g:替换所有行的所有的target为replacement
# 文件命令:
:e <path/to/file>: 打开一个文件:w:保存:saveas <path/to/file>:另存为<path/to/file>:x,ZZ或:wq:保存并退出 (:x表示仅在需要时保存,ZZ不需要输入冒号并回车):q!: 退出不保存:qa!强行退出所有的正在编辑的文件,就算别的文件有更改。:bn和:bp: 切换下一个或上一个文件。
# 实用操作
.:重复上一次的命令N<command>:重复某个命令N次<start position><command><end position>区域选择
<action>a<object>或<action>i<object>假设有一个字符串
(map (+) ("foo")).而光标键在第一个o的位置。vi"→ 会选择foo.va"→ 会选择"foo".vi)→ 会选择"foo".va)→ 会选择("foo").v2i)→ 会选择map (+) ("foo")v2a)→ 会选择(map (+) ("foo"))
宏录制:
qa操作序列q,@a,@@qa把操作记录在寄存器 a。@areplay被录制的宏。@@replay最新录制的宏。
gU(变大写);gu(变小写)。