1.搭建实验环境
1.1 直接使用CentOS系统
然后输入vim
会进入vim,并显示一下信息。
1.2Windows版本安装教程
https://blog.csdn.net/WeiHao0240/article/details/104897089
2.常用系统指令
指令 | 说明 |
---|---|
vim --version | 输出vim基本信息 |
vim -u NONE -N | -u NONE不加载vimrc,-N会使能“nocompatible”选项,防止进入vi兼容模式 |
vim -u cod/essential.vim | 取代你的vimrc文件 |
vim 文件名/文件路径 | vim打开了你后面跟的文件,如果没有就会新建这个文件 |
3.vim编辑文件
vim jack.txt
首先会进入普通模式
按
i
进入插入模式
然后输入要编辑的内容
1.按
ESC
退出插入模式
2.按:
进入命令行模式
3.输入wq
命令回车,保存并退出
4.常用vimrc配置
windows版本在安装目录下
D:\Program Files\Vim\_vimrc
文件
linux在/etc/vim/vimrc
修改全局文件
" tab设置空格数
set tabstop=4
" 退回tab的空格数
set softtabstop=4
" 每一级缩进的长度
set shiftwidth=4
" 用制表符表示一个缩进
set noexpandtab
" 显示行号
set nu
" 自动缩进
set autoindent
" C语言自动缩进
set cindent
" 设置保留历史命令条数
set history=200
" 全局设置忽略查找大小写
set ignorecase
" 全局设置智能大小写
set smartcase
5.常用vim操作符
操作符 + 动作命令 = 操作
操作符重复两次时会作用于当前行。
操作符 | 说明 |
---|---|
c | 修改 |
d | 删除 |
y | 复制到寄存器 |
g~ | 反转大小写 |
gu | 转换为小写 |
gU | 转换为大写, gUU 作用于当前行 |
> | 增加缩进 |
< | 减小缩进 |
= | 自动缩进 |
! | 使用外部程序过滤{motion}所跨越的行 |
6.常用vim指令-普通模式
单词:由
数字
/字母
/下划线
/.
'
组成
字串:非空字符组成`
指令 | 说明 |
---|---|
. | 重复上次的操作:[普通模式,插入模式)&& [插入模式,ESC] |
* | 匹配当前光标单词,并查找 |
/pattern + 回车 | 文档中查找下一处匹配项 ,n 下一个,N 上一个 |
?pattern + 回车 | 文档中查找上一处匹配项,n 下一个,N 上一个 |
: [range]s[ubstitute]/target/replacement/[flags] | 查找 替换,& 下一个,u 撤销,最后标志位g 代表全局,c 代表需确认,n 代表不执行替换仅报告匹配次数& 上一个标志位 |
:%s/target/replacement/g | 查找替换全部,u 撤销.:%s///gn 上次查找字符的个数 |
"% | 当前文件名 |
"# | 轮换文件名 |
". | 上次插入文本 |
": | 上次执行Ex命令 |
/ | 上次查找模式 |
/\c | 忽略大小写查找 |
/\C | 强制大小写查找 |
/\v | very magic模式查找,一般查找需要用\ 转义(]{ .这个模式不需要 |
/\V | 原义查找,特殊字符不需要转义 |
/\v<单词> | 完整单词匹配 |
"0P | 黏贴第一次复制寄存器内容 |
"_diw | 黑洞寄存器 |
"+p | 将系统 粘贴板内容复制到当前位置,插入模式用Ctrl +r ++ |
`` | 当前文件上次跳转动作之前的位置 |
`{letter} | 跳转到指定标记(小写字母是本文档,大写字母是全局) |
`. | 上次修改的地方 |
`^ | 上次插入的地方 |
`[ | 上次修改或复制的起始位置 |
`] | 上次修改或复制的结束位置 |
`< | 上次高亮的起始位置 |
`> | 上次高亮的结束位置 |
% | 允许在一组开闭括号之间跳转 |
0 | 光标移动到实际行的行首 |
g0 | 光标移动到屏幕行的行首 |
^ | 光标移动到实际行的第一个非空白字符 |
g^ | 光标移动到屏幕行的第一个非空白字符 |
$ | 光标移动到实际行的行尾 |
g$ | 光标移动到屏幕行的行尾 |
i、a | 当前光标后,插入模式 |
b | 移动端单词开头 |
u | 撤销上一步的操作 |
e | 定位到单词最后一个字符 |
c | 进入修改状态 |
y | 进入复制状态 |
p | 黏贴到光标之后 |
v | 进入面向字符的可视模式 |
x | 剪切当前光标下的字符 |
j | 下一行光标所在列 |
k | 上一行光标所在列 |
h | 光标往左移动一个字符 |
l | 光标往右移动一个字符 |
o | 光标所在行,回车,插入模式 |
s | 删除当前光标字符,插入模式 |
x | 删除当前光标字符 |
r | 替换当前光标字符 |
w | 定位到下一个单词 |
q{register} | 进入宏记录模式,:reg 寄存器名 查看宏自定义内容.录制时确保每条命令都可重复执行.大写的寄存器名进入追加模式 |
@{register} | 执行指定宏寄存器内容,@@执行最近调用过的宏 |
m{letter} | 给当前光标位置创建标记(小写字母是本文档,大写字母是全局) |
f{char} | 查找当前光标行后,输入单个字符,定位字符上,按; 定位下一个位置,按, 定位上一个位置 |
t{char} | 查找当前光标行后,输入单个字符,定位字符前,按; 定位下一个位置,按, 定位上一个位置 |
A | 光标所在行尾,插入模式 |
C | 删除当前光标后所有字符,插入模式 |
E | 定位下一个空格或符号 |
P | 黏贴到光标之前 |
S | 删除当前行所有字符,并在此行首,插入模式 |
I | 光标所在行首,插入模式 |
K | 单词的说明手册,:q 退出 |
J | 当前行和下一行连接 |
R | 进入替换模式 |
U | 大小写转换 |
V | 面向行的可视模式,批量选择操作 |
G | 文章行尾开头 |
W | 定位到下一个单词 |
F{char} | 查找当前光标行前,输入单个字符,定位字符上,按; 定位下一个位置,按, 定位上一个位置 |
T{char} | 查找当前光标行前,输入单个字符,定位字符后,按; 定位下一个位置,按, 定位上一个位置 |
dt. | 删除当前光标行后所有内容,直到. |
d/ge | 删除当前光标行后所有内容,直到ge |
dd | 剪切当前行 |
db | 删除此光标前到空格的文字,保留当前光标字符 |
dw | 删除整个单词 ,保留空格 |
daw | 删除整个单词,并去掉空格 |
[数字]g | 跳转到数字行 |
gg | 行首 |
ga | 显示字符编码 |
ge | 反向移动到上一个单词的结尾 |
gj | 屏幕行往下移动 |
gk | 屏幕行往上移动 |
gp | 黏贴当前行之前 |
gP | 黏贴当前行之后 |
gv | 进入上次由可视模式选中的文本范围 |
gg | 打开当前光标下的路径文件 |
gR | 进入虚拟替换模式 |
gn | 进入面向字符可视模式,并选中下一处匹配 |
gN | 进入面向字符可视模式,并选中上一处匹配 |
gU | 将指定文本转换成大写 |
cl | 删除当前光标后一个字符,插入模式 |
cw | 删除当前光标单词,插入模式 |
cW | 删除当前字串,插入模式 |
c3w | 删除3个单词 |
ci" | 修改双引号的内部内容 |
cit | 修改标签的内部内容 |
yit | 拷贝标签的内部内容 |
3cw | 删除一个单词,执行三次。数字可以用在所有指令上 |
ko | 当前光标,上一行,插入模式 |
yyp | 复制一行,并回车黏贴 |
yap | 复制段落,ap 当前段落 |
qx{changes}q | 执行一系列修改,@x 继续,u 撤销 |
c + $ | 删除当前行,并在此行首插入模式 |
$ + a | 光标所在行尾编辑 |
^ + c | 删除当前行,并在此行首插入模式 |
^ + i | 光标所在行首编辑 |
{数字}Ctrl + a | 首先光标到数字,就会按你输入的数字加上光标上的数字 |
{数字}Ctrl + x | 同事,是减法。 没有定位到数字,他会自动正向查找数字并运算。 |
Ctrl + o | 返回上一次打开文件的文件 |
Ctrl + r | 恢复上一步被撤销的操作,恢复撤销 |
Ctrl + v | 面向列块的可视模式 |
Ctrl + g | 最下面显示文件名,第几行,这一行占所有行的百分比 |
Ctrl + f | 向下翻一页 |
Ctrl + b | 向上翻一页 |
Ctrl + p | 自动补全单词 ,上一个 |
Ctrl + n | 自动补全单词,下一个 |
Ctrl + y | 确认当前自动补全单词 |
Ctrl + e | 还原最早输入的文本 |
Ctrl + w + s | 水平切分窗口 |
Ctrl + w + v | 垂直切分窗口 |
Ctrl + w + w | 窗口循环切换 |
Ctrl + w + h | 切换到左边窗口 |
Ctrl + w + j | 切换到下边窗口 |
Ctrl + w + k | 切换到上边窗口 |
Ctrl + w + l | 切换到右边窗口 |
Ctrl + w + c | 关闭活动窗口 |
Ctrl + w + o | 只保留活动窗口 |
Ctrl + w + = | 所有窗口等宽等高 |
Ctrl + w + _ | 最大化活动窗口高度 |
Ctrl + w + | | 最大化活动窗口宽度 |
[N]Ctrl + w + _ | 活动窗口高度设置N行 |
[N]Ctrl + w + | | 活动窗口宽度设置N列 |
Shift + $ | 该行行尾 ,相当于end |
Shift + {number}> | 往右缩进 |
Shift + < | 往左缩进 |
7.常用vim指令-插入模式
按键 | 说明 |
---|---|
Ctrl + h | 删除前一个字符(同退格键) |
Ctrl + w | 删除前一个单词 |
Ctrl + u | 删除至行首 |
Ctrl + [ | 切换到普通模式 |
Ctrl + o | 切换到插入-普通模式 |
Ctrl + x + s | 拼写更正 |
ESC | 切换到普通模式 |
Ctrl + r + = | 做算数运算,= 后面输入表达式按回车即可完成运算 |
Ctrl + v + u{code} | 插入字符编码字符,其中u是当使用unicode时才加上,否则后跟三位数字 |
Ctrl + k + {char1}{char2} | 插入以二合字母表示的字符;:h digraph-table 查看二合字母表 |
8.常用vim指令-可视模式
三种不同可视模式:操作字符文本、行文本和列块文本.
可视模式命令重复执行时,它会影响相同选择数量的文本.
按键 | 说明 |
---|---|
v | 进入面向字符的可视模式 |
b | 选择区域上一个单词开头处 |
c | 删除选择区域并进入插入模式,输入要修改的内容后只会在第一行显示按ESC ,才会在之前所选区域发生变化. |
o | 选择区域的开头和结尾切换,一端固定一端随光标移动 |
V | 面向行的可视模式,批量选择操作 |
U | 大小写转换==>等同于普通模式下的gU |
VG | 选择当前行到最后一行 |
iw | 选择当前单词 |
aw | 选择当前单词及一个空格 |
iW | 选择当前字串 |
aW | 选择当前字串及一个空格 |
is | 选择当前句子 |
as | 选择当前句子及一个空格 |
ip | 选择当前段落 |
ap | 选择当前段落及一个空格 |
vit | 选择标签内部的内容 |
a" | 以双引号扩大选择内容 |
i> | 选中一对尖括号所有内容 |
gUit | 选择标签内部的内容,使其大小写转换 |
Ctrl + g | 可视模式和选择模式切换 |
Ctrl + v | 面向列快的可视模式 |
9.常用vim指令-命令行模式
按
:
进入命令行模式,和shell下命令类似,输入Ex命令
后按回车
执行.
在任意时刻,可以按ESC
从命令行模式切回普通模式.
按/
或者Ctrl
+r
+=
访问表达式寄存器时也会进入命令行模式
命令 | 说明 |
---|---|
:[range]delete [x] | 删除指定范围内的行[到寄存器] |
:[range]yank [x] | 复制指定范围内的行[到寄存器] |
:[line]put [x] | 在指定行后黏贴寄存器x中的内容 |
:[range]copy {address} | 把指定范围内的行拷贝到{address}指定的行下,简写t 或者co |
:[range]move {address} | 把指定范围内的行移动到{address}指定的行下,简写m |
:[range]join | 连接指定范围内的行 |
:[range]normal {commands} | 对指定范围内的每一行执行普通命令 |
:[range]substitute/{pattern}/{string}/[flags] | 把指定范围内出现{pattern}的地方替换成{string},简写s |
:[range]global[!]/{pattern}/[cmd] | 对指定范围内匹配{pattern}的所有行执行Ex命令cmd ,简写g ,反向简写v |
:[range]!{filter} | 执行外部程序过滤指定范围.如:2,$!sort -t',' -k2 :以逗号分隔的记录,从第二行到结尾按第二列字段升序排序 |
:read !{命令} | 执行当前命令,将输出结果保存到当前文档 |
:[range]write !sh | 读取[仅选中内容]当前文件命令并在shell中执行 |
:write ! sh | 读取当前文件命令并在shell中执行 |
:write! sh | 将前文件命令保存到sh文件中 |
:{cmd1} | {cmd2} |
管道命令,执行完命令1执行命令2 |
:!{外部命令} | 执行shell或者cmd中的命令 |
:!java % | java执行当前文件,% 代表当前文件名 |
:source xxx.vim | 执行vim脚本 |
:shell | 进入shell命令模式 |
:exit | 退出shell命令模式,返回vim |
q: | 进入命令行窗口(历史命令,上下选择,按i 进入插入模式,编辑历史命令,回车执行) |
q/ | 进入查找命令行窗口(查找历史命令,上下选择,按i 进入插入模式,编辑历史命令,回车执行) |
:0 | 虚拟行,在文件第一行上方 |
:e | 刷新当前文档 |
:'m | 标记m的行 |
:’< | 高亮选区的起始行 |
:6t. | 将第6行复制到当前行下方 |
:t6 | 把当前行复制到第6行下方 |
:t. | 把当前行复制下方,类似yyp |
:t$ | 把当前行复制文本结尾 |
:’<,’>t0 | 把高亮选择的行复制到文件开头 |
:’> | 高亮选区的结束行 |
:数字 | 光标跳转到指定行 |
:[数字]p | 打印当前行,同print ;打印数字行 |
:[数字]d | 删除第数字行 |
: $ | 光标跳转到最后一行 |
@: | 重复上次命令 |
:{start},{end}p | 打印从开始到结束行 |
: /内容/+数字,/内容/-数字 | 匹配开始内容加上偏移量行,到结束内容减去数字偏移量行 |
:.,$p | 当前行到最后一行打印 |
:%p | 当前文档所有行打印 |
:’<,’>normal . | 对高亮选择区域执行普通模式下的. 命令 |
Ctrl + r | 复制光标下的单词 |
Ctrl + w | 黏贴光标下的单词 |
Ctrl + a | 黏贴光标下的字串,空格隔开的 |
Ctrl + d | 显示已输入命令可用列表 |
Ctrl + f | 保存当前命令,并进入命令行窗口 |
Tab |
命令自动补全 |
Shift + Tab |
反向命令自动补全 |
[过滤字符]上下 |
历史命令切换,前面可加前缀过滤,可在vimrc里面修改history 个数 |
:args | 显示所有多个文件列表,当用vim files/*.java 打开多个文件时,文件会加载到缓冲区 |
:first | 显示第一个打开文件 |
:next | 显示下一个打开文件 |
:bnext | 显示下一个打开文件 |
:bprev | 显示上一个打开文件 |
:bfirst | 显示第一个一个打开文件 |
:blast | 显示最后一个打开文件 |
:bufer {bufname} | 跳转到指定编号缓冲区 |
:bdelete {bufname} | 删除到指定编号可以多个,空格隔开缓冲区, 也可以范围删除N,M bdelete |
:argdo source batch.vim | 对所有同时打开的多个文件一起执行batch.vim脚本 |
:ls | 显示所有被载入内存的文件列表,% 表示当前窗口可见,# 代表轮换文件 Ctrl+^ 交替文件 |
:vimgrep /查找字符/ ** | 多个文件里面查找字符 |
:quit | 退出缓冲区 |
:qall! | 关闭所有,摒弃修改无需警告,简写qa |
:write | 保存缓冲区,简写w |
:wall! | 写入所有,摒弃修改无需警告,简写wa |
:edit! | 放弃修改缓冲区,简写e |
:edit %:h<Tab> |
切换点前文件所在目录路径 |
:sp[lit] {file} | 水平切分窗口,在新窗口载入file文件 |
:vsp[lit] {file} | 垂直切分窗口,在新窗口载入file文件 |
:clo[se] | 关闭活动窗口 |
:on[ly] | 只保留活动窗口 |
Ctrl + w +T | 把当前窗口移动到新标签页 |
:tabe[dit] {file} | 在新标签页打开文件 |
:tabc[lose] | 关闭当前标签页及其中所有窗口 |
:tabc[nly] | 关闭其他标签页,只保留活动标签页 |
:tabn[ext] {N} | 切换到编号为N的标签页同:{N}gt |
:tabn[lext | 下一个标签页 gt |
:tabp[revious] | 上一个标签页gT |
:set path+=path/** | 添加路径,方便find查找 |
:set number | 显示行号 |
:set spell | 拼写检测,[s 反向跳转,]s 正向跳转,z= 建议修改列表zg ,zw 添加删除单词 |
:set spelllang=en_us | 拼写检测语言 |
vim . | 打开文件管理器同:edit . 或者:e. |
:Explore | 打开文件管理器,并显示活动缓冲区所在目录同:E |
Ctrl + ^ | 文件和文件管理器之间切换 |