
这里我就自己日常有使用过的 Vim 指令做一个总结,总共分成 21 点。
1、vim模式
模式之间的切换
正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空插入模式(按i进入) 左下角显示--INSERT--可视模式(按v进入) 左下角显示--VISUAL--

2、打开文件
2.1、命令行模式打开文件
打开单个文件
# 打开单个文件 vim <file>打开多个文件
# 同时打开多个文件 vim file1 file2..打开多个文件之后进行切换
可以在当前窗格内进行文件切换#文件间切换 Ctrl+6 下一个文件 :bn 下一个文件 :bp 上一个文件
也可以进行切割多个窗格显示多个文件
#分割窗格
:split #水平分割文件窗格
:vsplit #垂直分割文件窗格
#在窗格间切换的方法
Ctrl+w+方向键 #切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l #切换到前/下/上/后一个窗格
Ctrl+ww #依次向后切换到下一个窗格中
带命令模式打开文件
# 以只读形式打开文件,但是仍然可以使用 :wq! 写入 vim -R file # 强制性关闭修改功能,无法使用 :wq! 写入 vim -M file2.2、vim模式打开文件
# 在vim窗口中打开一个新文件 :open [file] 【举个例子】 # 当前打开1.txt,做了一些编辑没保存 # 放弃这些修改,并重新打开未修改的文件 :open! # 当前打开1.txt,做了一些编辑 # 保存完毕 :w # 直接打开2.txt编辑,省了退出:wq再重新vim 2.txt的步骤 :open 2.txt远程打开
# 打开远程文件,比如ftp或者share folder :e ftp://192.168.10.76/abc.txt :e \qadrive\test\1.txt3、插入命令
i #在当前位置前插入 I #在当前行首插入 a #在当前位置后插入 A #在当前行尾插入 o #在当前行之后插入一行 O #在当前行之前插入一行4、查找命令
4.1、最简单的查找
/text #查找text,按n查找下一个,按shift+n查找前一个。 ?text #查找text,反向查找,按n健查找上一个,按shift+n查找下一个。 # vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$ # 配置大小写忽略 :set ignorecase #忽略大小写的查找 :set noignorecase #不忽略大小写的查找4.2、快速查找
```bash
- 向后(下)寻找游标所在处的单词
向前(上)寻找游标所在处的单词
以上两种查找,n,N 的继续查找命令依然可以适用
/hello><br /> <a name="j0Z4k"></a> #### 4.3、精准查找:匹配单词查找 如果文本中有这三个单词<br />`hello``hello world``hello Java`<br />那我使用 /hello ,这三个词都会匹配到。<br />有没有办法实现精准查找呢?你可以使用
hellochina worldworld hellojava hellohellochina world<a name="cErVH"></a> #### 4.4、精准查找:匹配行首、行末 **例如:**文本文件中存在以下内容那当我们只想要查找到每一行行首的【**hello**】时,就可以使用如下命令进行实现: ```bash # hello位于行首 /^hello # world位于行末 /world$5、替换命令
```bash ~ #反转游标字母大小写 ddp #交换光标所在行和其下紧邻的一行。 cc #替换整行(就是删除当前行,并在下一行插入)
r <字母> #将当前字符替换为所写字母 R <字母><字母>… #连续替换字母
替换一个单词,前提是游标处于单词第一个字母(可用b定位)
cw
shift+c #替换至行尾 shift+d #删除(剪切)至行尾
替换
:s/old/new/ #用old替换new,替换当前行的第一个匹配 :s/old/new/g #用old替换new,替换当前行的所有匹配 :%s/old/new/ #用old替换new,替换所有行的第一个匹配 :%s/old/new/g #用old替换new,替换整个文件的所有匹配
行数范围内替换
:10,20 s/^/ /g #在第10行至第20行每行前面加四个空格,用于缩进。
<a name="PcOjj"></a>
### 6、撤销与重做
u #撤销(Undo) shift+u #撤销对整行的操作 Ctrl + r #重做(Redo),即撤销的撤销
<a name="koVNY"></a>
### 7、删除命令
需要说明的是,vim 其实并没有单纯的删除命令,下面你理解为剪切更加准确。
<a name="3WRWB"></a>
#### 7.1、以字符为单位删除
删除当前字符
x dl
删除当前字符的后三个字符
3x
删除当前字符的前一个字符
shift+x dh
3+shift+x #删除当前光标向前三个字符
删除当前字符至行尾
shift+d d$
删除当前字符之前至行首
d^
<a name="NFO5e"></a>
#### 7.2、以单词为单位删除
dw #删除当前字符到单词尾 daw #删除当前字符所在单词
<a name="3nEEW"></a>
#### 7.3、以行为单位删除
dk #删除上一行 dd #删除当前行 dj #删除下一行
删除当前行至文档首部
dgg d1+shift+g
删除当前行至文档尾部
d+shift+g
删除当前行之前所有行(不包括当前行)
kdgg jd+shift+g
删除范围内的行
10d # 删除从当前行开始的10行 :1,10d # 删除1-10行 :11,$d # 删除11行及以后所有的行
删除所有行
:1,$d
删除两行之间的空行
shift+j
<a name="xl3WI"></a>
### 8、复制粘贴
<a name="WPf1h"></a>
#### 8.1、正常模式中使用y复制
复制游标所在的整行(3yy表示复制3行)
yy
复制至行首(不含光标所在处字符)
y0 y^
y$ #复制至行尾。含光标所在处字符 yw #复制一个单词 y2w #复制两个单词
y+shift+g #复制至文本末。 y1+shift+g #复制至文本开头
<a name="Ya48T"></a>
#### 8.2、正常模式中使用p粘贴
p:代表粘贴至光标后 shift+p:代表粘贴至光标前
<a name="GhAEE"></a>
### 9、剪切粘贴
```bash
#剪切当前行
dd
#剪切当前行并粘贴,可实现当前行和下一行调换位置
ddp
#剪切
#正常模式下按v(逐字)或V(逐行)进入可视模式
#然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
#剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
ndd
#范围行剪切
:1,10d #将1-10行剪切
:1, 10 m 20 #将第1-10行移动到第20行之后
10、退出保存
#保存并退出
:wq #命令模式
shift+ZZ #正常模式
:q! #强制退出并忽略所有更改
:e! #放弃所有修改,并重新开原来文件
:sav new.txt #另存为一个新文件,退出原文件的编辑且不会保存
:f new.txt #新开一个文件,并且不保存,退出原文件的编辑且不会保存
11、移动命令
11.1、以字符为单位移动
h #左移一个字符
j #下移一个字符
k #上移一个字符
l #右移一个字符
#上面的移动和方向键相同
# 定位字符
f<字符> #找到光标后的第一个字符
nf<字符> #找到光标后第n个字符
shift+f<字符> #反向查找
11.2、以单词为单位移动
w #向前(右)移动一个单词(光标需要停在单词首部)
b #向后(左)移动一个单词(光标需要停在单词首部)
e #同w,光标停在单词尾部
ge #同b,光标停在单词尾部
11.3、以句为单位移动
( #移动到句首
) #移动到句尾
11.4、以行为单位移动
# 10指代所有数字,可任意指定
10h #左移10个字符
10l #右移10个字符
10k #上移10行
10j #下移10行
$ #移动到行尾
3$ #移动到下面3行的行尾
11.5、跳转到文件的首尾
#移动到文件头
gg
[[
``(波浪号键,ESC下)
#移动到文件尾
shift+g
]]
11.6、其他移动方法
^ #移动到本行第一个非空白字符上。
0 #移动到本行第一个字符上(可以是空格)
:<行号> #具体跳转
11.7、具名标记跳转
使用 **具名标记** 跳转,这个可以跨文件进行跳转
m<命名> #可以将此处标记为 a,使用 'a 进行跳转
:marks #可以查看所有的标记
:delm!#可以删除所有的标记
当在查看错误日志时,正常的步骤是,vim打开文件,然后使用 shift+g 再跳转到最后一行,这里有个更简单的操作可以在打开文件时立即跳到最后一行。只要在 vim 和 文件 中间加个 + 即可。
vim + test.log
当你想打开文件立即跳转到指定行时,可以这样
# 打开文件并跳转到 20 行
vim test.log +20
当你使用 / 搜索定位跳转或者使用:行号 进行精准跳转时,有时我们想返回到上一次的位置,如何实现?
只要使用 Ctrl+o 即可返回上一次的位置
12、排版功能
12.1、缩进
:set shiftwidth? 查看缩进值
:set shiftwidth=4 设置缩进值为4
# 缩进相关 最好写到配置文件中 ~/.vimrc
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
>> 向右缩进
<< 取消缩进
如何你要对代码进行缩进,还可以用 == 对当前行缩进,如果要对多行对待缩进,则使用 n==,这种方式要求你所编辑的文件的扩展名是被vim所识别的,比如.py文件。
12.2、排版
:ce #居中
:le #靠左
:ri #靠右
13、注释命令
13.1、多行注释
进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来
按大写字母I,再插入注释符,例如//
按esc键就会全部注释了
13.2、取消多行注释
进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列
按字母j,或者k选中注释符号
按d键就可全部取消注释
13.3、复杂注释
:3,5 s/^/#/g 注释第3-5行
:3,5 s/^#//g 解除3-5行的注释
:1,$ s/^/#/g 注释整个文档
:1,$ s/^#//g 取消注释整个文档
:%s/^/#/g 注释整个文档,此法更快
:%s/^#//g 取消注释整个文档
14、调整视野
"zz":命令会把当前行置为屏幕正中央,
"zt":命令会把当前行置于屏幕顶端
"zb":则把当前行置于屏幕底端.
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏
【跳到指定行】:两种方法
可以先把行号打开
:set nu 打开行号
:20 跳到第20行
20G 跳到第20行
15、区域选择
要进行区域选择,要先进入可视模式
v 以字符为单位,上下左右选择
V 以行为单位,上下选择
选择后可进行操作
d 剪切/删除
y 复制
Ctrl+v 如果当前是V(大写)模式,就变成v(小写)
如果当前是v(小写)模式,就变成普通模式。
如果当前是普通模式,就进入v(小写)模式
利用这个,可以进行多行缩进。
ggVG 选择全文
16、窗口控制
16.1、新建窗口
# 打开两个文件分属两个窗口
vim -o 1.txt 2.txt
# 假设现在已经打开了1.txt
:sp 2.txt 开启一个横向的窗口,编辑2.txt
:vsp 2.txt 开启一个竖向的窗口,编辑2.txt
:split 将当前窗口再复制一个窗口出来,内容同步,游标可以不同
:split 2.txt 在新窗口打开2.txt的横向窗口
# 需要注意:内容同步,但是游标位置是独立的
Ctrl-w s 将当前窗口分成水平窗口
Ctrl-w v 将当前窗口分成竖直窗口
Ctrl-w q 等同:q 结束分割出来的视窗。
Ctrl-w q! 等同:q! 结束分割出来的视窗。
Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗
16.2、窗口切换
,如下:
# 特别说明:Ctrl w <字母> 不需要同时按
Ctrl-w h #切换到左边窗口
Ctrl-w l #切换到右边窗口
Ctrl-w j #切换到下边窗口
Ctrl-w k #切换到上边窗口
# 特别说明:全屏模式下
:n #切换下一个窗口
:N #切换上一个窗口
:bp #切换上一个窗口
# 特别说明:非全屏模式
:bn #切换下一个窗口,就当前位置的窗口的内容变了,其他窗口不变
:bN #切换上一个窗口,就当前位置的窗口的内容变了,其他窗口不变
16.3、窗口移动
# 特别说明:Ctrl w <字母> 不需要同时按
Ctrl-w +shift+j #将当前视窗移至最下面
Ctrl-w +shift+k #将当前视窗移最上面
Ctrl-w +shift+h #将当前视窗移至最左边
Ctrl-w +shift+l(L) #将当前视窗移至最右边
Ctrl+ww #按顺序切换窗口
16.4、调整尺寸
# 友情提示:键盘切记不要处于中文状态
Ctrl-w + #增加窗口高度
Ctrl-w - #减少窗口高度
16.5、退出窗口
:close # 关闭当前窗口
:close! # 强制关闭当前窗口
:q #退出,不保存
:q! #强制退出,不保存
:x #保存退出
:wq #保存退出
:wq! #强制保存退出
:w <[路径/]文件名> #另存为
:sav(esa) <[路径/]文件名> #另存为
shift+zz #保存并退出。
:only #关闭所有窗口,只保留当前窗口(前提:其他窗口内容有改变的话都要先保存)
:only! #关闭所有窗口,只保留当前窗口
:qall #放弃所有操作并退出
:wall #保存所有,
:wqall #保存所有并退出。
17、文档加密
vim -x file_name
#然后输入密码:
#确认密码:
#即使不修改内容也要保存,不然密码设定不会生效
:wq
18、录制宏
#按q键加任意字母开始录制,
#再按q键结束录制(这意味着vim中的宏不可嵌套),
#使用的时候@加宏名,
#比如qa。。。q录制名为a的宏,@a使用这个宏。
19、执行命令
# 重复前一次命令
.
# 执行shell命令
:!command
# 比如列出当前目录下文件
:!ls
# 执行脚本
#检查perl脚本语法,可以不用退出vim,非常方便。
:!perl -c script.pl
#执行perl脚本,可以不用退出vim,非常方便。
:!perl script.pl
#挂起vim,回到shell,按fg可以返回vim。
:suspend或Ctrl - Z
20、帮助命令
#在Unix/Linux系统上
vimtutor
# 普通模式下
键盘输入vim或F1
# 命令行模式下
:help #显示整个帮助
:help xxx #显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
:help 'number' #Vim选项的帮助用单引号括起
#在Windows系统上
:help tutor
21、配置命令
21.1、显示当前设定
:set或者:se #显示所有修改过的配置
:set all #显示所有的设定值
:set option? #显示option的设定值
:set nooption #取消当期设定值
:ver #显示vim的所有信息(包括版本和参数等)
# 需要注意:全屏模式下
:args #查看当前打开的文件列表,当前正在编辑的文件会用[]括起来
21.2、更改设定
:set nu #显示行号
set autoindent(ai) #设置自动缩进
set autowrite(aw) #设置自动存档,默认未打开
set backup(bk) #设置自动备份,默认未打开
set background=dark或light, #设置背景风格
set cindent(cin) #设置C语言风格缩进
:set ts=4 #设置tab键转换为4个空格
:set ff=unix #修改文件dos文件为unix
:set shiftwidth? #查看缩进值
:set shiftwidth=4 #设置缩进值为4
:set ignorecase #忽略大小写的查找
:set noignorecase #不忽略大小写的查找
:set paste #insert模式下,粘贴格式不会乱掉
#查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
:set ruler?
#查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
:scriptnames
# 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,
#请确定用set lcs=tab:>-命令设置了.vimrc文件,
#并确保你的文件中的确有tab,
#如果开启了expendtab,那么tab将被扩展为空格。
:set list
:syntax #列出已经定义的语法项
:syntax clear #清除已定义的语法规则
:syntax case match # 大小写敏感
:syntax case ignore # 大小写无关
以上就是我使用 Vim 的一些使用总结,希望对你能有帮助。
