4.vim文本编辑器

发布时间 2023-04-24 10:28:25作者: Mr丶冷文

前言

在上节课讲文件描述符的时候应该是有提到过在Linux中一切皆文件,包括鼠标、键盘、网卡等这些硬件在内,所以我们在使用Linux操作系统中需要频繁的修改文件 ,这节课就带大家学习一下Linux中非常重要的文本编辑器vim

Vim与Vi

Vi

vi是所有Linux系统都会内建的文本编辑器,他不像我们在windows的记事本那样打开一个图形窗口来进行编辑,而是在shell窗口中对文本进行编辑,不过现在很少有人会使用vi编辑器了,都是用它的替代器vim

Vim

vim 是从 vi 发展出来的一个文本编辑器,兼容 vi 的所有指令,不仅能编辑文本,而且还有代码补全、编译及错误跳转等方便编程的功能特别丰富,现在基本一些 主流的Linux操作系统上都内置了vim,我们可以看看vim官网对其的描述

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20230116/0700f475b36a44cca49c04a712ea32d2.png

Vim的工作模式

在使用vim编辑器时,共有3种工作模式,分别是底线命令模式、命令模式和编辑模式,这3种工作模式可以随意切换

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20230116/af38f52c3f6249a08254987389e2e28f.png

Vim的命令模式

在使用vim编辑文件时,默认所处的模式就是命令模式,可使用方向键(上、下、左、右)移动光标位置,也可以对其进行复制、粘贴、删除、替换、撤销等操作,接下来我们具体看看怎么使用命令模式

光标移动

这个表格中的字母是区分大小写的

输入 含义
[n] + h 或 向左箭头键(←) 光标向左移动n个字符,这里n为任意数字,可以省略,省略时默认为1
[n] + j 或 向下箭头键(↓) 光标向下移动n个字符,这里n为任意数字,可以省略,省略时默认为1
[n] + k 或 向上箭头键(↑) 光标向上移动n个字符,这里n为任意数字,可以省略,省略时默认为1
[n] + l(小写L) 或 向右箭头键(→) 光标向右移动n个字符,这里n为任意数字,可以省略,省略时默认为1
Ctrl+f 屏幕向下移动一页
Ctrl+b 屏幕向上移动一页
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
+ 光标移动到下一行的非空格字符
- 光标移动到上一行的非空格字符
[n] + 空格键 光标会向后移动 n 个字符,这里n为任意数字,可以省略,省略时默认为1,这里与右键是有区别的,当移动到这行最后时会自动换行
0 数字0,移动到行首
$ 移动到行尾
H 光标移动到这个屏幕的最上方那一行的第一个字符(非文件第1行)
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个文件的最后一行
[n] + G 移动到这个文件的第 n 行,这里n为任意数字
gg 移动到这个文件的第一行,相当于 1G
[n] + 回车键 光标向下移动 n 行,这里n为任意数字,可以省略,省略时默认为1,这里与下键是有区别的,下键不会回到行首
[n] + w/W 光标移动至下n个单词的单词首,这里n为任意数字,可以省略,省略时默认为1
[n] + b/B 光标移动至前n个单词的单词首,这里n为任意数字,可以省略,省略时默认为1
[n] + e/E 光标移动至后n个单词的单词尾,这里n为任意数字,可以省略,省略时默认为1

搜索

输入 含义
/ + [word] 向光标之下寻找一个为 word 的字符串,这里的word为任意字符串,通常配合n和N使用
? + [word] 向光标之下寻找一上为 word 的字符串,这里的word为任意字符串
n 重复前一个搜寻的动作
N 反向重复前一个搜寻的动作

复制/粘贴/撤销/删除/其它

输入 含义
[n] + x 在一行字当中向后删除n个字符,包含光标
[n] + X 在一行字当中向前删除n个字符
[n] + dd 剪切光标所在的向下 n 行,包含光标
d1G 剪切光标所在到第一行的所有数据,包含光标
dG 剪切光标所在到最后一行的所有数据,包含光标
d$ 剪切游标所在处到行尾的所有字符,包含光标
d0 剪切游标所在处到行首的所有字符
d + [n] +w 在一行中向后删除n个单词,包含光标,这里n为任意数字,省略默认为1
[n] + yy 向后复制n行,包含光标所在行,这里n为任意数字,省略默认这1
y1G 复制光标所在到第一行的所有数据,包含光标
yG 复制光标所在到最后一行的所有数据,包含光标
y$ 复制游标所在处到行尾的所有字符,包含光标
Y0 复制游标所在处到行首的所有字符
Y + [n] +w 在一行中向后复制n个单词,包含光标,这里n为任意数字,省略默认为1
p 将已复制的数据在光标下一行贴上
P 将已复制的数据在光标上一行贴上
J 将光标所在行与下一行的数据结合成同一行
u 复原前一个动作(撤销)
>> 选中行向右缩进
<< 选中行向左缩进

可视块

上面只是在移动光标的位置,当我们想要选择一块内容时可以用可视块功能进行选择,方便我们对选中区域做批量操作

输入 含义
v(小写) 字符可视化,以字符为单位进行选择
V(大写) 行可视化,以行为单位进行选择
Ctrl+v 块可视化,以块为单位进行选择,类似于在vscode中用鼠标中键进行选择

在使用可视块选中后可以使用如下输入进行批量编辑

输入 含义
d 删除选中部分文本
D 删除选中行,与d不同的是即使某行没有完全被选中,删除时也会被删除
y 将选中部分复制到剪贴板
p(小写) 将剪贴板中的内容粘贴到光标之后
P(大写) 将剪贴板中的内容粘贴到光标之前。
u(小写) 将选中部分中的大写字符全部改为小写字符。
U(大写) 将选中部分中的小写字符全部改为大写字符。
> 将选中部分右移(缩进)一个 tab 键
< 将选中部分左移一个 tab 键

Vim的编辑模式

在命令模式下输入如下可以进入编辑模式,进入输入模式后大家正常输入就可以了,大家在输入时可以按Ctrl+n/p 根据历史输入和系统库文件进行输入提示,也可以按ESC退回到命令模式

输入 含义
i 从光标处进入输入模式
I(这是一个大写i) 目前所在行的第一个非空格符进入输入模式
a 从光标下一个字符进入 输入模式
A 目前所在行的行尾进入输入模式
o 从光标所在行的下一行进入输入模式
O 从光标所在行的上一行进入输入模式
r 进入替换模式,替换光标所在字符,只会进行一次替换
R 进入替换模式,会一直替换光标所在 字符,替换后光标后移,直到按ESC键退出替换模式

Vim底线命令模式

一般情况下可以通过命令模式下按:进入 指令行模式,如果我们在编辑模式,可以先

输入 含义
:w 将编辑的数据写保存
:w! 若文件为只读时强制保存,但能不能执行成功与用户对文件的权限有关
:q 退出vim
:q! 如果修改过文件又不想保存,可以使用!强制退出
:wq 保存并退出
:wq! 强制保存并退出
:x 保存并退出
:[n1],[n2] w filename 保存n1到n2行的内容到filename中,n1,n2为行号范围,如果n1,n2省略则默认到1行到最后一行,类似于另存为
:! command 暂时离开vim去执行command命令
:%s/word1/word2/g[c] 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2,加上c为在每次替换时需要用户确认
:n1,n2s/word1/word2/g[c] 从第n1行到n2行寻找 word1 字符串,并将该字符串取代为 word2,n1,n2为行号,加上c为在每次替换时需要用户确认

Vim设置

这里列几个常用的,可以在命令模式下输入进行该次临时生效

输入 含义
set nu 显示行号
set nonu 取消行号显示
syntax on/off 开启/关闭高亮
set tabstop=4 设置tab的缩进为4格
set shiftwidth=4 设置移动命令的缩进为4格

如果想入设置生效则可以编辑/etc/vimrc文件,该文件对系统所有用户生效,如果只想改变当前用户的vim设置,可以在用户家目录下创建.vimrc文件进行设置

Vim键盘图

这张图是网上流传比较广的一张图,出自www.viemu.com,当然另一位大佬cenalulu的博客上也有进阶版大家感兴趣可以去看看史上最全Vim快捷键键位图 -- 入门到进阶

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20230118/ec45de7352ad4bd09aae45189a8eca99.gif

Vim批量注释

我们将/etc/profile考到桌面进行练习

cp /etc/profile ~/

指令行模式注释

我们使用vim打开刚刚考过来的profile文件,使用指令行进行替换

  • 在每行行首加上#
:%s/^/#/g
  • 取消每行行首的#
:%s/^#//g
  • 在每行行首加上//进行注释
:%s/^/\/\//g
  • 取消每行行首的//
:%s/^\/\//g
  • 在1到10行行首加上#注释
:1,10s/^/#/g
  • 替换文中pathmungelinux
:%s/pathmunge/linux/g
  • 撤销所有操作

可视块批量注释

  • 使用可视块以块为区域进行选择Ctrl+v第5到第10行行首
  • I(大写i)进行行首插入
  • 插入一个#加一个空格
  • ESC退出编辑即可生效

小结

这节课没有讲什么命令,主要就是vim编辑器的使用,以后我们编辑文件就不用再依赖图形窗口进行编辑了

但这个vim的指令和快捷键太多了,这个只能大家自己在使用时慢慢用,慢慢的就熟悉了