ZZ :wq:保存并退出(等价于 )ZQ :q!:放弃修改并退出(等价于 )# 普通模式直接按,不用输入冒号
ZZ # 保存 + 退出
ZQ # 强制退出 + 放弃修改vim file.txt:打开文件vim +12 file.txt:打开文件并跳到第 12 行vim +/keyword file.txt:打开文件并搜索 keywordi:在光标前进入插入模式a:在光标后进入插入模式o:在下方新开一行并进入插入模式Esc:回到普通模式:w:保存:wq:保存并退出:q!:放弃修改并退出# 最小工作流
vim app.js
i
# 输入内容
Esc
:wqh:左移j:下移k:上移l:右移w:跳到下一个单词开头b:跳到上一个单词开头e:跳到单词结尾0:跳到行首^:跳到非空行首$:跳到行尾gg:跳到文件开头G:跳到文件结尾:42:跳到第 42 行Ctrl+d:向下滚动半屏Ctrl+u:向上滚动半屏v:字符选中V:按行选中Ctrl+v:块选中# 找函数并选中附近几行
/function
n
V
5jx:删除当前字符dd:删除整行dw:删除到词尾D:删除到行尾yy:复制当前行p:在后方粘贴u:撤销Ctrl+r:重做.:重复上一次修改ciw:修改当前单词C:修改到行尾>>:当前行右缩进<<:当前行左缩进gg=G:格式化整个文件# 连续修改多个同名变量
/old_name
ciwnew_name
Esc
n
./pattern:向下搜索?pattern:向上搜索n:下一个匹配N:上一个匹配*:向下搜索当前词#:向上搜索当前词:s/old/new/g:替换当前行:%s/old/new/g:替换整个文件:%s/old/new/gc:替换整个文件并逐个确认qa:开始录制宏到寄存器 aq:结束录制宏@a:执行寄存器 a 的宏# 先确认再替换
/TODO
n
:%s/TODO/DONE/gc:e other.txt:打开另一个文件:sp:水平分屏:vsp:垂直分屏Ctrl+w h:切到左侧窗口Ctrl+w l:切到右侧窗口Ctrl+w =:平衡窗口大小:tabnew:新建标签页gt:下一个标签页gT:上一个标签页ma:设置标记 a`a:跳回标记 a 的精确位置Ctrl+o:回到上一个跳转位置# 左右对照两个文件
:vsp config.example.yml
Ctrl+w l
/timeout
Ctrl+w h
/timeoutza:打开/关闭当前折叠zA:递归切换当前折叠zo:打开当前折叠zO:递归打开当前折叠zc:关闭当前折叠zC:递归关闭当前折叠zM:关闭所有折叠zR:打开所有折叠zm:增加折叠层级(更多折叠)zr:减少折叠层级(更少折叠)zd:删除当前折叠zE:删除窗口内所有折叠zj:跳到下一个折叠处zk:跳到上一个折叠处[z:跳到当前折叠的开头]z:跳到当前折叠的结尾z=:显示折叠建议(需要 manual fold 或基于缩进)# 快速折叠/展开当前区块
za
# 关闭所有折叠专注顶部
zM
# 打开所有折叠
zRg~:反转当前字符大小写gUU:当前行转大写guu:当前行转小写gUaw:当前单词转大写guaw:当前单词转小写Ctrl+a:数字加 1Ctrl+x:数字减 15Ctrl+a:数字加 510Ctrl+x:数字减 10ga:显示光标处字符的 ASCII/Unicode 值g8:显示光标处 UTF-8 字节序列# 快速递增数字
Ctrl+a
10Ctrl+x
# 整行转大写
gUUzt:当前行移到屏幕顶部zz:当前行移到屏幕中部zb:当前行移到屏幕底部z.:重画并将光标行放到屏幕中部(等价 zz)z-:重画并将光标行放到屏幕底部(等价 zb)z<CR>:重画并将光标行放到屏幕顶部(等价 zt)Ctrl+y:向上滚动一行(保持光标位置)Ctrl+e:向下滚动一行# 搜索匹配后快速将匹配行居中
/TODO
zz:reg:查看所有寄存器内容"ay:复制到寄存器 a"bdd:删除到寄存器 b"ap:粘贴寄存器 a 的内容"+y:复制到系统粘贴板(需要 +clipboard 支持)"+p:粘贴系统粘贴板内容gp:粘贴并把光标移到新内容之后gP:在前方粘贴并把光标移到新内容之后:ls:列出所有缓冲区# 查看寄存器
:reg
# 复制到命名寄存器 a
"ayy
# 粘贴并移动光标到内容之后
gpvim -o file1 file2:水平分屏打开多个文件vim -O file1 file2:垂直分屏打开多个文件vim -p file1 file2:多标签页打开(Vim 7+)vim -d file1 file2:Diff 模式打开两文件对比:args:显示参数列表:next:下一个文件(参数列表):prev:上一个文件:argdo {cmd}:对参数列表所有文件执行命令:bufdo {cmd}:对所有缓冲区执行命令:all:为参数列表每个文件开窗口Ctrl+w T:将当前窗口移到新标签页# 垂直分屏对比两个配置
vim -O config.yml config.example.yml
# Diff 模式对比
vim -d old.txt new.txtciw:改当前单词C:改到行尾yyp:复制当前行并在下方插入V:选中当前行>:右移选中的代码gg=G:全文件格式化*:搜索当前变量下一处ci(:修改括号内内容g;:回到最近一次修改位置.:再执行一次刚才的修改i:在光标前插入a:在光标后插入I:在行首插入A:在行尾插入o:下方开新行并插入O:上方开新行并插入s:删除当前字符后插入S:删除当前行后插入Esc:回普通模式:w:保存:wq:保存退出:q!:强制退出h j k l:基础四向移动w b e ge:按单词移动0 ^ $ g_:行首、非空行首、行尾、非空行尾f{char}:向前跳到字符F{char}:向后跳到字符t{char}:向前跳到字符前gg:文件头G:文件尾H:屏幕顶部M:屏幕中部L:屏幕底部Ctrl+f:下一页Ctrl+b:上一页%:括号配对跳转x X:删除当前字符或前一个字符dd D:删除整行或删除到行尾cw cc C:改单词、改整行、改到行尾r R:替换一个字符或进入替换模式yy yw y$:复制整行、复制到词尾、复制到行尾p P:向后或向前粘贴u Ctrl+r .:撤销、重做、重复上次修改>> << ==:缩进、反缩进、自动缩进当前行iw aw:当前词,或带两边空格的整个词ip ap:当前段落,或整个段落i" a":双引号内,或包含双引号i' a':单引号内,或包含单引号i( a(:圆括号内,或包含圆括号i[ a[:方括号内,或包含方括号i{ a{:花括号内,或包含花括号diw ciw yiw:删除、修改、复制当前词ci" da(:修改引号内内容,删除整组括号内容/pattern:向下搜索?pattern:向上搜索n N:下一个和上一个匹配ma mb:设置标记 a 和 b`a:跳到标记 a 的精确位置'a:跳到标记 a 所在行qa:录制宏到寄存器 a@a:执行寄存器 a 的宏:sp :vsp:水平分屏和垂直分屏Ctrl+w w:切到下一个窗口:tabnew gt gT:新标签页,下一个标签页,上一个标签页i:在光标前进入插入模式a:在光标后进入插入模式o:新开一行并进入插入模式Esc:输入结束后回普通模式-- INSERT --:左下角看到这个提示,说明已经在插入模式:q!:放弃修改并退出:wq:保存并退出:w:只保存不退出:w !sudo tee %:无权限写入时可借助 sudo 保存:set paste:临时启用粘贴模式:set nopaste:粘贴结束后关闭粘贴模式gg=G:重新格式化当前文件:set ts? sw? et?:查看缩进相关选项:set ignorecase:默认忽略大小写:set smartcase:模式含大写字母时自动区分大小写/\\cpattern:当前搜索强制忽略大小写/\\Cpattern:当前搜索强制区分大小写:s:当前行做替换:%s:全文件做替换:%s/foo/bar/gc:全文件替换并逐个确认qa:录制一段宏@a:执行寄存器 a 中的宏.:重复最近一次修改