0%

vim编辑器

Basic

Concept

Mode

  • 普通模式:按esc进入
  • 编辑模式:普通模式时按i(在光标前插入)或a(在光标后插入)或o(在下一行插入)进入
  • 末行模式:普通模式时按:(冒号执行命令)或/(斜杠向前搜索)或?(问号向后搜索)进入
  • 可视模式:普通模式时按v(小v会选中一个字)或V(大V会选中一整行)进入

Edit Mode

  • i:进入插入编辑模式,在光标前插入
  • I:进入插入编辑模式,在行首(bol)处插入
  • a:进入追加编辑模式,在光标后追加
  • A:进入追加编辑模式,在行尾(eol)后追加
  • o:进入新行编辑模式,在下一行添加新行
  • O:进入新行编辑模式,在上一行添加新行
  • r:进入替换编辑模式,重复替换多个字(前面可接数字)
  • R:进入替换编辑模式,连续替换多个字(按esc结束)

i :insert, a :append, o :open, r :replace

Line Mode

  • :(冒号):执行命令
  • /(斜杠):向前搜索
  • ?(问号):向后搜索

Visual Mode

  • v:进入可视模式,并选中一个字
  • V:进入可视模式,并选中一整行

v :visual

Motion

vim移动格式: [n]{motion}

  • h:左
  • l:右
  • j:下
  • k:上
  • b:词首
  • e:词尾
  • w:下一个词的词首
  • 0:行首
  • ^:行首(第一个非空白字符)
  • $:行尾

b :begin, e :end, w :word

Shortcut

普通模式快捷键

  • 移到首行:gg
  • 移到尾行:G
  • 向上翻页(整页):ctrl + b
  • 向下翻页(整页):ctrl + f
  • 向上翻页(半页):ctrl + u
  • 向下翻页(半页):ctrl + d
  • 光标行居中:zz
  • 光标行置顶:zt
  • 光标行置底:zb

b :backward, f :forward, u :up, d :down, t :top, b :bottom

末行模式快捷键

  • 移动到行首:home、ctrl + b
  • 移动到行尾:end、ctrl + e
  • 移动到(上一个)词首:ctrl + arrow left
  • 移动到(下一个)词尾:ctrl + arrow right
  • 从光标前删除到行首:ctrl + u
  • 从光标前删除到词首:ctrl + w

b :begin, e :end, w :word

Usage

Exit

  • w:保存不退出
  • q:不保存退出(如果有修改会提示保存)
  • wq:保存退出
  • x:保存退出(有修改时)或者退出(无修改时)
  • w!:强制保存不退出
  • q!:强制不保存退出
  • wq!:强制保存退出

Edit

Basic

  • 全选(Select All):ggVG
  • 删除(Delete):
  • 剪切(Cut):d[space|motion]、c[space|motion]
  • 复制(Copy):y[space|motion]
  • 粘贴(Paste):p(粘贴到光标后)、P(粘贴到光标前)、ctrl + v(编辑模式时)
  • 保存(Save):w(末行模式时)

d :delete, c :change, y :yank, p :put

Skill

  • 剪切行:[n]dd、[n]cc
  • 复制行:[n]yy

Cut

eoi:end of input(vim中普通模式输入时空格和箭头可以做会输入结束符,回车和TAB不行)

vim命令格式1: [n]{cmd}

  • x:删除多个字,会停留在普通模式,会存到寄存器
  • s:删除多个字,会进入编辑模式,会存到寄存器

x :remove, s :substitute

vim命令格式2: [n]{cmd}<eoi>{cmd}[n]<eoi>

  • d:删除多个字,会停留在普通模式,会存到寄存器
  • c:删除多个字,会进入编辑模式,会存到寄存器

d :delete, c :change

Transform

  • 转大写(UPPERCASE):gU[space|motion]
  • 转小写(lowercase):gu[space|motion]
  • 转标题(Capitalize):
  • 转驼峰(camelCase):
  • 转帕斯(PascalCase):
  • 转蛇形(snake_case):
  • 转连字(kebab-case):
  • 转常量(CONST_CASE):

Undo

撤销(Undo):u

Redo

重做(Redo):.(点号)、ctrl + r

Move

Basic

  • 常规性移动:mouse pointer(鼠标指针)、arrow(键盘箭头)、hjkl(普通模式时)
  • 左移一个字符:arrow left
  • 右移一个字符:arrow right
  • 左移一个单词:ctrl + arrow left、b(词首)
  • 右移一个单词:ctrl + arrow right、e(词尾)、w(词首)
  • 移动到行首:home、0、^
  • 移动到行尾:end、$
  • 移动到页顶:gg
  • 移动到页底:G
  • 移动到对应的括号:

g :goto, b :begin, e :end

Backward

  • 后退(Backward):ctrl + o

Forward

  • 前进(Forward):ctrl + i

Cursor

  • 单行添加光标(Add Cursor Single):
  • 多行添加光标(Add Cursor Multiple):
  • 向上添加光标(Add Cursor Above):
  • 向下添加光标(Add Cursor Below):

Scroll

  • 常规性滚动:mouse wheel(鼠标的滑轮)
  • 向上翻页:page up
  • 向下翻页:page down

Select

Basic

  • 常规性选择:left click + mouse slide(按着鼠标左键并滑动鼠标)
  • 选择字符(Char):v + motion
  • 选择单词(Word):v + motion
  • 选择一行(Line):V
  • 选择一片(Area):v + motion
  • 选择到行首:v^
  • 选择到行尾:v$
  • 选择到页顶:vgg
  • 选择到页底:vG
  • 选择环绕(Surround):

选择环绕:选择引号和括号里面的内容

Expand

  • 扩展(Expand)选择:v + motion

Shrink

  • 收缩(Shrink)选择:v + motion

Occurrence

  • 向后添加选中(Add Next Occurrence):
  • 向前添加选中(Add Previous Occurrence):
  • 添加所有选中(Select All Occurrence):

Column

  • 字选模式(Char Selection Mode):
  • 行选模式(Row Selection Mode):
  • 列选模式(Column Selection Mode):ctrl + v

Find

vim查找格式: /{pattern}?{pattern}

  • *:快速正向查找一个单词
  • #:快速反向查找一个单词
  • n:搜索中的下一个
  • N:搜索中的上一个

Pattern

1
2
3
4
5
\|:匹配多个表达式
\<:匹配单词的开始位置
\>:匹配单词的结束位置
\c:忽略大小写
\C:匹配大小写

Replace

vim替换格式1: [range]s/{pattern}/{string}/flags

vim替换格式2: [range]global/{pattern}/{command}

Range

range的格式如下

1
2
3
4
5
6
.:代表当前行
n:代表第n行
%:代表所有行
$:代表最后一行
/search-pattern/:代表下一个搜索结果所在的行
?backwards-search-pattern?:代表上一个搜索结果所在的行

ps:区间分隔符用逗号 , 或者分号 ; 都可以的

range是左闭右闭的,省去range使用光标所在的行,range的一边缺省使用光标所在的行代替那一边

1
2
3
4
5
6
7
%:所有行
1,3:第1到3行
3,$:第3行到最后一行
1,.:第1行到当前行
.,$:当前行到最后一行
1,:第1行到当前行
,$:当前行到最后一行

Flag

1
2
3
4
5
g:表示全局替换,将匹配到的所有项都替换掉,而不仅仅是第一个
c:表示每次替换前需要确认,即弹出一个界面供用户确认是否替换
e:表示没有匹配项时不显示错误
i:表示忽略大小写
I:表示区分大小写

Command

  • d:删除
  • s/{old}/{new}/g :替换

More

Read

Save

Diff

  • :diffsplit:比较两个文件(水平切分窗口)
  • :vertical diffsplit 比较两个文件(垂直切分窗口)

Grep

Set

View

  • :split:打开一个文件(水平切分窗口)
  • :vsplit:打开一个文件(垂直切分窗口)
  • :sview:用只读模式打开一个文件(水平切分窗口)
  • :vertical sview 用只读模式打开一个文件(垂直切分窗口)
  • :new:新建一个文件(水平切分窗口)
  • :vnew:新建一个文件(垂直切分窗口)
  • :edit:编辑一个文件(替换当前窗口)

Find

Explore

Outline

Ctags:标签生成工具(是独立的程序,不是vim的插件)

Intellisense

lsp:language server plugin

Plugins

Other

只想买包辣条