Vim 是 Unix/Linux 系统最好的文本编辑器,在没有熟练之前,可能没这个感觉。下面整理相关命令,作为个速查表吧。
模式
- 命令模式(Command mode)
- 首次启动 vim,便是命令模式
-
输入模式
时候,按ESC
进入
- 输入模式(Insert mode)
- 按
i
、o
、a
键进入 - 窗口左下角有
-- INSERT --
的字样
- 按
- 底线命令模式(Last line mode):在
命令模式
下按下:
(英文冒号)
文件操作
-
vim a.txt
打开或新建文件,并将光标置于第一行首 -
vim a.txt b.txt
编辑多个文件 -
vim +n a.txt
打开文件,并将光标置于第 n 行首(n 为数字) -
vim + a.txt
打开文件,并将光标置于最后一行首 -
vim +/pattern a.txt
打开文件,并将光标置于第一个与 pattern 匹配的字符串处 -
vim -r a.txt
在上次正用 vim 编辑时发生系统崩溃,恢复文件 -
:e <path/to/file>
打开一个文件 -
:e!
放弃修改,重新载入该文件 -
:q
退出 vim -
:q!
退出不保存,:qa!
强行退出所有正在编辑的文件(即使有修改) -
:w
保存当前文件 -
:wq
,ZZ
保存退出 -
:saveas <path/to/file>
,:w <path/to/file>
另存为 -
:bn
和:bp
当同时打开多个文件,使用这两个命令来上下
切换文件 -
:r <path/to/file>
把<path/to/file>
文件内容插入「光标」所在行后面 -
:! <command>
暂时离开 vim 到指令行模式下执行 command 的显示结果 -
:r ! <command>
将命令 command 的输出结果插入「光标」所在行后面
光标操作
-
h
,j
,k
,l
相当于键盘 ← ↓ ↑ → 移动一个字符-
nh
,nj
,nk
,nl
则按对应方向移动 n 个字符 -
n回车键
向下移动 n 行
-
-
H
,M
,L
光标移至「屏幕」的顶行
中间行
尾行
- 当前行:
-
0
,$
到行头
,行尾
-
w
,e
,b
对应向右
,右
,左
移动一个单词(首/尾) -
fa
,3fa
到第一
,第三
个为 a 的字符处,fb
,fs
等以此类推,F
相反方向 -
ta
,3ta
到第一
,第三
个为 a 的前字符处,tb
,ts
等以此类推,T
相反方向 -
10空格键
向后面移动 10 个字符
-
- 整个内容
-
gg
,G
到内容顶部
尾部
-
10G
移动到内容的第10
行
-
- 段落
-
{
,}
移动到段落的开头
结尾
-
(
,)
移动到句子的开头
结尾
-
屏幕操作
- 翻页:
ctrl+f
,ctrl+d
屏幕对应向下
下
移动一页
半页
- 翻页:
ctrl+b
,ctrl+u
屏幕对应向上
上
移动一页
半页
- 翻行:
ctrl+e
,ctrl+y
屏幕对应向上
下
移动一行
窗口操作
-
:split
分割一个窗口 -
:split a.c
为另一个文件 a.c 分隔窗口 -
:n split a.c
为另一个文件 a.c 分隔窗口,光标移至 n 行 -
ctrl+w
窗口切换 -
:close
关闭当前窗口
文本操作
插入
-
i
,I
对应在光标前
, 当前行首
插入 -
a
,A
对应在光标后
, 当前行尾
插入 -
o
,O
对应在当前行之下
,上
新开一行插入 -
r
替换当前字符 -
R
替换当前字符及其后的字符,直至按 ESC 键
删除
- 字符
-
s
删除光标所在字符,然后进入输入模式 -
S
,cc
删除光标所在行,然后进入输入模式 -
x
,X
对应向后
,前
删除一个字符 -
10cw
删除 10 个字符,然后进入输入模式 -
dnh
,dnl
向左
,右
删除 n 个字符
-
- 单词
-
dw
删除一个单词(删除光标位置到下一个单词开始的位置) -
dnw
删除 n 个单词
-
- 行
-
nC
删除当前行及其后 n-1 行,然后进入输入模式 -
dd
删除一行 -
d$
,do
删至行尾
,行首(n
-
ndd
删除 n 行(从当前行算起) -
:n1, n2 d
删除 n1 行到 n2 行之间的内容 -
dnj
,dnk
向下
,上
删除 n 行 -
J
删除行尾的换行符
-
搜索
-
/word
,?word
当前行向下
,上
寻找一个名称为 word 的字符串 -
n
,N
向下
,上
重复前一个搜寻的动作 -
:n1,n2 s/word1/word2/g
n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2-
:%s/word1/word2/g
全文寻找 word1 字符串,并将该字符串取代为 word2 -
:%s/word1/word2/gc
全文寻找 word1 字符串,并将该字符串取代为 word2,取代前需确认提示
-
复制/粘贴
-
yy
复制当前行 -
nyy
复制当前行向下 n 行(20yy:复制 20 行) -
y1G
复制当前行到首行
的所有数据 -
yG
复制当前行到尾行
的所有数据 -
y0
复制光标所在的那个字符到该行行首
的所有数据 -
y$
复制光标所在的那个字符到该行行尾
的所有数据 -
p
,P
粘贴至当前行的下一行
,上一行
-
np
粘贴文本 n 次 -
:n1,n2 co n3
n1~n2行的内容拷贝
到第 n3 行下 -
:n1,n2 m n3
n1~n2行的内容移至
到第 n3 行下
撤销/重做
-
u
复原前一个动作 -
ctrl+r
重做上一个动作 -
.
重复前一个动作
自动提示
-
ctrl+n
或ctrl+p
,在 insert 模式下- 未输入,则有提示菜单
- 输入一个词的开头,则可自动补齐功能
Visual 模式
-
v
进入-- VISUAL --
模式 -
V
进入-- VISUAL LINE --
模式 - 块操作(批量插入字符)
-
ctrl + v
进入块选择模式 - 移动光标选中需要操作的行
- 大写的
I
进入「行首」插入模式输入 (如果批量删除,可以按d
) - 输入完,按两下
ESC
-
行方式命令
即底线命令模式,列一些常用命令:
-
:n1,n2 co n3
n1~n2行的内容拷贝
到第 n3 行下 -
:n1,n2 m n3
n1~n2行的内容移至
到第 n3 行下 -
:n1,n2 d
删除 n1 行到 n2 行之间的内容 -
:n1,n2 w!command
将文件中 n1 行至 n2 行的内容作为command
的输入并执行之 -
:n1,n2/^/注释符/g
n1~n2 行加注释符
, 例如::10,20s#^#//#g
在 10~20 行添加 // 注释 -
:n1,n2/^注释符//g
n1~n2 取消注释符
, 例如::10,20s#^//##g
在 10~20 行取消 // 注释
宏
-
q[a-z]
把操作记录在寄存器 [a-z](命名),q
停止录制 -
@[a-z]
在当前光标处执行宏[a-z]
-
@@
在当前光标处执行最新
录制的宏 -
reg
显示当前定义的所有的宏
例子:
-
vim a.txt
新建 a.txt, 写入 1 -
qa
开始录制 -
Yp
复制行 -
ctrl+a
增加 1 -
q
停止录制 -
@a
1 下面写下 2 -
@@
2 下面写下 3 -
10@@
创建新的 10 行,并把数据增加到 13.
配置
配置文件在 /usr/share/vim/vimrc
,这是系统级的 vimrc 配置文件,为了保证 vim 的正常运行,一般并不会修改这个文件,而是应该在自己的用户目录下(~ 下)创建一个新的用户级 vimrc 文件
$ vim ~/.vimrc
# ------- .vimrc 内容(# 注释不要放) -------
# 设置行号
set number
# 语法高亮
syntax on
# 缩进
filetype plugin indent on
底线命令模式
-
:set ruler
,set noruler
显示/不显示标尺 -
:set hlsearch
高亮显示查找到的单词 -
:set nohlsearch
关闭高亮显示 -
:syntax on
语法高亮 -
:set nu
显示行号 -
:set nonu
不显示行号 -
:set ignorecase
搜索时忽略大小写 -
:set smartcase
搜索时匹配大小写 -
:set ruler
显示光标位置坐标 -
:set hlsearch
搜索匹配全高亮 -
:set tabstop=8
设置tab大小,8为最常用最普遍的设置 -
:set softtabstop=8
4:4个空格,8:正常的制表符,12:一个制表符4个空格,16:两个制表符 -
:set autoindent
自动缩进 -
:set cindent
C语言格式里面的自动缩进