菜鸟笔记
提升您的技术认知

Vim入门技巧&常用命令整理

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 + ^ 文件和文件管理器之间切换