vim操作

平时操作vim有些命令经常查,索性都记录在这篇博客里。包括搜索替换,行操作。

移动光标

命令 作用
h,j,k,l h表示往左,j表示往下,k表示往上,l表示往右
Ctrl+f 下一页
Ctrl+b 上一页
w, e, W, E 跳到单词的后面,小写包括标点
b, B 以单词为单位往前跳动光标,小写包含标点
O 开启新的一行
^ 一行的开始
$ 一行的结尾
gg 文档的第一行
[N]G 文档的第N行或者最后一行

搜索

命令 作用
/pattern 向后搜索
?pattern 向前搜索
/ 区分大小写的查找
/ 不区分大小写的查找
:set ic(ignorecase 的缩写) 通过指令指定设置忽略大小写
:set noic(noignorecase 的缩写) 通过指令指定设置不忽略大小写
/\<pattern\> 全字匹配pattern
N 光标到达搜索结果的前一个目标
n 光标到达搜索结果的后一个目标
:set hlsearch 搜索的所有匹配项将高亮显示

插入模式

命令 作用
i 插入到光标前面
I 插入到行的开始位置
a 插入到光标的后面
A 插入到行的最后位置
o 插入到光标所在行的下一行
O 插入到光标所在行的上一行
Esc 关闭插入模式

编辑

命令 作用
r 在插入模式替换光标所在的一个字符
J 合并下一行到上一行
s 删除光标所在的一个字符, 光标还在当行
S 删除光标所在的一行,光标还在当行,不同于dd
u 撤销上一步操作
ctrl+r 恢复上一步操作
. 重复最后一个命令
~ 变换为大写
[N]>> 一行或N行往右移动一个tab
[N]<< 一行或N行往左移动一个tab

剪切和复制

命令 作用
dd 删除一行
dw 删除一个单词
x 删除后一个字符
X 删除前一个字符
D 删除一行最后一个字符
[N]yy 复制一行或者N行
yw 复制一个单词
p 粘贴

替换

substitute命令

格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
:[range]s/{pattern}/{string}/[c|e|g|i]

参数定义:
1. range:范围,1,7表示第1-7行,
1,$表示1-最后一行;
常用%表示所有行;
#表示前一次编辑的文章。
2. /{pattern}/ :与查找一样,正则表达式
3. /{string}/ :需要替换的内容

c : 确认替换,每次替换询问
e : 不显示error
g : `整行替换`,不加这个开关只会替换一行最开始的匹配项。
i : 不区分大小写

替换域中的特殊字符,可以通过查询 :h sub-replace-special 获悉。

  • 全局替换命令
    1
    :%s/{pattern}/{string}/[flag]

视觉模式

命令 作用
v 选中一个或多个字符
V 选中一行

纵向编辑模式

命令 作用
ctrl-v 进入纵向编辑模式
r 进入修改模式
I 进入行首插入模式
A 进入行尾插入模式

行号操作

命令 作用
:set nu 显示行号
:set nonu 不显示行号
12gg 光标跳到12行

刷新文件(reload)

1
`:e`

管道操作

%!Shell命令。

%! 符号可以将 VIM 当前缓冲区中的内容输出到管道中,并启动后面的 Shell 命令

比如,%!xxd,将文本转换成二进制形式,以十六进制hex格式展示。

ctrl + s

使用vim时,如果你不小心按了 ctrl + s后,发现不能输入任何东西了,像死掉了一般。
其实vim并没有死掉,这时vim只是停止向终端输出而已,要想退出这种状态,只需按 ctrl + q 即可恢复正常。

查看文件编码

1
:set fileencoding

即可显示文件编码格式。
在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式。

1
:set fileencoding=utf-8

查看文件格式

/bin/sh^M: bad interpreter: No such file or directory

这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。

1
:set fileformat?

设置文件格式为 unix

1
:set fileformat=unix

会话和viminfo

使用会话(session)和viminfo,可以把你编辑环境保存下来,然后你在下次启动vim后,可以再恢复回这个环境。

  • 会话信息中保存了所有窗口的视图,外加全局设置。
  • viminfo信息中保存了命令行历史(history)、搜索字符串历史(search)、输入行历史、非空的寄存器内容(register)、文件的位置标记(mark)、最近搜索/替换的模式、缓冲区列表、全局变量等信息。

保存:

1
2
3
:mksession project.vim               "创建一个会话文件
:wviminfo project.viminfo "创建一个viminfo文件
:qa

恢复:

1
2
:source path/to/project.vim  '载入会话文件
:rviminfo project.viminfo '读入viminfo文件

更详细的要参考vi/vim使用进阶: 使用会话和viminfo

参考

[1] Vim 常用命令总结 [2] VIM进阶笔记(1) —— 查找与替换 [3] vim 技巧 – 查找的时候忽略大小写 [4] Training and Tutorials Vim 101: A Beginner’s Guide to Vim