1. 基本操作

Visual模式

  • v: 进入Visual模式
  • V: 进入行模式的Visual模式
  • y: 复制到寄存器

Normal模式

基本移动

  • h/j/k/l: 左/下/上/右
  • gg: 跳到第一行
  • G: 跳到最后一行
  • Ctrl+u/d: 上/下翻半页
  • ^/$: 跳转到本行的开始/结尾
  • %: 跳到匹配的括号处
  • H: 跳到屏幕顶部
  • M: 跳到屏幕中间
  • L: 跳到屏幕底部

基于单词的移动

  • w: 下一个单词的首字符
  • W: 下一个连续空字符的首字符
  • b/B: 上一个单词/连续字符的首
  • e/E: 当前单词/连续字符的结尾

基于搜索的移动

  • /{pattern}: 文件中搜索下一个匹配的{pattern}
  • *: 相当于/{当前单词}
  • n/N: 下/上一个匹配单词

基于标记的移动

  • m+"a-z": 标记当前为”a-z”之一
  • '+"a-z": 找到标记为”a-z”处位置
  • '': 上次跳转前的位置(即返回跳转)
  • '.: 上次修改的位置
  • '^: 上次插入的位置

操作命令

ACTION = {Operation} + {motion}

常见操作符:

  • d: 删除
  • y: 复制

大部分操作符重复两次表示将其作用在一行上

结合motion的例子:

  • dw: 删除单词
  • y$: 复制到单词结尾

重复操作

  • .: 重复上一次修改
  • u: 撤销上一次修改

Insert模式

  • i/a: 在光标前/后插入
  • o: 下方插入一行开始输入
  • s: 删除当前光标后开始输入
  • I: 行首插入
  • A: 行尾插入
  • S: 删除当前行开始插入

Command模式

: 进入,常用命令:

  • :w
  • :q
  • :q!
  • :wq

Visual模式

  • v: 进入Visual模式
  • V: 进入行模式的Visual模式
  • y: 复制到寄存器

2. 进阶操作

组合操作

r 替换字符,r后接要替换成的字符。
c+{motion}c可能代表change,需要接一个修改的范围,将删除范围内容并进入插入模式,例如:

  • c3w 会删除3个单词并进入插入模式。

行号+G 跳转到指定行,例如:

  • 10G 跳转到第10行。
  • gg 跳转到第一行。

:s/new/old 替换当前行中所有的’new’为’old’.但注意只会替换当前行的第一个匹配字符串,不会全部更改。
如果想要在一行内替换修改某个单词,需要加上一个g使用::s/old/new/g
:%s/new/old/g 如果添加g则替换当前文件中所有的’new’为’old’.
:%s/new/old/gc 如果再添加c则会对每一个匹配的字符串提示是否替换,输入y则替换,输入n则不替换。
r 替换字符,r后接要替换成的字符。
R 替换字符,R后接要替换成的字符,会进入替换模式,输入ESC可以退出替换模式。

f行内查找跳转, ;,分号或逗号可以向前/向后搜索。

g,

m'a-z'-''a-z'm标记做标签,’加标签跳转到标记位置。marks查询所有标记

. 点,重复上一次的操作,不论是删除,修改,等;

命令模式进阶

:! + 命令 可以执行shell命令,例如:

  • :!ls 会列出当前目录下的所有文件。
    关于保存文件:
    :w + "filename" 可以将当前文件保存为”name”,如果不添加name则会保存为当前文件。

寄存器相关

  • 输入dd会删除当前行,并将其保存在一个寄存器中,使用p可以将其粘贴到光标下一行。

Buffer缓冲区/Window窗口/Tab标签页

buffer是vim中很重要的概念:

Vim 是一个文本编辑器。每次文本都是作为缓冲区的一部分显示的。每一份文件都是在他们自己独有的缓冲区打开的,插件显示的内容也在它们自己的缓冲区中。

缓冲区有很多属性,比如这个缓冲区的内容是否可以修改,或者这个缓冲区是否和文件相关联,是否需要同步保存到磁盘上。

窗口 是缓冲区上一层的视窗。如果你想同时查看几个文件或者查看同一文件的不同位置,那样你会需要窗口。

请别把他们叫做 分屏 。你可以把一个窗口分割成两个,但是这并没有让这两个窗口完全 分离

窗口可以水平或者竖直分割并且现有窗口的高度和宽度都是可以被调节设置的,因此,如果你需要多种窗口布局,请考虑使用标签。

标签页 (标签)是窗口的集合。因此当你想使用多种窗口布局时候请使用标签。

简单的说,如果你启动 Vim 的时候没有附带任何参数,你会得到一个包含着一个呈现一个缓冲区的窗口的标签。

顺带提一下,缓冲区列表是全局可见的,你可以在任何标签中访问任何一个缓冲区。

操作

:ls 我们能够列出所有可以列出的缓冲区,并查看缓冲区的标记,之后可以使用b+"mark"跳转到相应的buffer。

还有bn/bp跳转到其他buffer,以及bd删除当前buffer。

WINDOWS视窗:
可以通过sp/vsp来进行水平或者垂直分屏。

分屏后使用CTRL+W-HJKL进行buffer的跳转。

Tab页

可以通过tabe+文件名打开一个新的tab页,通过在gt进行tab页的切换。