导图社区 VIM编辑器用法
详细介绍了vim编辑器的用法以及快捷键,干货满满,感兴趣的小伙伴可以参考使用!
编辑于2023-11-27 15:02:34VIM用法
VIM编辑器的用法,包含基础用法和高级用法。 VIM的配置文件是用户家目录下.vimrc, 修改该文件加入inoremap jj , 表示映射ESC键到两次j键,可以提高操作效率
Normal-mode
用于浏览文件,也包含复制,粘贴,删除等操作。这种模式下,键盘按键会当做功能键处理,不会真正的键入这些字符
漫游
h 向左
j 向下
k 向上
l 向右
w 跳转到下一个单词词首
W 和w类似,以空白符号间隔跳转
e 跳转到下一个单词的词尾
E 和e类似,以空白符号间隔跳转
b 跳转到上一个单词的词首
B 和b类似,以空白符号间隔跳转
100h表示向左移动100个字符,100j向下移动100行
0 跳到行首
^ 跳到行首第一个非空字符
$ 跳到行尾
gg 跳到文件的第一行的行首
G 快速到文件的最后一行的行尾
% 匹配括号移动,包括(,{,[
*|# 匹配光标当前所在的单词,移动光标到下一个单词处,*是下一个,#是上一个
ctrl+f 查看下一页内容
ctrl+b 查看上一页内容
100G 跳转到第一百行的行首
`. 跳转到文本最后一次修改的地方
'. 跳转到文本最后修改的那一行
`` 在最新的两个修改位置跳转
. 标记的是文本最后修改的位置
g; 在文档整个changelist里面来回跳转
g, 和g;类似,方向相反
changelist记录了文档修改的地方
ctrl+o 跳转到上一个位置
ctrl+i 跳转到下一个位置
配合使用,可以在代码间跳转
复制
yy 复制光标所在整行
100yy 复制光标坐在行及以下共100行
yw 复制光标开始的第一个单词
y$ 复制光标到行尾
yG 复制光标所在行到文本的结束
yH 复制文本开始到光标所在行的文本
fa 移动光标到本行下一个a的字符处
Fa 反前移动光标到字符a处
nfa 移动光标到下第n个字符a处
nFa 向前移动光标到第n个字符a处
ta 移动光标到a字符的前一个字符
nta 移动光标到第n个a字符前一个字符
Ta 向前移动光标到a字符出现的后一个字符
nTa 向前移动到第n个a字符出现后的一个字符
yfB 复制光标到第一个大写B中间的内容
y2fB 复制光标到第二个大写B中间的内容
剪切
x 向后剪切一个字符,如果是行尾则向前剪切
3x 剪切三个
xp 非行尾交换两个字符,如果是bs编程sb
删除
dd 删除光标所在行
200dd 删除光标所在行及以下共100行
dw 删除一个单词
dnw 删除n个单词
df" 删除到出现第一个双引号的位置
dnf" 删除到出现第n个双引号的位置
d$ 删除光标到本行的结尾
d^ 删除光标到本行的开头
dH 删除文本开始到光标所在行的文本
dG 删除光标所在行到文本的结束
粘贴
p 粘贴复制或剪切的内容
3p 将复制或剪切的内容粘贴三次
P 光标前开始粘贴
3P 光标前开始粘贴3次
缩进
<< 左缩进
>> 右缩进
可以在块选择下实现块缩进
窗口命令
ctrl+w s 水平分割窗口
ctrl+w w 切换窗口
ctrl+w q 关闭当前分屏,如果是最后一个分屏则退出VIM
ctrl+w c 关闭当前分屏
ctrl+w v 垂直分割窗口
ctrl+j|k 可以用于切换上下窗口
ctrl+h|l 可以用于切换s水平窗口
ctrl+w H|L 可以用于左右移动当前分屏
ctrl+w J|K 可以上下移动当前分屏
文件保存
ZZ 大写的字母ZZ,保存当前文件
ZQ 大写的字母ZQ, 放弃对文件的修改并退出
撤销操作和恢复
u 撤销刚才的操作
ctrl+r 恢复撤销操作
删除字符和替换
x 删除光标当前所在的字符
r 替换掉光标当前所在的字符
R 替换掉从光标开始以后的所有字符,除非<ESC>退出
大小写转换
~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~~ 改变当前行字母的大小写
gUU 将当前行的字母改成大写
guu 将当前行的字母改成小写
3gUU 将从光标所在行下面共三行字母改成大写
gUw 将光标下的单词改成大写
guw 将光标下的单词改成小写
折叠功能
zf5G 折叠当前光标行到第5行, 可以通过行号折叠,也可以通过文本选择折叠
zo 打开光标所在位置的折叠
zO 打开光标所在位置的折叠,以及嵌套的所有折叠
zc 关闭光标所在位置的折叠
zC 关闭光标所在位置的折叠,以及嵌套的所有折叠
zd 删除光标所在位置的折叠
zD 删除光标所在位置的折叠,以及嵌套的所有折叠
za 当光标在关闭折叠上时,打开折叠,反之则关闭折叠
zA 和za类似,打开和关闭包括嵌套的所有折叠
zv 打开当前光标所在位置的折叠,仅打开足够的折叠使光标所在的行不被折叠
zr 嵌套的折叠一层一层的打开
zR 打开所有折叠
zm 嵌套的折叠一层一层的关闭
zM 关闭所有折叠
会操作VIM中一个叫foldlevel的变量,zM和zR会设置foldlevel为最高级别,关闭所有折叠会设置foldlevel为0
zE 删除所有的折叠
zF 在当前光标所在行创建折叠。这样可以先创建一对折叠符号,然后再在里面写内容
2,10fo 折叠第二行到第十行
[z 移动光标到当前打开的折叠开始位置
]z 移动光标到当前打开的折叠结束位置
zj 移动光标到下一个折叠开始位置
zk 移动光标到上一个折叠结束位置
宏录制以及播放
录制宏,在普通模式按下q键(宏录制是以q键启动的),再按下字母w(字母随意),表示该宏注册为w, 然后完成操作后再次按下q表示完成录制操作。
宏播放, 在正常模式下,按下@w执行宏录制的所有操作。@@是对上次宏的重复操作。n@w, 就会执行n次w宏。
代码块注释
按键ESC进入Normal模式,Ctrl+V进入Visual Block选择模式,选中需要注释的行,然后按键Shift+i或者s进入插入模式,在块选择第一行行首键入注释符#,然后按键ESC,稍等一会儿就可以完成代码块的注释,此方法可以用来在每一行指定位置插入相同的字符
取消注释,按键ESC进入Normal模式,按键CTRL+V进入Visual Block模式,选择代码块行首的注释,然后按d完成取消注释
g+ctrl+g 字节统计,最后的ctrl+g是组合键
ggvG= 格式化代码
”0p 多次粘贴上次复制,“寄存器
Command-mode
在正常模式下按下":"(冒号)键或者/(撇号),进入命令模式,可以输入和执行一些VIM或者插件命令,这些指令包含设置环境,文件操作,调用某个功能
:%s/$/sth/ 行尾追加sth
:%s/^M//g 替换掉dos换行符,^M使用Ctrl+v Ctrl+m即可输入
:g/^/s*$/d 删除空行以及只有空格的行
:n1,n2 s/str1/str2/gic 替换行号n1到n2之间的字符串str1为str2, g关键字表示一行出现多个,则都替换,如果没有g,则只替换第一个,i关键字表示大小写不敏感,即忽略大小写,大写的字母I表示大小写敏感,这也是默认的。c关键字表示替换前确认。每个关键词均可单独使用
:%s/#.*//g 删除#之后的字符
格式是[addr]s/源字符串/目的字符串/[option] "s"表示替换操作,是"substitute"缩写 [addr]包含: “n,m”:表示从第n行到m行 “%”:表示整个文件,等同于"1,$" “.,$":表示从当前行到文件结尾 [options]包含: ”g“:globe 表示全局替换 ”c“:confirm 表示替换前交互确认 ”p":表示逐行显示(可以CTRL+L恢复屏幕) "i":ignore,不区分大小写 省略得时候表示对第一个匹配得字符串替换
/hansen 查找字符串hansen, n查找下一个匹配, N查找上一个匹配,2n查找下面第二个匹配
:help set 查看set命令的帮助信息
:set 显示与系统预设值不同的设定参数,就是自己修改的那些设定
:syntax on|off 打开和关闭程序的语法高亮
:set bg=dark|light 设置不同的背景色
文件操作
:w 将编辑的内容写入文件中
:w! 将文件在只读状态时强制写入,实际写入还得看文档权限
:q 离开vim
:qa! 退出所有文件,对所有文件不做修改保存
:x 退出文件并保存对文件的修改
:e fn 打开另外一个文件
:n 跳转到下一个文件
:N 跳转到上一个文件
:bn 跳转到下一个文件
:bp 跳转到上一个文件
:ls 列出打开的所有文件
:b2 显示第二个文件
:q! 将至退出修改过的文件,丢掉所有修改
:wq 存储后退出
:w fn 将文件另存为文件名fn
:r fn 将fn文件读入并追加到目前编辑文件光标后
:n1, n2 w fn 将n1到n2的内容存储成fn文件
:n1,n2 d 将n1到n2行的所有内容删除,d是删除关键字
:! command 显示离开编辑器并执行command命令
:r! command 执行command命令,并将执行结果追加到光标后
:sp fn1 上下分屏打开另外一个文件
:vsp fn1 左右分屏打开另外一个文件
:set nu 开启显示行号
:set hlsearch 搜索到的关键字高亮
:set autoindent 开启自动缩进
:set cursorline 打开水平线
:set backup 是否自动存储档案,当开启后,每次打开文件编辑的时候,原始文件会命名为fn~
:set ruler 打开后关闭右下角的状态栏说明
:set ic 在关键词搜索的时候区分大小写
:set showmode 打开和关闭模式切换后的状态,比如进入insert mode的时候,左下角会显示--INSERT--
:set wrap 设置折行,即一行文本超过了屏幕,则在下一行显示,这也是默认的
:set spell 打开文本拼写检测
:set list 显示文本不可见字符,如换行符
可以在参数前加no实现反向设定,如:set nonu,关闭显示行号
:set backspace=(012) 进入编辑模式,可以利用backspace来按键来删除任意字符,但是某些distribution则不容许这样。此时可以通过设置backspace来实现这个功能,=2,就是删除任何字符,=0|1时,仅可以删除输入的字符,而无法删除原来文本存在的字符
:set fdm=marker 开启折叠标记,自动在折叠的开始与结束添加三个连续的花括号作为标记,可以在文本关闭后,依旧记录折叠信息,需要每次打开都得设置这个环境,也可以把这个加入到~/.vimrc中,每次打开vim编辑器自动加载。可以在mark后的折叠"#注释{{{1"添加注释和级别号
:set fenc 查询文档编码
:set enc=utf8 转换为指定的编码
:set fileformat=unix 用来切换换行符,支持dos,unix,mac. fileformat可以简写为ff
:set sidescroll=0 当光标到达屏幕边缘的时候,自动扩展显示1/2屏幕文本,设置为1, 可以实现更加平滑的逐个字符扩展显示,此设置需要设置nowrap
:set scrolloff=3 设置滚动行数
:set linebreak 设置VIM在合适的位置折行,即^|!*-+;:./?这些符号位置折行
:set breakat-=_ 设置将_下划线从折行中移除
:set showbreak=-> 在折行的位置显示指示信息
:set nolinebreak 恢复自定义折行
设置折行,在折行内可以通过gj或者g<Down>来移动,向上移动为gk或者g<Up>
:set ts=4 设置TAB为四个空格长度
:set expandtab 替换TAB为空格,设置后之后的tab被替换为ts数量的空格
%retab! 重新加载TAB,这样原来的TAB也会替换为ts数量的空格
替换TAB为空格,!使用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB
:set ts=4
:set noexpandtab
:%retab!
替换空格为TAB
tabe fn 使用VIM插件minibuffer新建标签页功能,在一个新的标签页编辑文件fn,
gt 切换到下一个标签页
gT 切换到上一个标签页
:tabr 切换到第一个标签页
:tabl 切换到最后一个标签页
:tabm [N] 把当前tab移动到第N个tab之后
:map ^M I#<ESC> 设置快捷键Ctrl+m在光标处所在行的行首插入#(#代表注释),然后在退出编辑状态。map是关键字,后面的是key和value。key对应的是^M,这个key是快捷键Ctrl+v+M输入的,代表快捷键Ctrl+M。Value对应的是I#<ESC>, 表示依次执行这些快捷键。I表示切换光标至行首并进入编辑状态,#表示输入#,<ESC>表示退出编辑状态。
:ab email hualong1009@foxmail.com ab是关键词,该命令执行后,然后切换到编辑模式,输入email后,会把email自动替换为邮件地址hualong1009@foxmail.com。适用于频繁输入同样的长字符串场景
:sort r /regex/ regex是正则表达式,在vim编辑器中对文本进行排序
:toHTML 将当前的页面转换为HTML
:reg 查看所有的寄存器状态,存器是Vim用来存储一些文本或操作细节的内存空间。每个空间都有一个标识符,以便随后可以访问它
Insert-mode
在正常模式按下一些按键(如i, a等)进入插入模式 i 从当前光标的位置进入插入模式 I 进入插入模式,并将光标至于行首 a 追加模式,置光标于当前光标之后 A 追加模式,置光标于行末 o 在当前行之下新加一行,并进入插入模式 O 在当前行之前新加一行,并进入插入模式 ESC 退出插入模式
ctrl+[或者ctrl+c 组合键实现ESC按键功能,即退出编辑状态
ctrl+d 组合键左缩进
ctrl+t 组合键右缩进
关键字和路径补全
ctrl+x -> ctrl+n 透过目前正在编辑的文件内容作为关键库补全
ctrl+n 也可以快速补全,没有提示
ctrl+x -> ctrl+f 以当前目录内的档案作为关键字补全路径文件
ctrl+x -> ctrl+o 以文件名作为语法补充,以wim内建的关键字予以补全
ctrl+x+i 行补齐
ctrl+w 删除光标所在位置向前的单词
ctrl+u 删除光标所在位置到行首
Visual-mode
可视化模式 按下v,V,+V, 可以进入可视化模式,操作像是拿鼠标选择一样,操作会很方便。 继续按下CTRL+v会退出可视化模式
使用方向键或者h,j,k,l进行漫游,选中相应的内容,也可以使用gg和G直接到文件首或尾
ctrl+v 块模式,块操作,和UE的块操作一样
o 跳转光标到选中块的另一个端点
U 将选中块中的内容转化为大写
O 跳转光标到块的另一个端点
aw 选中一个字
ab 选中{}括号中的所有内容,包含括号本身
aB 选中{}括号中的所有内容
ib 选中括号中的内容,不包含括号
iB 选中括号中的所有内容
va 当光标在"",'',(),{},[]当中时候,va表示选中""内所有的内容包含双引号
vi 当光标在"",'',(),{},[]当中时候,va表示选中""内所有的内容不包含双引号
> 块右移
< 块左移
y 复制块
d 删除块
~ 切换块中内容的大小写
在该模式下选择区域后直接输入:, VIM会自动补全为:'<,'> 这个是可视模式下选区的替换操作,表示操作范围,类似与制定n1, n2
vim编辑文本
vim file 编辑一个文件
vim fn1 fn2 ... 同时编辑多个文件,默认只显示第一个文件,也就是file1
vim -on fn1 fn2 ... 上下分屏同时编辑多个文件
vim -On fn1 fn2 ... 左右分屏打开多个文件
vim -b ...用二进制打开文档
vim +num 打开文档并定位到num行
vimdiff a.txt b.txt 比对文本
vimdiff文本比对
zc 折叠行
zo 打开折叠
]c 跳转到下一个不同处
[c 跳转到上一个不同处
Ctrl+w+w 左右或者上下切换窗口
dp 把光标所在的行复制到另一个文件对应的行中
do 把比对文件对应的行复制到光标所在位置的行