vim常用命令

编辑

修改

  • cw
    修改从光标至单词结尾
  • cc
    修改本行
  • c$ 或 C
    修改从光标至本行结束
  • c0
    修改从光标至本行开头
  • c2b
    修改从光标往前两个单词
  • r
    替换字符
  • R
    覆盖字符直至按下esc,最多覆盖一行
  • ns
    替换n个字符,不填数字则替换1个
  • nS
    替换n行,不填数字则替换本行
  • ~
    转换字符的大小写,并把光标右移
  • g~w
    转换词的大小写
  • guw 或 gUw
    改变词为全部小写/大写
  • J
    合并两行
  • Ctrl-A 或 Ctrl-X
    递增/递减光标下的数字

删除

  • x X
    删除光标处/光标前面的字符
  • nx
    向后删除n个字符
  • dd
    删除光标所在行
  • "x dd
    删除当前行到寄存器x
  • ndd
    删除光标开始的向下n行
  • dw
    从光标处删除至下一个单词(下一个单词前的空白也会删除)
  • de
    从光标处删除至单词结尾
  • dE
    从光标处删除至包括标点在内的担保结尾
  • d^
    删除至本行开头处
  • D d$
    从光标处删除至本行结尾
  • d /pattern
    删除至pattern首次出现处
  • d1G
    删除光标所在行至第一行
  • dG
    删除光标所在行至最后一行
  • :n,m d
    删除第n至m行
  • :/pattern/d
    删除下一个包含pattern的行
  • :/pattern/;+n d
    删除下一个包含pattern的行及后续n行
  • :/pattern1/, /pattern2/d
    从第一个包含pattern1的行删除到第一个包含pattern2的行

复制

  • yy Y
    复制光标所在行
  • nyy
    复制光标开始的向下n行
  • " x yy
    复制当前行到寄存器x
  • ye
    复制文本到词尾
  • yw
    复制文本到词尾,包括词后的空格或标点
  • m
    移动行,如:160,224m23
  • co t
    复制行,如:23,29co100
  • :n,m ya a
    复制第n至m行到寄存器a

粘贴

  • p P
    粘贴在光标的下一行/上一行
  • gp gP
    与p P相同,但把光标放在被插入的文本后
  • ]p [P
    与p P相同,但符合当前的缩排
  • "xp
    粘贴寄存器x的内容

重做、撤销

  • .
    重复上次修改
  • Ctrl+R
    重做
  • u
    撤销
  • "np
    恢复倒数第n次删除
  • "1pu.u.
    逐一把每个缓冲区的内容放置到文件中

全局替换

  • 😒
    等价于:s//~/,重复上一次替换
  • 😒/old/new/
    将当前行中第一个出现的模式old替换为new
  • 😒/old/new/g
    将当前行中每一个old替换为new
  • 😒/old/new/gc
    c即confirm,表示每一次替换前做确认
  • :g/pattern/s/old/new/g
    对文件中所有满足pattern的行进行替换

备注
全局替换时,元字符只在命令的搜索部分有特殊意义,在替换字符串中大部分元字符会被当成一般字符,以下元字符例外:\n, , &, ~, \u, \l, \U, \L, \e, \E

移动

字符

  • h j k l
    左/下/上/右移1字符
  • n
    右移n字符,不填n则右移1字符
  • backspace
    左移一字符
  • n |
    移到当前行的第n个字符

单词

  • b B
    移动上一个单词的开头(小写把标点也视为单词)
  • w W
    移到下一个单词的开头
  • e E
    移到下一个单词的结尾

  • 0 $
    移到行首/行尾
  • ^ _
    移到当前行的第一个非空格字符处
  • - +
    移到上一行/下一行的第一个字符
  • Enter
    移到下一行的第一个字符
  • gg
    移到文件的第一行
  • G
    移到文件的最后一行
  • nG
    移到文档第n行
  • : n
    移动文件的第n行
  • H M L
    移到屏幕最上方/中央/最下方那一行
  • nH
    移到屏幕顶端往下的第n行
  • nL
    移到屏幕底部往上的第n行
  • Ctrl-G
    显示当前行的编号

段落

  • ( )
    移到当前句子/下一句的开头
  • { }
    移到当前一段/下一段的开头
  • [[ ]]
    移到当前一节/下一节的开头
  • [] ][
    移到当前一节/下一节的结尾处

屏幕

  • Ctrl-F Ctrl-B
    向上/向下滚动一整屏
  • Ctrl-D Ctrl-U
    向上/向下滚动半屏
  • z ENTER
    把光标所在的行移到屏幕顶端
  • z .
    把光标所在的行移到屏幕中间
  • z -
    把光标所在的行移到屏幕低端
  • Ctrl-L
    重绘屏幕

搜索

  • /pattern
    向前搜索
  • ?pattern
    向后搜索
  • n ;
    同向继续搜索
  • N ,
    反向继续搜索
  • *
    向前搜索光标所在处的词,需匹配处完全相符的词
  • #
    向后搜索光标所在处的词,需匹配处完全相符的词
  • %
    搜索与当前的圆括号、花括号、方括号成对的符号
  • / ENTER
    向前重复前一个搜索
  • ? ENTER
    向后重复前一次搜索
  • fx
    本行中搜索下一个出现字符x的地方
  • Fx
    本行中搜索上一个出现字符x的地方
  • tx
    本行中搜索下一个出现字符x的上一个字符
  • Tx
    本行中搜索上一个出现字符x的下一个字符

标记

  • mx
    将当前位置标记成字符x
  • `x
    移到标记x的位置
  • 'x
    移到标记x的位置的行首
  • ``
    回到最近一次移动前的位置
  • ''
    回到最近一次移动前的位置的行首
  • :marks
    列出活动中的标记
  • `.
    移到上一次改变的位置
  • '.
    移到上一次改变的位置的行首

插入

  • i a
    在当前光标之前/之后插入文本
  • I A
    在当前行的开始/结尾处插入文本
  • o O
    在游标位置的下面/上面插入新行
  • gI
    在行首处插入
  • c
    开始修改内容
  • R
    开始覆盖文本
  • s
    替换一个字符
  • S
    替换整行
  • ESC
    终止插入模式

与系统交互

  • :r file
    在光标后读入file的内容
  • :r !cmd
    在当前行后读入cmd的输出
  • :n r !cmd
    在第n行后读入cmd的输出
  • :!cmd
    运行cmd,然后返回
  • :!!
    重复上一个系统命令
  • Ctrl-Z
    暂停编辑器,用fg恢复

高级

配置

备注
:set opt 打开选项
:set noopt 关闭选项

  • :set ic
    忽略大小写
  • :set windows=20
    设置屏幕上窗口所显示的行数
  • :set all
    显示正在使用的选项
  • :set option?
    显示某选项的当前值
  • :set autoindent
    自动缩进
  • :set shiftwidth=4
    使用<<与>>时左右移动的空格数
  • :set tapstop=4
    将tab替换成几个空格
  • :set list
    让tab看起来是控制字符^I,行尾看起来是$
  • :set showmatch
    输入闭括号时,会暂时移动到对应的开括号,再回到当前位置

缩写

  • :ab abbr phrase
    定义缩写,插入模式下输入缩写时会自动展开成原文
  • :unab abbr
    取消缩写
  • :ab
    列出当前所有定义的缩写

映射

  • :map x command
    定义字符x映射到编辑命令command
  • :unmap x
    取消字符x的映射
  • :map
    列出所有被映射的字符

备注

  1. 命令序列的特殊按键ENTER, ESC, BACKSPACE, DEL等要在前面加上Ctrl-V
  2. 将控制字符作为映射命令时,Ctrl-T, Ctrl-W, Ctrl-X也要在前面加上Ctrl-V,其他不用
  3. 在映射命令中,换行是M,转义是[,退格是^H

补全

  • 补全方式
    以整行、当前文件关键字、dictionary关键字、thesaurus关键字、标签、文件名称、宏、Vim命名行、用户定义、omni、拼写建议、complete选项关键字补全
  • 以文件中的关键字补全
    Ctrl-X + Ctrl-N

标签

  • :ctags file.c
    在当前目录下创建一个tags文件,包含file.c定义的所有函数的信息
  • :tag name
    搜索name所在位置
  • :tags
    列出标签栈中的标签列表

缩排

  • :set cindent
  • 缩排方式
    autoindent, smartindent, cindent, indentexpr
  • << >>
    整行向左/右移动一个shiftwidth
  • < >
    把接下来移动命令涵盖的文本向左/右移动一个shiftwidth

折叠

  • za zA
    切换折叠状态,小写表示只切换一个,大写表示递归切换
  • zc zC
    关闭折叠
  • zd zD
    删除折叠
  • zE
    删除所有折叠
  • zf
    创建折叠,范围从当前行到光标移动后到达的位置结束,借由移动命令改变光标位置
  • [n]zf
    创建涵盖n行的折叠,从当前行开始
  • zi
    切换foldenable选项的值
  • zN zn
    设置(zN)或复位(zn)foldenable选项
  • zo zO
    打开折叠
  • zj zk
    移动光标到下一个折叠开始处(zj),或前一个折叠结尾处(zk)
  • zm zr
    递增(zr)或递减(zm)foldlevel选项的值
  • :set foldenable
    打开折叠功能
  • :set foldmethod=syntax
    设置折叠方式
  • 折叠方式
    manual, indent, expr, syntax, diff, marker

语法高亮

  • :syntax on
    打开语法设置
  • :syntax enable
    文件语法高亮
  • :colorscheme
    为不同语法高亮显示改变颜色
  • :set background=light/dark
  • :highlight comment

访问文件

  • vim +n file
    打开文件后直接到第n行
  • vim + file
    打开文件后直接到最后一行
  • vim +/pattern file
    打开文件后直接到pattern第一次出现的地方
  • vim file1 file2
    同时打开多个文件
  • :e file
    编辑另一个文件
  • :e!
    返回到当前文件上次写入的版本
  • :e + file
    打开文件后直接到最后一行
  • :e +n file
    打开文件后直接到第n行
  • :e #
    打开候补文件,并直接到先前编辑的位置
  • :ta tag
    于标签的位置编辑文件
  • :n
    编辑文件列表中的下一个文件
  • :prev
    编辑文件列表中的前一个文件
  • :args
    列出预备编辑的文件列表
  • :n files
    指定新的文件列表
  • :rewind
    编辑列表中的第一个文件
  • % #
    当前文件名 候补文件名
  • Ctrl-G
    显示当前的文件与行编号

窗口

  • :new 或 Ctrl-W n
    打开一个新窗口
  • :new file
    于一个新窗口打开file
  • :sp [file] 或 Ctrl-W s
    水平切割窗口
  • :vsp [file] 或 Ctrl-W v
    垂直切割窗口
  • :sn [file]
    于新窗口编辑文件列表中的下一个文件
  • :clo 或 Ctrl-W c
    关闭当前窗口
  • :hid
    隐藏当前窗口
  • :on 或 Ctrl-W o
    使当前窗口成为唯一可见的窗口
  • :res n
    调整窗口尺寸为n行
  • :wa
    保存所有文件
  • :qa
    关闭所有文件并离开
  • Ctrl-w <方向键>
    上/下/左/右移动窗口
  • Ctrl-W +,-
    递增/递减当前窗口的尺寸
  • Ctrl-W =
    平均分配所有窗口的高度

保存与离开

  • :x ZZ
    写入文件并离开编辑器。只有文件被修改才会写入。
  • :w
    保存修改的内容
  • :w file
    保存修改的内容到文件file
  • :wq
    写入文件并离开编辑器。即使文件没有被修改也写入。
  • n,m w file
    将第n至m行的内容写入新文件
  • n,m w >> file
    将第n至m行的内容附加至现有的文件
  • :q
    离开vim,若已修改文件则操作失败
  • :q!
    强制离开,不做任何修改

ex

  • :=
    显示文件的总行数
  • . $ %
    当前行 最后一行 文件中的每一行
  • :1,3d | s/here/there/
    用竖线合并ex命令
  • "f4yy | :w | :e filename | "fp
    将4行文件复制到缓冲区f,再将缓冲区f粘贴到新文件
  • :ya :pu
    复制 粘贴
  • :160,224ya a | :e destfile | :pu a
    将弟160~224行文件复制到缓冲区a,再将缓冲区a粘贴到新文件
  • :ve
    列出编辑器的当前版本及前次改变的日期
posted on 2017-06-03 23:37  whl1729  阅读(337)  评论(0编辑  收藏  举报