vim

vim #

bash
vim:
  -R    readonly
  -m    no modify (disable write)
  -n    no swap file (memory only)
vim -R FILE    (view FILE)
vim -d FILE1 FILE2    (vimdiff FILE1 FILE2)

Normal模式 #

跳转 #

bash
# 跳转到第一行/最后一行
gg/G

# 跳转到下一行/上一行
j/k
# 跳转到下三行
3j
# 跳转到下一行(屏幕行,非缓冲行)
gj
# 跳转到下三行(屏幕行,非缓冲行)
3gj

缩进 #

bash
# 当前行自动缩进
==

# 接下来5行自动缩进
5==

# 当前行到最后一行自动缩进
=G

# 全局自动缩进(可分为两部分独立执行,即先`gg`定位到第一行,再执行`=G`)
gg=G

指令 #

replace #

bash
# 替换一次
:s/aaa/bbb/

# 1到100行替换
:1,100s/aaa/bbb/g

# 全局替换
:%s/aaa/bbb/g

write #

bash
# 保存文件
:w[rite]

# 另存为(`:w %` 等同于 `:w`,%表示当前文件路径)
:w target-file

# 保存文件(忽略只读属性)
:w!

# 保存后退出
:wq

# 以root身份进行保存
:w !sudo tee %

# 以另一用户身份保存到指定文件
:w !sudo -u bob tee target-file

# 查看当前有哪些变更未保存(即文件内容与缓冲内容进行比较,diff命令中的`-`参数表示从标准输入中读取内容)
:w !diff % -

# 其他复杂用法(write指令本质上就是输出当前缓冲内容到文件或标准输出)
:w !grep -i apple | awk '{print $2}' | tee target-file

edit #

bash
# 重新加载当前文件内容
:e[dit]

cd, pwd #

bash
# 变更当前工作目录
:cd target-dir

# 变更当前工作目录为用户主目录
:cd

# 显示当前工作目录
:pwd

vimgrep #

bash
# 查找内容
:vimgrep /pattern/[g][j] files...
#   g   Search one, not all
#   j   No jump if matches

# 打开帮助文档
:help vimgrep

# 快速跳转下一处/上一处
:cn[ext]
:cp[revious]

# 显示结果列表
:cl[ist]

# 打开快速跳转列表
:cw[indow]

快捷键 #

bash
# 删除前一个单词(仅Insert模式下)(相当于Normal模式下的`db`)
ctrl-w
# 删除前一个字符(仅Insert模式下)
ctrl-h
# 删除当前行光标前所有字符(仅Insert模式下)(相当于Normal模式下的`d0`)
ctrl-u
# 删除当前行光标后所有字符(仅Insert模式下)(相当于Normal模式下的`d$`)
ctrl-k

# 光标后退/前进:
ctrl-o
ctrl-i

# 选择左/右窗口
ctrl-w, l
ctrl-w, h
# 选择另一个窗口
ctrl-w, w

# 折叠/取消折叠行
z, c
z, o
# 跳转下/上一个差异(仅Diff模式下)
], c
[, c
# 获取/放置光标所在行的差异(仅Diff模式下)
d, o
d, p
# 更新差异视图(仅Diff模式下)
:diffu
:diffupdate

设置 #

bash
# 设置是否将tab缩进转换为空格
:set [no]expandtab

# 显示/隐藏行号
:set [no]nu[mber]

# 打开/关闭搜索高亮
:set [no]hlsearch

# 打开/关闭粘贴模式
:set [no]paste

Tips #

搜索选中的内容 #

  1. 按v进入视图模式选择文本,按y复制内容或按x剪切内容。
  2. 在Normal模式下输入/,再输入ctrl-r,最后输入双引号,注意不是单引号,将剪贴板中的内容填到/后面,这样就可以搜索了。
2025年7月22日