Vim小结

Vim即Vi Improved,是Vi(Visual Interface)编辑器的增强版。

Vim有多种模式,最常用的是:编辑、输入、末行三种模式。不同模式下,用户的击键操作将被给予不同的待遇,它可能被视为对Vim发出的“命令”,或者被视为输入当前文档的“内容”。

编辑模式:这是Vim启动后的默认模式。此种模式下,击键操作将被视为“命令”而非“内容”。“编辑”指的是对当前已有的文档内容进行的处理(复制,删除等),若要增加新内容,需切换到输入模式。

输入模式:此模式下,大多数的键盘操作都被认为是输入到文档中的内容。

末行模式:该模式下,在整个屏幕的最后一行,可键入一些除编辑模式下的命令之外的一些命令,如文件管理命令。该模式提供了比编辑模式更多的命令,如可直接执行Shell命令。

次三种模式之间的转换(输入模式不可与末行模式直接互转)方法:

Vim的一些基本操作,如无特殊说明,这些操作均在编辑模式下进行:

一、打开文件

  • vim +# 文件名:打开文件,光标定位于第#行
  • vim + 文件名: 打开文件,定位至最后一行
  • vim +/PATTERN 文件名:打开文件,定位至第一次被PATTERN匹配的行的行首

二、关闭文件

在末行模式下关闭:

  • q:退出,若文件有改动,会提示保存,若不保存,不能退出
  • q!:强制退出,即不保存退出
  • w:保存,对只读文件不可用
  • w!:强制保存,管理员可对只读文件进行该操作
  • wq:保存,退出
  • x:保存,退出,同wq

在编辑模式下关闭:

  • ZZ:保存,退出,同末行模式的wq

三、快速移动光标

以字符为单位移动光标:

  • 默认是一次移动一个字符,若在移动之前输入数字,则会移动数个字符。例如:键入5h,则光标向左移动5个字符。

以单词为单位移动光标,键入数字同样可控制移动的单词数:

  • w:移动到下一个单词的词首
  • b:移动到上一个(包含当前单词)的词首
  • e:移动到下一个(包含当前单词)单词的词尾

以行为单位移动光标:

  • gg:移至首行的行首
  • G:移至末行的行首
  • #G:跳至第#行

首/尾移动:

  • ^:移动到当前行最左侧的非空字符处
  • 0:移动到当前行行首,绝对行首
  • $:移动到当前航行尾

四、翻屏

  • Ctrl + b:向上翻一屏
  • Ctrl + f:向下翻一屏
  • Ctrl + u:向上翻半屏
  • Ctrl + d:向下翻半屏

五、删除内容

以字符为单位删除:

  • x:删除光标所在处的单个字符
  • #x:删除从当前光标位置开始的#个字符(包含当前字符)

删除更多内容(用删除命令d和光标移动命令,也可加入数字指定删除个数):

  • dd:删除当前行
  • #dd:向下删除包括当前行在内的#行
  • d$:删除当前位置到行尾的内容
  • d0:删除当前位置到行首的内容
  • dw:以单词为单位向后删除
  • #dw:向后删除#个单词

使用末行模式删除多行:

  • 起始位置,结束位置d:删除从起始位置到结束位置之间的所有行,包括起始及结束位置
  • . :代表当前光标所在行
  • $ :代表最后一行
  • +#:向下数#行
  • -#:向上数#行

六、复制、粘贴内容

复制,使用y命令,用法与删除命令d完全类似,把d换成y即可:

  • yy:复制当前行

粘贴,使用p命令:

  • p:若内容为整行,则粘贴至光标所在行下方,若内容不是整行,则粘贴至光标所在字符之后
  • P:若内容为整行,则粘贴至光标所在行上方,若内容不是整行,则粘贴至光标所在字符之前

七、修改内容

修改其实是两步,将要修改的内容删除,然后输入新的内容,这两步操作用一个命令即可完成:

  • c:用法也是与d命令完全类似的,执行后会自动转为输入模式,比较方便

八、替换内容

  • r:对当前光标所在字符实施替换操作
  • R:进入”替换“模式,可连续输入替换字符

九、撤销、重做、重复

撤销,即:让已经生效的编辑失效,恢复到编辑前的状态:

  • u:撤销最近一次的编辑操作,可撤销最多50次
  • #u:与其他命令类似,同样可以指定数值,一次性撤销之前的n步操作

重做,即:让已撤销的编辑重新生效,是撤销的逆操作:

  • Ctrl + r:撤销掉最近的撤销

重复是将最近一次的编辑操作再执行一次:

  • . :命令仅为一个点号,相当于自动输入了最近一次的编辑命令

十、内容查找、替换

  • /PATTERN:从文件首向文件尾查找
  • ?PATTERN:从当前光标位置向文件首查找

替换操作需要在“末行模式”使用s命令来完成:

  • 起始位置,结束位置s/PATTERN/待替换字符串/gi:其中g表示全局替换(不论出现多少次都替换),i表示忽略大小写

十一、分屏

末行模式下切割,编辑模式下屏间切换

  • sp:上下分割
  • vsp:左右分割
  • Ctrl + w:屏间切换

启动Vim时分屏

  • vim -o#:上下分割出#个屏
  • vim -O#:左右分割出#个屏