《Vim实用技巧》命令简单记录

本文将《Vim实用技巧》中涉及的部分命令记录下来(也有一些自己的补充),以备日后快速查找命令使用


  • 技巧1
    • . :重复上次的修改。在插入模式则是指从插入命令开始到Esc退出为止
  • 技巧3、4
    • f{char}:查找光标右边的指定字符
    • :重复上次的查找
    • ,:回退上次的查找
    • F{char}:查找光标左边的指定字符
  • 技巧5
    • cw:删除光标开始到下一个单词前的位置,并进入插入模式
    • *:查找光标所在单词下一次出现的位置,并使所有匹配项高亮
    • #:查找光标所在单词上一次出现的位置,并使所有匹配项高亮
  • 技巧9
    • aw:文本对象,代表一个单词
    • ap:文本对象,代表一段文字
    • daw:删除光标所在单词
  • 技巧10
    • num<C-a>:找到光标右边第一个数字,并加上num(Windows下可能会存在快捷键冲突,导致其他结果)
    • num<C-x>:找到光标右边第一个数字,并减去num
  • 技巧12
    • dl:删除光标所在字符
    • g~{motion}:反转大小写
    • gu{motion}:转换成小写
    • gU{motion}:转换成大写
    • ={motion}:自动缩进
    • c{motion}:修改(删除并进入插入模式)
    • gc{motion}:注释(需安装commentary.vim插件)
    • ae:文件对象,代表全文(需安装textobj-entire插件)
  • 技巧13(插入模式下使用)
    • <C-h>:删除前一个字符(等同退格键)
    • <C-w>:删除前一个单词
    • <C-u>:删除至行首
  • 技巧14(模式切换)
    • <Esc>:切换到普通模式
    • <C-[>:切换到普通模式
    • <C-o>:切换到插入-普通模式(在插入模式按下,切换到普通模式,执行一条命令后回到插入模式)
    • zz:让光标所在行居中(小写z)
    • ZZ:保存并退出vim(大写Z)
  • 技巧15、16(在插入模式下使用)
    • <C-r>{register}:插入指定寄存器(面向字符的寄存器)中的内容,例如<C-r>0
    • <C-r><C-p>{register}:按原义插入寄存器内的文本,并修正不必要的缩进
    • <C-r>=表达式<CR>:使用表达式寄存器计算表达式,并将结果插入文本中
  • 技巧17、18(在插入模式下使用)
    • <C-v>{123}:插入以十进制编码(3位数)的字符
    • <C-v>u{1234}:插入以十六进制编码(4位数)的字符
    • <C-v>{nondigit}:以原义插入非数字字符(u除外)
    • <C-k>{char1}{char2}:插入以二合字母{char1}{char2}表示的字符
  • 技巧19
    • R :由普通模式进入替换模式(用其他字符替换tab字符时,tab字符的长度会被一个字符长度代替,导致该行字符长度变短,其他类似tab的字符同理)
    • gR :由普通模式进入虚拟替换模式(替换时遇到tab字符,保持该行原有长度,其他类似tab的字符同理)
    • r{char} :由普通模式进入替换模式,替换一个字符后回到普通模式
    • gr{char}:由普通模式进入虚拟替换模式,替换一个字符后回到普通模式
  • 技巧20
    • <C-g> :在可视模式和选择模式之间切换。如果处于选择模式,输入的字符会替换所选内容并切换到插入模式
  • 技巧21(普通模式或可视模式下)
    • v :激活面向字符的可视模式
    • V :激活面向行的可视模式
    • <C-v> :激活面向列块的可视模式
    • gv :重选上次的高亮选区
    • o :切换高亮选区的活动端(只在可视模式下)
  • 技巧28
    • 命令行模式下的位置标记
      • 1 :文件的第一行
      • $ :文件的最后一行
      • 0 :虚拟行,位于第一行上方
      • . :光标所在行
      • '< :高亮选区的起始行
      • >' :高亮选区的结束行
      • % :整个文件
      • /str/:匹配字符串str的行
    • :{start},{end} :指定范围
    • :/<html>/+1,/<\/html>/-1p :调整指定的范围大小(其中p(print)代表打印操作)
  • 技巧29
    • :[range]copy{address} :把range范围的内容复制到address指定的行的下方,copy可简写成cot(copy to的含义)
    • :[range]move{address} :把range范围的内容移动到address指定的行的下方,move可简写成m
  • 技巧30
    • :[range]normal 普通模式下的命令序列:在指定范围内执行普通模式命令序列。例如::%normal A; 在所有行后面插入分号,:'<,>'normal .对高亮选区的所有行,执行普通模式下的.命令
  • 技巧31
    • @: :重复上次的Ex命令(Ex命令是指在命令行模式下执行的命令)
  • 技巧32、33(命令行模式下)
    • <Tab> :补全Ex命令,如果有多个候选项,可以连续按<Tab>进行遍历或<S-Tab>反向遍历,再或者<C-d>查看候选补全列表
    • <C-r><C-w> :把光标下的单词插入命令行
  • 技巧34
    • q/ :打开查找命令历史的命令行窗口
    • q: :打开Ex命令历史的命令行窗口
    • <C-f> :从命令行模式切换到命令行窗口
  • 技巧35(命令行模式下)
    • :!{cmd} :在shell中运行cmd命令
    • :shell :切换到一个交互的shell中,在shell中输入exit命令可以返回vim
    • :read !{cmd} :在shell中执行cmd命令,并把其标准输出的内容插入到光标的下方
    • :[range]write !{cmd} :在shell中执行cmd命令,将缓冲区中指定范围的内容作为其标准输入。(如果没有给出范围,则就是指所有行)
    • :[range]!{filter} :使用shell命令filter,过滤指定的范围的内容,即将指定范围的内容作为filter命令的输入,并用输出替换原来的内容。
    • !{motion} :会将指定范围预置在命令行中,后面还紧跟一个!(普通模式下执行)
  • 技巧36(命令行模式下)
    • :source vim脚本:执行vim脚本,该脚本是一系列的Ex命令构成,每条命令一行,不需要前缀:,脚本文件的扩展名为.vim。
    • :args:列出vim参数列表的内容
    • :argdo {Ex命令}:对参数列表的每个文件执行该Ex命令
  • 技巧37
    • :ls:查看缓冲区列表
    • :buffers:功能同上
    • <C-^>:在当前显示的缓冲区(用%标识)和轮换缓冲区(用#标识)之间切换(不按shift键也会切换)
    • :bprev:反向遍历缓冲区列表
    • :bnext:正向遍历缓冲区列表
    • :bfirst:跳到缓冲区列表开头
    • :blast:跳到缓冲区列表结尾
    • :buffer N:直接跳到编号对应的缓冲区
    • :bd[elete] N...:删除指定编号对应的缓冲区
    • :N,M bd[elete]删除指定编号范围对应的缓冲区
  • 技巧38
    • :args:查看参数列表
    • :args {arglist}:用arglist的内容替换原有参数列表
    • :next:正向遍历参数列表
    • :prev:反向遍历参数列表
  • 技巧39:
    • :w[rite]:把缓冲区内容写回磁盘
    • :e[dit]!:把磁盘文件内容读入缓冲区,即回滚所做的修改
    • :qa[ll]!:关闭所有窗口,放弃修改而不发出警告
    • :wa[ll]:把所有改变的缓冲区写入磁盘
  • 技巧40:
    • :sp[lit] {file}:水平分割当前窗口,并在新窗口中载入file的内容
    • :vsp[lit] {file}:垂直分割当前窗口,并在新窗口中载入file的内容
    • <C-w>s:水平分割当前窗口,新窗口仍然显示当前缓冲区的内容
    • <C-w>v:垂直分割当前窗口,新窗口仍然显示当前缓冲区的内容
    • <C-w>w:在窗口之间循环切换
    • <C-w>h:切换到左边的窗口
    • <C-w>j:切换到下面的窗口
    • <C-w>k:切换到上面的窗口
    • <C-w>l:切换到右边的窗口
    • :clo[se]:关闭活动窗口
    • :on[ly]:只保留活动窗口,关闭其他所有窗口
    • <C-w>c:关闭活动窗口
    • <C-w>o:只保留活动窗口,关闭其他所有窗口
    • <C-w>=:让所有的窗口等高等宽
    • <C-w>_:最大化活动窗口的宽度
    • <C-w>|:最大化活动窗口的高度
    • [N]<C-w>_:把活动窗口的宽度设置为N列
    • [N]<C-w>|:把活动窗口的高度设置为N行
  • 技巧41
    • :tabe[dit] {filename}:在新标签页打开文件filename
    • <C-w>T:将活动窗口移动到一个新的标签页
    • :tabc[lose]:关闭当前标签页
    • :tabo[nly]:只保留当前标签页
    • gt:切换到下一个标签页
    • gT:切换到上一个标签页
    • {N}gt:切换到编号为N的标签页
  • 技巧42
    • :pwd:查看Vim的当前工作目录
    • :edit 文件路径:打开文件。文件路径可以是绝对路径,也可以是相对路径,相对路径是相对于Vim的当前工作目录而言
    • 命令行模式下的特殊符号
      • %<Tab>:显示当前文件路径
      • %:h<Tab>:显示当前文件的目录路径,可借此打开相对于当前缓冲区文件的路径
  • 技巧43
    • :find 文件名:给出文件名就可以打开相应的文件,前提是配置好find搜索的路径
    • :set path+=目录路径:设置find的搜索目录
  • 技巧44
    • :e[dit] 目录名称:打开文件管理器,shell下输入vim 目录名称也是这个效果
    • :Explore:打开文件管理器,并显示活动缓冲区所在的目录
    • :Sexplore:在一个水平分割的窗口打开文件管理器,并显示活动缓冲区所在的目录
    • :Vexplore:在一个垂直分割的窗口打开文件管理器,并显示活动缓冲区所在的目录
  • 技巧45、46
    • :!mkdir -p %:h:创建保存文件的路径(适合当前编辑的文件路径尚未创建的情况)
    • :w !sudo tee % > /dev/null:以超级用户权限保存文件,Vim需要与我们进行两次交互(适合忘记用sudo vim打开文件的情况)
  • 技巧47、48(普通模式、可视模式和操作符待决模式)
    • h:左移一列
    • l:右移一列
    • j:向下移动一个实际行
    • gj:向下移动一个屏幕行
    • k:向上移动一个实际行
    • gk:向上移动一个屏幕行
    • 0:移动到实际行行首
    • g0:移动到屏幕行行首
    • ^:移动到实际行第一个非空白字符
    • g^:移动到屏幕行第一个非空白字符
    • $:移动到实际行的行尾
    • g$:移动到屏幕行的行尾
  • 技巧49(普通模式、可视模式和操作符待决模式)
    • w:移动到下一个单词的开头
    • ge:移动到上一个单词的结尾
    • b:移动到当前单词/上一个单词的开头
    • e:移动到当前单词/下一个单词的结尾
    • W:移动到下一个字符串的开头
    • gE:移动到上一个字符串的结尾
    • B:移动到当前字符串/上一个字符串的开头
    • E:移动到当前字符串/下一个字符串的结尾
  • 技巧50(普通模式、可视模式和操作符待决模式)
    • f{char}:正向移动到下一个{char}所在之处
    • F{char}:反向移动到上一个{char}所在之处
    • t{char}:正向移动到下一个{char}所在之处的前一个字符上
    • T{char}:反向移动到上一个{char}所在之处的后一个字符上
    • ;:重复执行上述字符查找命令
    • ,:回退上述字符查找命令
  • 技巧51(普通模式、可视模式和操作符待决模式)
    • /string:查找字符串
    • n:查找下一个
    • N:回退(查找上一个)
  • 技巧52(可视模式和操作符待决模式)
    • a):一对圆括号
    • a}:一对花括号
    • a]:一对中括号
    • a>:一对尖括号
    • a':一对单引号
    • a":一对双引号
    • a` :一对反引号
    • at:一对XML标签
    • i):一对圆括号内部
    • i}:一对花括号内部
    • i]:一对中括号内部
    • i>:一对尖括号内部
    • i':一对单引号内部
    • i":一对双引号内部
    • i` :一对反引号内部
    • it:一对XML标签内部
  • 技巧53(可视模式和操作符待决模式)
    • iw:当前单词
    • aw:当前单词及一个空格
    • iW:当前字符串
    • aW:当前字符串及一个空格
    • is:当前句子
    • as:当前句子及一个空格
    • ip:当前段落
    • ap:当前段落及一个空行
  • 技巧54
    • m{a-zA-Z}:用选定的字符标记光标所在的位置(小写字符是缓冲区局部标记,大写字母是全局标记)
    • '{mark}:跳转到标记位置所在的行
    • `{mark}:跳转到标记位置
    • ``:跳转到上次跳转动作的位置
    • `.:跳转到上次修改的位置
    • `^:跳转到上次插入的位置
    • `[:跳转到上次修改或复制的起始位置
    • `]:跳转到上次修改或复制的结束位置
    • `<:跳转到上次高亮选区的起始位置
    • `>:跳转到上次高亮选区的结束位置
  • 技巧55
    • %:匹配的括号间跳转(开启自带的matchit插件能够在匹配的标签间跳转和配对的关键字间跳转)
    • Surround.vim:为选中的文本加分隔符或者替换分隔符,例如,引号,括号,……
  • 技巧102(Shell下执行)
    • sudo apt-get install exuberant-ctags:安装ctags
    • ctags filename..:为指定的文件生成索引文件
  • 技巧103
    • :set tags?:查看Vim会在哪些目录(默认是当前文件所在目录和工作目录)下查找标签文件
    • !ctags -R:遍历当前目录及其所有子目录,并为其中的每个文件建立索引文件,并把这些索引文件保存在当前工作目录
  • 技巧104
    • <C-]>:跳转到匹配当前光标所在关键字的第一处标签
    • g<C-]>:当有多处匹配时,提示用户进行选择;当只有一处匹配时,直接进行跳转
    • :tag {keyword}:效果同<C-]>
    • :tjump {keyword}:效果同g<C-]>
    • :pop<C-t>:反向遍历标签历史,有回退的效果
    • :tag:正向遍历标签历史
    • :tnext:跳转到下一处匹配的标签
    • :tprev:跳转到上一处匹配的标签
    • :tfirst:跳转到第一处匹配的标签
    • :tlast:跳转到最后一处匹配的标签
    • :tselect:提示用户从匹配列表中选择一项进行跳转
  • 技巧105、106、107
    • :make:编译代码,Vim中编译的含义更加广泛
    • :cnext:跳转到Quickfix列表的下一项
    • :cprev:跳转到Quickfix列表的上一项
    • :cfirst:跳转到Quickfix列表的第一项
    • :clast:跳转到Quickfix列表的最后一项
    • :cnfile:跳转到Quickfix列表的下一个文件中的第一项
    • :cpfile:跳转到Quickfix列表的上一个文件中的最后一项
    • :cc N:跳转到Quickfix列表的第n项
    • :copen:打开Quickfix窗口
    • :cclose:关闭Quickfix窗口
    • :cdo {cmd}:在Quickfix列表的每一行上执行cmd
    • :cfdo {cmd}:在Quickfix列表的每个文件上执行cmd
    • :colder:查看之前的Quickfix列表
    • :cnewer:查看之后的Quickfix列表
  • 技巧109、111(在当前工作目录下查找)
    • :grep [选项] POSIX正则表达式 file..:在多个文件中进行查找,结果可用Quickfix列表查看
    • :vim[grep] /[vim正则表达式]/[选项] file..:在多个文件中进行查找,结果可用Quickfix列表查看。正则表达式可以省略,表示使用上次的查找命令。##可代表参数列表中的所有文件。
  • 技巧112、114-116、118、119
    • <C-n>:普通关键字补全
    • <C-x><C-n>:当前缓冲区关键字补全
    • <C-x><C-i>:包含文件关键字补全
    • <C-x><C-]>:标签文件关键字补全
    • <C-x><C-k>:字典文件关键字补全
    • <C-x><C-l>:整行补全
    • <C-x><C-f>:文件名补全,只能补全相对于当前工作目录的进行扩展的文件
    • <C-x><C-o>:全能补全
  • 技巧113
    • <C-n>:使用来自补全列表的下一个匹配项(会改变文本中的文档)
    • <C-p>:使用来自补全列表的上一个匹配项(会改变文本中的文档)
    • <Down>:选择补全列表的下一个匹配项(不会改变文本中的文档)
    • <Up>:选择补全列表的下一个匹配项(不会改变文本中的文档)
    • <C-y><CR>:确认使用选中的匹配项,与<Down><Up>搭配使用
    • <C-e>:退出补全,还原最早输入的文本
    • {char}:终止自动补全并插入字符char
    • {补全命令}<C-p>:根据输入情况实时显示补全列表
  • 技巧117
    • <C-x><C-p>:补全单词序列
  • 技巧120
    • :set spell:开启拼写检查
    • ]s:跳到下一处拼写错误
    • [s:跳到上一处拼写错误
    • z=:为当前拼写错误提供更正意见
    • zg:把当前单词添加到拼写文件中
    • zw:把当前单词从拼写文件中删除
    • zug:撤销针对当前单词的zgzw命令
  • 技巧121、122
    • set spelllang={语言}:设置进行拼写检查的语言
    • set spellfile=file:设置拼写检查使用的字典文件
    • set spellfile+=file:添加拼写检查使用的字典文件
  • 技巧123(在开启拼写检查的情况下)
    • <C-x>s:在插入模式下更正拼写错误(借助了自动补全列表)

猜你喜欢

转载自blog.csdn.net/u011008379/article/details/79633052
今日推荐