Vim的使用

nitesy
• 阅读 252

一、vim的模式


模式 功能
命令模式 进行查看文件内容, 修改文件, 关键的搜索等操作。
编辑模式 对文件内容进行修改和内容添加
末行模式 执行Linux命令, 保存文件, 进行行的跳转, 窗口分屏等操作

具体关系如图 Vim的使用


二、命令模式


#以vim方式打开/创建 文件
vim 文件名

1.保存退出

ZZ

2.代码格式化

gg=G

3.光标移动

快捷键 功能 备注
h 光标左移 <--
j 光标下移
k 光标上移
l 光标右移 -->
0 光标移动到行首 /
$ 光标移动到行尾部 /
gg 光标移动到文件头 第一行的开始
G 光标移动到文件尾部 最后一行的开始
nG 行跳转 跳转到第n行
n+回车 相对跳转 n 行 向下跳转n行

4.删除命令

vim中其实没有删除操作,所谓的删除都是剪切

快捷键 功能 备注
x 删除光标后边的字符 光标盖住的字符
X 删除光标前边的字符 /
dw 删除单词 要先把光标移动到单词的第一个字母上再删除,否则单词只能被删除一部分
d0 删除光标前的字符串 从字符串开头到光标当前位置的字符串被删除了
d$ 删除光标后的字符串 从光标当前位置到字符串尾部的字符串被删除了
dd 删除光标所在行
ndd 删除n行 从光标所在行开始删除n行,n对应的是一个整数

5.撤销和反撤销

快捷键 功能 备注
u 撤销 相当于windows中的 ctrl+z
ctrl+r 反撤销 相当于ctrl+y

6.复制和粘贴

由于vim没有删除只有剪切,所以删除的数据可以用来粘贴

快捷键 功能 备注
p 粘贴到光标所在行的下边 小写的 p
P 粘贴到光标所在行的上边 大写的 P
yy 复制光标所在行 /
nyy 从光标所在行向下复制 n 行 n 是要复制的行数,代表一个整数

7.可视模式

可视模式类似于windows中鼠标选择一块区域(进行多选)

v: 进入的字符可视化模式(Characterwise visual mode),文本选择是以字符为单位的。
V :进入的行可视化模式(Linewise visual mode),文本选择是以行为单位的。
ctrl-v: 进入的块可视化模式(Blockwise visual mode),可以选择一个矩形内的文本。
快捷键 功能 备注
h 光标向左移动 移动光标用于可视模式下的数据块选择
j 光标向下移动 移动光标用于可视模式下的数据块选择
k 光标向上移动 移动光标用于可视模式下的数据块选择
l 光标向右移动 移动光标用于可视模式下的数据块选择
d 删除(剪切) 删除可视模式下选中的数据块
y 复制 复制可视模式下选中的数据块
p 数据粘贴到光标的后边 粘贴在可视模式下复制或剪切的数据块
P 数据粘贴到光标的前边 粘贴在可视模式下复制或剪切的数据块

通过可视模式进行代码注释

1.通过 ctrl+v 进入块可视模式
2.移动光标上移(k)或者下移(j),选中多个代码行的开头
3.选择完毕后,按大写的的I键,进入“insert” 模式,输入注释符,例如: //
4.最后按ESC键

同样 Ctrl+v 进入列选择模式,移动光标把要删除的注释符选中,按下d,注释就被删除了

8.替换

命令模式下的替换功能并不强大,常用于单字符的切换

快捷键 功能 备注
r 替换光标后的单个字符
R 替换光标后的多个字符 按 esc 结束替换

9.查找

/查找的关键词 回车 使用n/N切换搜索到的关键词们

搜索快捷键 关键字遍历 描述 备注
/ n 从当前位置向下 /
N 从当前位置向上 /
? n 从当前位置向上 /
N 从当前位置向下 /
# n 从当前位置向上 光标需要先放在被搜索的关键字上,键盘上按 #
N 从当前位置向下

10.查看man文档

man 文档, 是Linux中自带的帮助文档, 可查询shell命令或标准API函数或系统自带的配置文件格式的说明等信息。

但是man也是分章节的

章节 说明
section 1 Linux提供的所有shell命令
section 2 系统函数(由内核提供的)
section 3 库调函数(程序库中的函数)
section 4 特殊文件(通常在/dev目录中可以找到)
section 5 系统配置文件格式和约定,比如:/etc/passwd
section 6 游戏(如果有的话)
section 7 杂项(包括宏包和约定)
section 8 系统管理命令(通常仅针对root用户)
section 9 内核例程[非标准]
#查询第一章的shell命令
man 1 cp

#查询第二章的系统函数 (如: read, write, open 等)
man 2 read

# 查询第三章的标准的库函数 (如: fread, fwrite, fopen 等)
man 3 fread

# 查询第五章的特殊的配置文件说明, 比如: /etc/passwd 或者 /etc/group
man 5 passwd

如果不写章节号,从第一章开始搜索查询的关键字,如果查询到了, 直接就结束了 比如当查询 printf 函数时不加章节号,就得不到我们我们想要的结果

当我们在vim的命令模式下使用man 1.找到要查看的函数,将光标放上去 2.输入 章节号 + K ,就可以了


三、编辑模式

如果要切换到编辑模式需要从命令模式通过快捷键来切换

快捷键 功能
i 从光标前边开始输入
a 从光标的后边开始输入
o 在光标下边创建新行,在新行中输入
s 删除光标后边的字符,从删除位置开始输入
I 从当前行行首开始输入
A 从当前行行尾开始输入
O 在光标上边创建新行,在新行中输入
S 删除当前行,从当前行开始输入

编辑完成后,按 Esc 就可以回到命令模式


四、末行模式

1.模式切换

#命令模式切换到末行模式
:

#末行模式切换到命令模式
1. 按两下 Esc
2. 在末行模式执行一个完整指令后自动回到命令模式

2.保存退出

末行模式下输入的命令 功能
q 退出,如果退出时文件没有保存,vim会提示是否要保存
q! 直接退出,不保存 (强制退出)
w 保存,不退出 (相当于在Windows中按了 Ctrl + S)
wq 保存并退出
x 保存并退出

3.替换

末行模式下的替换功能强大的多

末行模式下的替换命令 说明
s/被替换的关键字/新的关键字/g 只对光标所在行进行替换
行号1, 行号2s/被替换的关键字/新的关键字/g [行号1, 行号2] 是一个从小到大的范围,对这个范围进行替换
%s/被替换的关键字/新的关键字/g % 代表对所有行进行替换

g的功能是一整行都进行替换 如果不加g,效果是每一行的第一个关键词被替换


4.分屏

末行模式命令或者快捷键 说明 备注
sp 水平分屏,多个窗口垂直排列 多个窗口中显示同一个文件里的内容
vsp 垂直分屏,多个窗口水平排列 多个窗口中显示同一个文件里的内容
ctrl+w+w 光标在打开的屏幕之间切换 快捷键操作 (按住 Ctrl 然后按两次 w)
qall 同时退出多个屏幕 /
wqall 同时保存退出多个屏幕 /
sp 文件名 分屏的同时指定打开的文件的名字 在新窗口中显示指定的文件的内容
vsp 文件名 分屏的同时指定打开的文件的名字 在新窗口中显示指定的文件的内容

除了在命令模式下分屏, 我们也可以在使用vim打开文件的时候直接分屏, 下边是需要用到的参数: -o: 水平分屏 -O: 垂直分屏

# 水平分屏
vim -o 文件1, 文件2, 文件3 ...
# 垂直分屏
vim -O 文件1, 文件2, 文件3 ...

5.行跳转

:行号 #即可跳转到指定行号

6.执行shell命令

#语法格式
:!shell命令

#eg:
:!ll   #回车即可

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
MBR笔记
<bochs:100000000000e\WGUI\Simclientsize(0,0)!stretchedsize(640,480)!<bochs:2b0x7c00<bochs:3c00000003740i\BIOS\$Revision:1.166$$Date:2006/08/1117
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
nitesy
nitesy
Lv1
技术交流(吹水)群: q976036684
文章
6
粉丝
1
获赞
2