目录

Vim 不完全使用手册

首发于: 爱开发

使用 vimtutor 进入练习。其中,vimtutor zh 为中文。

Vim 有三种模式:

  • 正常模式(Normal Mode): 又称为 命令模式(Command Mode): 在这里,您可以执行复制、粘贴、查找或替换等操作,还可以执行命令(:w 保存 或 :q 退出)。
  • 可视模式(Visual Mode):在这里您可以选择文本。
  • 插入模式(Insert Mode):在这里您可以编辑您的文本。

命令模式(normal)

要切换到此模式,请键入Esc 键。
在这种模式下,您可以在文件中导航,并且可以执行诸如 dd 之类的命令来删除光标下的行。
您还可以执行 复制、粘贴、剪切、查找/替换 等任务

方向键

箭头方向字母
h
j
k
l

更多命令

按键英文功能描述
yyank复制
ddelete删除
ppaste粘贴
rreplace替换
uundo撤销
iinsert插入
aappend追加在光标后插入
oopen打开在下一行插入
ffind查找
wword单词光标跳到下一个单词开头
bback字首
vvisual选择进入可视化模式
按键英文功能描述

基础按键
O : 在上一行插入
ZZ 保存并退出
u : 撤销上一个操作(ctrl + r 反撤销)
U : 撤销之前对该行的全部操作

[进入插入模式]
i : 在光标之前,进入插入模式
I : 在本行开头非空处,进入插入模式
a : 在光标之后,进入插入模式
A : 在本行末尾,进入插入模式
o : 在本行之后新增一行,并进入插入模式
O : 在本行之前新增一行,并进入插入模式
s : 删除当前字符,并进入插入模式
S : 删除当前行中的所有文本,并进入插入模式

[移动]
g_: 光标跳到非空行尾
W : 光标跳到下一个单词开头 (忽略标点)
w : 移动到下个单词开始(不忽略标点,从当前光标位置直到下一个单词起始处,不包括它的第一个字符)
e : 移动到当前单词的末尾(从当前光标位置直到单词末尾,包括最后一个字符)
#G : 光标跳至 # 行非空行首 (# 为具体数字)
`` : 返回到上一处
'' : 返回到上一行
f# / F# : 光标跳到 (后 / 前) 一个 #
t# / T# : 光标跳到 (后 / 前) 一个 #

[行首与行末]
^ : 移动到本行的首字符 Shift + ^
0 : 移动到本行行首
: 移动到本行的末字符 Shift +

[单词与内容]
: 从当前光标位置直到当行行末。
b : 移动到当前单词开始
ge : 移动到上个单词末尾
* : 跳至找到的下个单词(光标所处的)
# : 跳至找到的上个单词(光标所处的)Shift + #
gg / 1G : 将光标移动到文件首行的非空开头

H : 将光标移动到屏幕上最高行(大概在顺 6 行)
M : 将光标移动到屏幕的中间行
L : 将光标移动到屏幕上最低行(大概在倒 6 行)
G : 将光标移动到文件末行非空开头
zt : 将屏幕移至窗口顶部(含将光标所在行都上移,光标再处于屏幕上方。大概在顺 6 行)
zz : 将屏幕移到窗口中间(含将光标所在行都上移,光标再处于屏幕中间
zb : 将屏幕移至窗口底部(含将光标所在行都上移,光标再处于屏幕底部。大概在倒 6 行)

[删除]
x : 删除光标处字符
X : 删除光标前一字符
dd : 删除光标所在行,同时复制该行
D : 删除光标到行末
dw : 删除光标到单词末(含后面的空格)
#x : 删除含光标在内的后#个字符
#X : 删除光标前 # 个字符
#dd : 删除含光标所在行的 # 行字符,同时复制该 #

s : 删除当前字符
S : 删除当前行中的所有文本

[复制]
#yw : 复制 # 个单词,其中以光标到单词结束作为首词
p / P : 粘贴光标(后 / 前)
y <space> : 复制光标所在字符
yy : 复制光标所在行
#yy : 复制含光标所在行在内的下 #
yw : 复制从光标到单词结束
y : 复制从光标到本行结束

[替换]
r : 替换光标所在处的单个字符
R : 替换光标所在处及其后面的字符,直到按下「ESC」键为止
cw : 替换从光标到单词结束
c#w / #cw : 替换 # 个单词,其中以光标到单词结束作为首词

[修改]
gu / gU <CR>: 将本行修改为 (小 / 大) 写

[查找]
/<Word><CR> : 查找 Word。按 n 查找下一个;按 N 查找上一个
/<Word><CR> : 反向查找 Word。按 N 查找下一个;按 n 查找上一个
/<Word>\c<CR> : 单次查找结果忽略大小写
% : 选择括号,再按 % 查找配对的括号对。重复按,位置反复跳转

Ctrl 组合键
ctrl + r : 反撤销上一操作,与 u 相反
ctrl + b : 屏幕往“前”移动一页
ctrl + f : 屏幕往“后”移动一页
ctrl + u : 屏幕往“前”移动半页
ctrl + d : 屏幕往“后”移动半页
ctrl + g : 显示当前文本的信息
ctrl + o : 跳回较旧的位置
ctrl + i : 跳到较新的位置
ctrl + w : 窗口间切换

末行模式(last line mode)

您需要进入正常模式,然后键入 : 键。
在此模式下,您将执行命令,如 更新 VIM 配置、保存、退出、打开新文件、标签、缓冲区 等…

部分文档称之为 命令模式(Command Mode)
shift + : 进入该模式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 所有命令必须以 <Enter> 键结束

: 再按 ctrl + D则显示补全命令 :s则显示 s 开头的补全命令 Tab则会在其命令列表中切换选择

:help <Command> 显示关于<command>的帮助

:! <Command>执行该外部命令

:<Number> 跳至 <number> ,与正常模式下的 <number>G 类似

/word 查找 word 字符 n 键往查找
?word 查找 word 字符 n 键往查找

#  ! 号强制执行
:e <Filename> 打开文件
:w  保存该文件
:w <Filename> 另存为
:q  退出
:wq 保存并退出内容未变更文件修改时间亦会变更:x  保存并退出

# 片段处理
移动光标到某行接着按 v 将光标 上下左右 移动其间的文本会被高亮已选中该内容## 保存片段选中的内容另存为 TEST 文件
 : ,屏幕底部会出现 :'<,'>输入 w TEST其中 TEST 是一个未被使用的文件名最终内容为 :'<,'>w TEST <Enter> ## 删除片段删除选中的内容
 d 即可删除该选中的内容

# 插入内容
:r <Filename>  Filename 文件中的内容粘贴到光标处
:r !<Command> 将外部命令的显示结果粘贴到光标处

# 替换
:s/old/new      替换本行的首个 `old`  `new`
:s/old/new/g    替换本行的 所有`old`  `new`
:#,#s/old/new/g 替换 `1#`行到 `2#` 中的 `old`  `new`
:%s/old/new/g   替换整个文件中的每个匹配串
:%s/old/new/gc  替换整个文件中的每个匹配串需确认是否替换

:saveas <Filename> 另存为
:so % 相当于 source <CurrentFile>使当前文件环境生效

操作指南

(1)指南

  • 复制、移动、删除
    1. yy 复制当前行
    2. p 将复制的内容进行粘贴
    3. f; 跳转到字符 ; 处,这里其实就是相当于行位
    4. h 向左移动一个光标
    5. ciw 删除当前处的词,并进入 插入模式
  • 行选并注释
    1. v (小写),进入 选择模式
    2. hjkl 选择内容
    3. x 删除内容

(2)案例

  • 从当前字符起,复制到第 2 个 test 位置前(不含)
1
^abc test home fdst bcfds test fdsa fds test abfdsc

y2/test,结果为: abc test home fdst bcfds

  • 删除 " 中的字符(不含"
1
What is it? haha"H^ello World!"bbc

di"
结果:What is it? haha""bbc
或者使用 ci" 亦可,但此方式会切换进 编辑模式

  • 删除单词并进入编辑模式
1
https://bai^du.com

cw 会删除 du,并且进入编辑模式
ciw 会删除 baidu,并且进入编辑模式

  • 删除段落
1
2
3
4
5
6
What is it? haha""bbc

MkDocs is a ^fast, simple and downright
gorgeousstatic site generator that's ge

ared towards building project documentation. Docum

cip 删除全段,结果为:

1
2
3
4
5
What is it? haha""bbc



ared towards building project documentation. Docum

个人理解

  1. 空格会作为当前单词的一部分,比如:
1
2
3
4
5
6
7
8
# 光标处 ^, 按 w, 则会跳至 d
^abc def ghi

# 光标处为 ^, 按 w, 则会跳至 ,
^abc,def,ghi

# 光标处为 ^, 按 W, 则会跳至 d
^abc,def,ghi

插入模式

插入模式是您可以 编写/编辑 文档的地方。

i : 在光标之前,进入插入模式
I : 在本行开头非空处,进入插入模式
a : 在光标之后,进入插入模式
A : 在本行末尾,进入插入模式
o : 在本行之后新增一行,并进入插入模式
O : 在本行之前新增一行,并进入插入模式
s : 删除当前字符,并进入插入模式
S : 删除当前行中的所有文本,并进入插入模式

可视模式

视觉模式是您可以 选择单词、行、块 等的地方。

v : 进入 VISUAL 模式,此键从光标下的字符开始切换到可视模式。
V : 进入 VISUAL LINE 模式,此键从当前行开始选择整个行切换到可视模式。
Ctrl + v : 进入 VISUAL BLOCK 模式,此键切换到视觉模式,允许选择垂直块。

Vim 语法

1.1 动词

  • d 删除 delete
  • r 替换 replace
  • c 修改 change
  • y 复制 yank
  • v 选取 visual select

1.2 名词

  • w 单词 word
  • s 句子 sentence
  • p 段落 paragraph
  • t HTML 标签 tag
  • 引号或者各种括号所包含的文本称作一个文本块

1.3 介词

  • i “在…之内” inside
  • a “环绕…” around
  • t “到…位置前” to
  • f “到…位置上” forward

1.4 组词为句

文本编辑命令的基本语法如下:
动词+介词+名词
例子:

  • 删除一个段落 delete inside paragraph: dip
  • 选取一个句子 visual select inside sentence: vis
  • 修改一个单词 change inside word: ciw
  • 修改一个单词 change around word: caw
  • 删除文本直到字符x(不含 x)delete to x: dtx
  • 删除文本直到字符x(含x)delete forward x: dfx

1.5 数词

数词指定了待编辑文本对象的数量,语法就成了这样:
动词+介词/数词+名词
例子:

  • 修改三个单词 change three words: c3w
  • 删除两个单词 delete two words: d2w

数词也可以修饰动词,表示将操作执行 n 次。语法:
数词+动词+名词
例子:

  • 两次删除单词(等价于删除两个单词) twice delete word: 2dw
  • 三次删除字符(等价于删除三个字符)three times delete character: 3x

配置信息

1
2
3
4
5
set ic    " ignorecase (Ignore Case) 忽略大小写
set noic  " 大小写严格(禁用忽略大小写)
set hls   " hlsearch 高亮搜索结果
set nohls " 不高亮搜索结果
set is    " incsearch 开启实时搜索高亮