# 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/:替换当前行的第一个targetreplacement

:s/target/replacement/g:替换当前行的所有的targetreplacement

  • :n,$s/target/replacement/:替换第n到最后一行的第一个targetreplacement

:n,$s/target/replacement/g:替换第n到最后一行的所有的targetreplacement

  • :%s/target/replacement:替换所有行的第一个targetreplacement

:%s/target/replacement/g:替换所有行的所有的targetreplacement

# 文件命令:

  • :e <path/to/file> : 打开一个文件
  • :w :保存
  • :saveas <path/to/file> :另存为 <path/to/file>
  • :xZZ: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。
    • @a replay被录制的宏。
    • @@ replay最新录制的宏。
  • gU (变大写);gu (变小写)。

上次更新: 9/5/2020, 5:06:58 PM