vim 快捷键大全

1

后续更新:https://www.yuque.com/wangdd/...

全局

  • 文件另存为 :saveas filename
  • 关闭当前窗口 :close

光标

  • 移动光标到页面顶部,中部,底部 H,M,L
  • 移动到下个单词开头,结尾 w,e
  • 移动到上个单词开头 b
  • 移动光标 上下左右 k,j,h,l
  • 移动到匹配的括号 %
  • 移动到行首 0
  • 移动到行首非空白字符 ^
  • 移动到行尾非空白字符 g
  • 移动到行尾 $
  • 移动到文件第一行 gg
  • 移动到文件最后一行 G
  • 移动到第10行 10G
  • 移动屏幕使光标居中 zz
  • 跳转到上一次的位置 ctrl+o 例如你在159行,然后你按了gg, 光标调到了第一行,然后你按ctrl+o, 光标会回到159行
  • 跳转到下一次的位置 ctrl+i
  • 跳转到下个同样单词的地方 *
  • 跳转到上个同样单词的地方 #
  • 跳到字符a出现的位置 fa, Fa
  • 调到字符a出现的前一个位置 ta, Ta
  • 跳到之前的位置 ``
  • 跳到之前修改的位置 `.
  • 跳到选区的起始位置 `<
  • 跳到选区的结束位置 `>

滚动屏幕

  • 向下,向上滚动一屏 ctrl+b, ctrl+f
  • 向下,向上滚动半屏 ctrl+d, ctrl+u

插入模式

  • 光标前、后插入 i,a
  • 行首,行尾插入 I, A
  • 在当前行上、下另一起行插入 O, o
  • 从当前单词末尾插入 ea
  • 退出插入模式 esc
  • 删除前一个单词 ctrl+w
  • 删除到行首 ctrl+u

编辑

  • 替换光标下的字符 r
  • 将下一行合并到当前行 J
  • 将下一行合并到当前行,并一种中间的空白字符 gJ
  • 清空当前行,并进入插入模式 cc
  • 清空当前单词,并进入插入模式 cw
  • 撤销修改 u
  • 删除光标下的一个字符,然后进入插入模式 s

选择文本

  • 普通光标选择, 进入选择文本模式 v
  • 行选择,进入选择文本模式 V
  • 块选择,进入选择文本模式 ctrl+v 在多行行首插入注释#
  • ctrl+v 然后选择快,然后输入I, 然后输入#, 然后按esc
  • 注意,输入I指令时,光标只会定位到一个位置,编辑的内容也只是在一个位置,但是按了esc后,多行都会出现#
  • 进入选择文本模式之后
  • 选择光标所在单词(光标要先位于单词上) aw
  • 选择光标所在()区域,包括(), 光标要先位于一个括号上 ab
  • 选择光标所在[]区域,包括[], 光标要先位于一个括号上 aB
  • 选择光标所在()区域,不包括(), 光标要先位于一个括号上 ib
  • 选择光标所在[]区域,不包括[], 光标要先位于一个括号上 iB
  • 退出可视化区域 esc

选择文本命令

  • 向左右缩进 <, >
  • 复制 y
  • 剪切 d
  • 大小写转换 ~

标记

  • 显示标记列表 :marks
  • 标记当前位置为a ma
  • 跳转到标记a的位置 `a

剪切删除

  • 剪切当前行 dd
  • 剪切2行 2dd
  • 剪切当前单词 dw
  • 从光标所在位置剪切到行尾 D, d$
  • 剪切当前字符 x
  • 删除单引号中的内容 di' da’ 删除包括'
  • 删除双引号中的内容 di" da" 删除包括"
  • 删除中括号中的内容 di[ da[ 删除包括[
  • 删除大括号中的内容 di{ da{ 删除包括{
  • 删除括号中的内容 di( da( 删除包含(
  • 从当前光标位置,删除到到字符a dta

global命令

  • 删除所有不包含匹配项的文本行 :v/re/d re可以是字符,也可以是正则
  • 显示所有不包含匹配项的文本行 :v/re/p re可以是字符,也可以是正则
  • 删除包含匹配项的行 :g/re/d re可以是字符,也可以是正则
  • 显示所有包含匹配项的行 :g/re/p re可以是字符,也可以是正则

文本对象

  • 当前单词 iw
  • 当前单词和一个空格 aw
  • 当前句子 is
  • 当前句子和一个空格 as
  • 当前段落 ip
  • 当前段落和一个空行 ap
  • 一对圆括号 a) 或 ab
  • 圆括号内部 i) 或 ib
  • 一对花括号 a}或 aB
  • 花括号内部 i}或 iB
  • a表示匹配两点和两点之间的字符), }, ], > , ‘, “, `, t(xml)
  • i表示匹配两点内部之间的字符

复制

  • 复制当前行 yy
  • 复制2行 2yy
  • 复制当前单词 yw
  • 从光标所在位置复制到行尾 y$
  • 复制单引号中的内容 yi' ya' 复制包括'
  • 复制双引号中的内容 yi" ya” 复制包括"
  • 复制中括号中的内容 yi[ ya[ 复制包括[
  • 复制大括号中的内容 yi{ ya{ 复制包括{

粘贴

  • 在光标后粘贴 p
  • 在光标前粘贴 P

保存退出

  • 保存 w
  • 保存并退出 wq
  • 不保存退出 q!
  • 保存所有tab页并退出 wqa

查找

  • 向下查找key /key
  • 向上查找key ?key
  • 下一个key n
  • 上一个key N
  • 移除搜索结果高亮 :noh
  • 设置搜索高亮 :set hlsearch
  • 统计当前模式匹配的个数 :%s///gn

字符串替换

全文将old替换为new %s/old/new/g
全文将old替换为new, 但是会一个一个确认 %s/old/new/gc

多文件搜索

  • 多文件搜索 :vimgrep /key/ {file} vimgrep /export/ */
  • 切换到下一个文件 cn
  • 切换到上一个文件 cp
  • 查看搜索结果列表 copen
  • 查看文件缓冲区 :ls

窗口分割

  • 水平分割窗口 :split 默认split仅针对当前文件,如果在新窗口打开新的文件,可以:split file
  • 垂直分割窗口 :vsplit
  • 打开空白的窗口 :new
  • 关闭分割的窗口 ctrl+wq, :close 有时候ctrl+wq不管用,需要用close
  • 窗口之间切换 ctrl+ww
  • 切换到左边窗口 ctrl+wh
  • 切换到右边窗口 ctrl+wl
  • 切换到下边窗口 ctrl+wj
  • 切换到上边窗口 ctrl+wk
  • 关闭所有窗口 :qall 这表示 "quit all" (全部退出)。如果任何一个窗口没有存盘,Vim 都不会退出。同时光
  • 标会自动跳到那个窗口,你可以用 ":write" 命令保存该文件或者 ":quit!" 放弃修改。
  • 保存所有窗口修改后的内容 :wall 如果你知道有窗口被改了,而你想全部保存
  • 关闭所有窗口,放弃所有修改 :qall! 注意,这个命令是不能撤销的。
  • 保存所有修改,然后退出vim :wqall

窗口更多内容
http://vimcdoc.sourceforge.ne...

  • 录制宏a qa
  • 停止录制宏 q

标签页

  • 新建标签页 tabnew
  • 在新标签页中打开file tabnew file
  • 切换到下个标签页 gt
  • 切换到上个标签页 gT
  • 关闭当前标签页 :tabclose, :tabc
  • 关闭其他标签页 :tabo, :tabonly
  • 在所有标签页中执行命令 :tabdo commad :tabdo w

文本折叠

  • 折叠文本内容 zfap http://vimcdoc.sourceforge.ne...
  • 打开折叠 zo
  • 关闭折叠 zc
  • 展开所有折叠 zr
  • 打开所有光标行上的折叠用 zO
  • 关闭所有光标行上的折叠用 zC
  • 删除一个光标行上的折叠用 zd
  • 删除所有光标行上的折叠用 zD

设置

  • 设置vim编辑器的宽度 set columns=200

自动补全

  • 使用自动补全的下一个列表项 ctrl+n
  • 使用自动补全的上一个列表项 ctrl+p
  • 确认当前选择项 ctrl+y
  • 还原最早输入项 ctrl+e

杂项

  • 在vim中执行外部命令 :!ls -al
  • 查看当前光标所在行与百分比 ctrl+g
  • 挂起vim, 使其在后台运行 ctrl+z
  • 查看后台挂起的程序 jobs
  • 使挂起的vim前台运行 fg 如果有多个后台挂起的任务, 则需要指定任务序号,如 :fg %1
  • 在每行行尾添加字符串abc :%s/$/abc
  • 在每行行首添加字符串abc :%s/^/abc
  • 每行行尾删除字符串abc :%s/$/abc
  • 每行行首删除字符串abc :%s/^/abc
  • 删除含有abc字符串的行 :g/abc/d
  • 删除每行行首到特定字符的内容,非贪婪匹配 : %s/^.{-}abc// var = abc123, 会删除var = abc
  • 调换当前行和它的下一行 ddp
  • 全文格式化 gg 跳到第一行 shift v shift g =

参考:

changelog

  • v0.0.1 2019/6/12

如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

载入中...