Skip to content

Latest commit

 

History

History
202 lines (200 loc) · 9.53 KB

vim.md

File metadata and controls

202 lines (200 loc) · 9.53 KB

vim 快捷键操作

  • <C-h> 删除前一个字符
  • <C-w> 删除前一个单词
  • <C-u> 删除至行首
  • <C-[> 切换至普通模式
  • <C-o> 从插入模式切换至“插入-普通”模式
  • zz 重绘屏幕,让当前行处于屏幕中央
  • daw 删除一个单词
  • dl 删除光标所在字符
  • dap 删除一个段落
  • * 高亮单词
  • n/N 向后/前进
  • ;/, 向后/前进
  • f{char} 在当前行查找字符
  • g~ 大小写转换
  • gU/gu 转换大/小写
  • <C-r>{register} 将寄存器中的文本插入到光标当前所在位置
  • <C-r><C-p>{register} 同上,但可以修正缩进
  • <C-a> 普通模式下数值+1
  • <C-x> 普通模式下数值-1
  • <C-r>= 插入模式下使用表达式寄存器计算加减乘除
  • R 从普通模式进入替换模式,退出替换模式
  • gR 从普通模式进入虚拟替换模式,会把Tab当空格
  • c 普通模式下进入修改文本
  • v 进入面向字符的可视模式
  • V 进入面向行的可视模式
  • <C-v> 进入面向列的可视模式
  • gv 重选上次的高亮选区
  • o 可视模式下可切换活动端
  • >> 向右缩进
  • <C-v>jj$ A; 在每一行末尾添加“;”
  • : 进入命令模式(Ex)
  • :2,5p 打印第2至5行('<,'>表示已高亮的选区)
  • : $ 光标跳转到文件末尾
  • :% 当前文件所有行
  • :6copy. 将第六行复制到光标当前所在行位置(copy可以简写为t或co)
  • 普通模式下快速跳回光标原来位置
  • @: 重复上次执行过的命令
  • :'<,'>normal . 对已高亮选区执行普通模式下的.操作
  • <C-r><C-w> 命令行下,将光标处的单词复制到命令行中
  • q/ 打开查找命令历史的命令行窗口
  • q: 打开Ex命令历史的命令行窗口
  • <C-f> 从命令行模式切换到命令行窗口
  • :!python % 调用shell的python命令执行当前文件
  • :read !{cmd} 将shell命令的标准输出重定向到当前缓冲区
  • :write !{cmd} 将当前缓冲区内容作为标准输入传给shell命令
  • :ls 列出所有缓冲区
  • :bnext 切换到下一个缓冲区(bnext!表示强制切换)
  • :bprev 切换到上一个缓冲区
  • :bfirst 切换到第一个缓冲区
  • :blast 切换到最后一个缓冲区
  • :buffer N 跳转到第N个缓冲区
  • :buffer {buffname} 跳转到buffname缓冲区
  • :bdelete N1 N2 N3 删除N1、N2、N3缓冲区
  • :N,M bdelete 删除编号为N到M的缓冲区
  • :args 显示当前参数列表(缓冲区文件列表)
  • :args {arglist} 设置参数列表(文件列表)
  • :argdo {cmd}在每个缓冲区上执行同一条命令
  • :edit! 强制用文件内容覆盖缓冲区
  • :qa/qall! 强制放弃所有修改
  • <C-w>s 水平切分窗口
  • <C-w>v 垂直切分窗口
  • <C-w>w 在窗口间循环切换
  • <C-w>h/j/k/l 切换到左边/下边/上班/右边的窗口
  • :close 关闭活动窗口(<C-w>c)
  • :only 关闭除活动窗口外的其他窗口(<C-w>o)
  • <C-w>= 使所有窗口等宽、等高
  • <C-w>_ 最大化活动窗口的高度
  • <C-w>| 最大化活动窗口的宽度
  • [N]<C-w>_ 把活动窗口的高度设置为[N]行
  • [N]<C-w>| 把活动窗口的宽度设置为[N]列

  • 窗口重排命令

  • :lcd {path} 为当前窗口设置本地工作目录
  • :windo lcd {path} 为一个标签下的所有窗口设置本地工作目录
  • :tabedit {filename} 在新标签页中打开{filename}
  • <C-w>T 把当前窗口移动到一个新标签页
  • :tabclose 关闭当前标签页及其中的所有窗口
  • :tabonly 关闭除活动标签页之外的所有其他标签页
  • :tabnext {N} 切换到编号为{N}的标签页(或普通模式下{N}gt)
  • :tabnext 切换到下一标签页(或普通模式下gt)
  • :tabprevious 切换到上一标签页(或普通模式下gT)
  • :tabmove [N] 重排标签页
  • :edit %:h<Tab>{/filename} 打开当前缓冲区所在文件夹下的其他文件
  • :set path+={path} 为{:find}命令增加搜索路径
  • :edit . 在文件管理器打开当前文件夹
  • :Explore 显示活动缓冲区所在的目录
  • <C-^> 从文件管理器切换回刚刚正在编辑的文件
  • <C-g> 显示当前文件的文件名和状态
  • :w !sudo tee % > /dev/null 权限不够的情况下保存文件
  • gj/k 根据屏幕行向下/上移动
  • g0 移动到屏幕行的行首
  • g^ 移动到屏幕行的第一个非空白字符
  • g$ 移动到屏幕行行尾
  • w 正向移动到下一单词的开头
  • b 反向移动到当前单词/上一单词的开头
  • e 正向移动到当前单词/下一单词的结尾
  • ge 反向移动到上一单词的结尾
  • W/B/E/gE 面向字符的移动
  • t{char} 正向移动到下一个{char}所在的前一个字符
  • T{char} 反向移动到上一个{char}所在的后一个字符
  • d/{pattern}<CR> 删除光标当前所在位置到{pattern}所匹配位置第一个字母之前的所有文本
  • vi}/>/t/]/'/"/)/` 在可视模式下选取大括号/尖括号/标签/方括号/单引号/双引号/圆括号/反引号中的文本
  • va}/>/t/]/'/"/)/` 在可视模式下选取大括号/尖括号/标签/方括号/单引号/双引号/圆括号/反引号中的文本(包含符号本身)

  • 文本对象

  • iw 当前单词

  • aw 当前单词及一个空格

  • iW 当前字串

  • aW 当前字串及一个空格

  • is 当前句子

  • as 当前句子及一个空格

  • ip 当前段落

  • ap 当前段落及一个空行

  • m{a-zA-Z} 对光标所在位置进行标记,小写字母在当前缓冲区可见,大写字母全局可见

  • `{mark} 跳转到标记所在行

  • `` 当前文件中跳转之前的位置

  • `. 上次修改的地方

  • `^ 上次插入的地方

  • `[ 上次修改或复制的起始位置

  • `] 上次修改或复制的结束位置

  • `< 上次高亮选区的起始位置

  • `> 上次高亮选区的结束位置

  • dt{char} 删除光标所在位置到{char}所在位置(不包含)的文本

  • % 可以在开/闭的括号之间跳转

  • <C-o> 普通模式下跳转回光标上一次所在位置

  • <C-i> 普通模式下光标前进到跳转之前的位置(与<C-o>对应)

  • :changes 查看改变列表

  • gi 回到上次插入的位置并进入插入模式

  • gf 文件跳转

  • :set suffixesadd+=.py 指定跳转时搜寻的文件扩展名

  • :set path? 查看path的值

  • :vimgrep /{pattern}/ ** 查找代码中所有出现{pattern}的地方

  • "a-"z 有名寄存器

  • "" 无名寄存器

  • "0 复制专用寄存器

  • "_ 黑洞寄存器(不缓存)

  • "add 删除行的文本缓存到"a寄存器

  • :reg "0 查看寄存器内容

  • "+ 剪贴板

  • "* 剪贴板(在X11中表示用鼠标中键粘贴)

  • vep 在可视模式下,p会替换高亮选区的文本

  • gp 光标的位置移到被粘贴出来的文本结尾

  • :set pastetoggle=<f5> 设置用<F5>来切换paste选项

  • q{register}{operations}q 普通模式下开始和结束录制宏

  • @{register} 普通模式下调用宏

  • @@ 重复上次调用过的宏

  • :'<, '>normal @{register} 在高亮选区中并行的方式执行宏

  • qA{operations}q 将在寄存器a后面增加录制

  • :edit! 放弃对当前缓冲区的修改

  • :argdo normal @{register} 在参数列表的所有缓冲区内执行宏

  • /\c{pattern} 忽略大小写查找

  • /\C{pattern} 强制区分大小写查找

  • /\v#(regexp) 开启very magic搜索模式用正则表达式搜索文本

  • /\V{pattern} 按原义查找

  • /\v<(\w+)_s+\1> 匹配连续的重复单词(\1~\9表示对()分组的引用,\0代表整个匹配内容, <>为单词界定符号, _s为空格或换行符)

  • {pattern1}\zs{pattern2}\ze{pattern3} 从匹配结果中选择一部分(匹配边界)

  • <C-r> 自动补全查找单词

  • :/{pattern}//gn 统计某个模式匹配的行数(如果不填pattern,则使用上次搜索时的pattern)

  • /{pattern}/e 搜索pattern,并将光标置于匹配结果的末尾

  • gU//e 将光标所在位置的搜索匹配结果转为大写

  • // 重复上次的搜索,包括光标定位到匹配结果的末尾

  • :%s/\v'(([^']|'\w)+)'/“\1”/g 将单引号替换为双引号

  • incsearch 搜索结果高亮配置选项

  • :[range]s[ubstitute]/{pattern}/{string}/[flags] 替换命令

  • :%s/{pattern}/{string}/gc 控制每一处匹配结果是否进行替换(y替换此处匹配,n忽略此处匹配,q退出替换过程,l替换此处匹配后退出,a替换此处与之后所有的匹配,向上滚动屏幕,向下滚动屏幕)

  • :%s//=@0/g 使用复制专用寄存器中的内容替换上次搜索匹配的结果

  • g& 在整个文件范围内重复上次的替换操作

  • :&& 对当前行重新执行上次的替换操作

  • :%&& 对整个文件范围内重复上次的替换操作

  • :%s/\v^([^,]),([^,]),([^,]*)$/\3,\2,\1 交换CSV中的列

  • :[range] global[!] /{pattern}/ [cmd] 默认在当前文档范围内执行cmd命令(!表示对所有不匹配的区域进行cmd操作,缺省cmd为print)

  • :g/{pattern}/d 删除匹配项

  • :v/{pattern}/d 删除非匹配项

  • :g/{start}/ .,{finish} [cmd] 广义的global命令


  • quickfix列表命令

  • :cnext 跳转到下一项
  • :cprev 跳转到上一项
  • :cfirst 跳转到第一项
  • :clast 跳转到最后一项
  • :cnfile 跳转到下一个文件中的第一项
  • :cpfile 跳转到上一个文件中的最后一项
  • :cc N 跳转到第n项
  • :copen 打开quickfix窗口
  • :cclose 关闭quickfix窗口
  • :grep {string} * 在vim中使用grep跨文件查找(cnext, cprev用于跳转)
  • <C-p> or <C-n> 插入模式下自动补全
  • <C-y> 确认使用当前选中的匹配选项
  • <C-e> 还原最早输入的文本
  • <C-h> 从当前匹配项中删除一个字符
  • <C-l> 从当前匹配项中增加一个字符
  • {char} 中止自动补全并插入字符{char}
  • <C-x><C-k> 使用字典中的单词进行自动补全
  • <C-x><C-l> 自动补全整行文本
  • <C-x><C-f> 自动补全文件名
  • <C-x><C-o> 根据上下文自动补全