Vim的基础使用

本文最后更新于:3 年前

Vim的几种模式

  • normal模式
      默认模式,此模式下你可以输入命令,如利用/ + 单词来进行搜索,又或者利用yp进行cv操作;
  • 编辑模式
      通过输入i(insert)/a(append)/o(open a line)进入编辑模式,可以进行文本的编辑操作;
  • 命令模式
      就是在normal模式下输命令,比如分屏::vs竖分屏; :sp横分屏
  • 可视化模式
      所谓的可视化模式用于选择文本,在normal模式下使用v可以进入visual模式,可选择的最小单位是每一个字符;使用V可以进入visual line模式,顾名思义,可选择的最小单位是每一行;使用ctrl + v可以进入visual block模式,可以以矩阵的方式进行文本选择。

编辑模式下的小技巧

  • ctrl + h 删除上一个编辑的字符
  • ctrl + w 删除上一个编辑的单词
  • ctrl + u 删除当前行
    上述的快捷键也可以用于终端;
  • ctrl + [ insert模式切换到normal模式
  • gi快速跳转到最后一次编辑的地方并进入插入模式

Vim移动

  • hjkl即是vim normal模式下的左下上右键;
  • w/W移到下一个单词开头
  • e/E移到下一个单词结尾
  • b/B移到上一个单词开头 back word

  上面移动的小写和大写的区别在于:
小写指的是以非空白符分割的单词;
大写指的是以空白符分割的单词;

  • f + <char>可以移动到行内第一个符合的字符上,若不符合,可以通过;,进行搜索下一个或上一个;大写的F则表示反向搜索,而非正向搜索;

  上面的f可以理解为find,使用f + <char>可以到达寻找的字符;
  而若是用t + <char>则可以寻找到要找的字符前一位,此处的t可以理解为to;

  • 0可以移动到当前行的行首;
  • $可以移动到当前行的行尾;
  • ^可以移动到当前行的首个非空字符;
  • g_可以移动到当前行的最后一个非空字符;
  • gg/G移动到文件开头或结尾;
  • H/M/L可以跳转到屏幕的开头(Head)/中间(Middle)/结尾(Lower);
  • ctrl + f/ctrl + u向下分页(forward)/向上分页(upward)
  • zz把屏幕设置为中间

Vim增删改查

  • i(insert): 在字符前插入
  • a(append): 在字符后插入
  • o(open a new line): 下启一行插入
  • I: 在行首插入
  • A: 在行末插入
  • O: 上启一行插入

  • x: 删除单个字符
  • d(delete): 此为删除命令,可结合文本对象具体使用,如diw(delete inner word)

  d和x可以搭配数字使用,以达到同一命令重复执行多次的效果。

  • r(replace): r <char>用以替换当前光标所在处的字符;
  • c(change): 可以搭配文本对象具体使用,如"just try try"中使用ci"则会删除掉引号内的内容(引号不会去掉,若是ca"则会),并且进入到编辑模式
  • s(substitute): 删除并进入编辑模式

  s可以搭配数字使用;
  上述的三个命令若是大写(即R/C/S)会有不同的作用:

  • R进入replace模式,从当前字符起可以一直替换,直到退出该模式;
  • C/S二者差不多,删掉整行进入编辑模式;

  • / + <word>: 前向搜索
  • ? + <word>: 反向搜索
  • n/N: 跳到下一匹配项/跳到上一匹配项
  • */#: 当前光标处单词的下一项/上一项匹配

Vim搜索替换

  格式: :[range]s[ubstitute]/{pattern}/{string}/[flags]
  range表示范围(不写则默认当前行):

  • %表示全选;
  • m,n表示第m-第n行;
  • n,$表示第n行到末尾;

  s表示替换
  pattern表示替换前的单词,可以用正则
  string表示替换后的单词
  flags表示替换方式(不写则默认替换第一个(当前行/范围内的行)出现的pattern):

  • g(global): 全局执行(即所有出现的,不局限在第一个)
  • n(number): 报告匹配的次数而不替换

个人小结

  对于可以结合文本对象进行操作的命令:如y(yank)/d(delete)/c(change)等,可以结合以下的范围词来使用:a(around,含该字符)/f(find,含该字符)/i(inner,不含该字符)/t(to,不含该字符)来结合特定的字符使用。
  如:yf;表示由当前字符开始复制至;处,且含;


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!