vim

vim 有三种模式:

1
2
3
- 命令模式 或 普通模式
- 插入模式 或 编辑模式
- 扩展命令模式 或 命令行模式 或 末行模式

命令模式

光标跳转

字符间跳转
1
2
3
4
j      # 下
k # 上
h # 左
l # 右
单词间跳转
1
w      # 定位下一个单词
当前页跳转
1
2
3
4
5
6
H      # 定位页首
M # 定位中间行
L # 定位页末
zt # 滚动屏幕, 使当前行置顶 top
zz # 滚动屏幕, 使当前行置中
zb # 滚动屏幕, 使当前行置底 bottom
行首行尾跳转
1
2
3
^      # 定位行首第一个非空字符
0 # 定位行尾
$ # 定位行首
行间移动
1
2
3
gg     # 定位文首
G # 定位文末
nG # 定位指定行行首, 例如定位第5行: `5G`
句间和段落间移动
1
2
3
4
)      # 下一句
( # 上一句
} # 下一段
{ # 上一段
翻屏操作
1
2
3
4
ctrl+f     # 向后翻一屏
ctrl+d # 向后翻半屏
ctrl+b # 向前翻一屏
ctrl+u # 向前翻半屏

字符编辑

1
2
3
4
x     # 剪切光标处字符
p # 黏贴
~ # 转换大小写, 然后光标向后移一位
J # 删除当前行前后的换行符

替换 replace

1
2
r    # 替换光标所在处的一个字符, 按下r,然后再按替换后的字符
R # 切换成REPLACE模式, ESC回到命令模式, 按下r, 然后再输入替换后的内容

删除 delete

1
2
3
4
5
6
7
d      # 删除, 可结合光标跳转, 实现范围删除
d$ # 删除到行尾
d0 # 删除到行首
d^ # 删除到非空行首
dd # 删除当前行
#dd # 删除多行, 从当前行开始, 删除#行
D # 删除到行尾, 等同于d$

复制 yank

1
2
y  # 复制, 行为相似于d命令
Y # 复制整行

粘贴 paste

1
2
p  # 整行, 则粘贴到下一行, 否则粘贴到光标后
P # 整行, 则粘贴到上一行, 否则粘贴到光标后

命令模式 切换到 插入模式

以下快捷键, 进入插入模式

1
2
3
4
5
6
i    # 不动
I # 定位行首
a # 向后移一位
A # 定位行尾
o # 定位下一行行首, 并开辟新行
O # 定位上一行行首, 并开辟新行

插入模式

从光标前输入数据

末行模式

1
2
3
4
5
6
:wq         # 存盘并退出
:q! # 不存盘强制退出
:r file # 将file中的内容写入到当前文件, 例如\`:r a.log\`就把a.log中的内容写入到当前文件
:w file # 将当前文件内容写入file文件, 如果file已存在, 需要\`:w! file\`强制覆盖文件
:!command # 不退出文件,执行命令
:r!command # 将执行命令的输出写入到当前文件

地址定界:

1
2
3
4
5
6
7
8
9
10
11
n   # 第几行, 例如2表示第2行
n,n # 第#行到到第#行, 例如 2,5 表示2到5行
n,+n # 第#行加#行, 例如 2,+3 表示2到5行
. # 当前行
$ # 最后一行, .,$-1 表示当前行到倒数第二行
% # 全文, 相当于1、$

/pattern/ # 从当前行开始,直到第一次匹配到的行
/pattern1/,/pattern2/ # 从pattern1第一次匹配到行, 到pattern2第一次匹配到的行
n,/pattern/ # 从指定行开始, 到第一次pattern匹配到行
/pattern/,$ # 从pattern第一次匹配到的行, 到最后一行

地址定界后跟一个编辑命令:

1
2
3
4
d     # 删除
y # 复制
w file # 将范围内的行另存到file文件中
r file # 在指定位置插入file文件中的所有内容

查找并替换:

1
2
3
4
5
6
7
8
9
s/要查找的内容/替换为的内容/修饰符  # 当前行查找替换
%s/要查找的内容/替换为的内容/修饰符 # 全文查找替换

要查找的内容可使用正则
替换为的内容不能使用正则,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:
i 忽略大小写
g 全局替换
gc 全局替换, 每次替换前询问
1
2
3
4
u    # 撤销, 相当于windows中的ctrl+z
#u # 撤销多步
U # 撤销此行的所有操作
ctrl+r # 取消撤销, 相当于windows中的ctrl+y

高级用法

示例:粘贴”wang”100 次

1
100iwang [ESC]
1
2
3
4
5
di"      # 光标在” “之间,则删除” “之间的内容
yi( # 光标在()之间,则复制()之间的内容
vi[ # 光标在[]之间,则选中[]之间的内容
dtx # 删除字符直到遇见光标之后的第一个 x 字符
ytx # 复制字符直到遇见光标之后的第一个 x 字符

定制 vim 的工作特性

配置文件:

1
2
/etc/vimrc      # 全局
~/.vimrc # 个人
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
set nu
set nocompatible
set showmode
set showcmd
set encoding=utf-8
set t_Co=256

" 缩进
set autoindent
set tabstop=4

" 外观
set wrap
set linebreak
set wrapmargin=2
set showmatch
set hlsearch
set ignorecase
set smartcase

" 编辑
set autoread
set wildmenu

" 插件
autocmd FileType php set omnifunc=phpcomplete#CompletePHP

set tags=/data/wwwroot/php-7.1.32/tags

可视化模式

进入可视化模式:

1
2
3
v           # 面向字符
V # 面向整行
ctrl + v # 面向块(列)

选中的文字可以被删除、复制、变更、过滤、搜索、替换等

示例:在文件每一行行首插入 # 然后再删除

1
2
3
4
5
6
7
8
9
gg
ctrl + v
G
I
输入#
ESC退出 插入#成功
ctrl + v
d 删除成功
ESC退出

vim 总结