4.vim文本编辑器
前言
在上节课讲文件描述符的时候应该是有提到过在Linux中一切皆文件,包括鼠标、键盘、网卡等这些硬件在内,所以我们在使用Linux操作系统中需要频繁的修改文件 ,这节课就带大家学习一下Linux中非常重要的文本编辑器vim
Vim与Vi
Vi
vi是所有Linux系统都会内建的文本编辑器,他不像我们在windows的记事本那样打开一个图形窗口来进行编辑,而是在shell窗口中对文本进行编辑,不过现在很少有人会使用vi编辑器了,都是用它的替代器vim
Vim
vim 是从 vi 发展出来的一个文本编辑器,兼容 vi 的所有指令,不仅能编辑文本,而且还有代码补全、编译及错误跳转等方便编程的功能特别丰富,现在基本一些 主流的Linux操作系统上都内置了vim,我们可以看看vim官网对其的描述
Vim的工作模式
在使用vim编辑器时,共有3种工作模式,分别是底线命令模式、命令模式和编辑模式,这3种工作模式可以随意切换
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快捷键键位图 -- 入门到进阶
Vim批量注释
我们将/etc/profile
考到桌面进行练习
cp /etc/profile ~/
指令行模式注释
我们使用vim打开刚刚考过来的profile文件,使用指令行进行替换
- 在每行行首加上
#
:%s/^/#/g
- 取消每行行首的
#
:%s/^#//g
- 在每行行首加上
//
进行注释
:%s/^/\/\//g
- 取消每行行首的
//
:%s/^\/\//g
- 在1到10行行首加上
#
注释
:1,10s/^/#/g
- 替换文中
pathmunge
为linux
:%s/pathmunge/linux/g
- 撤销所有操作
可视块批量注释
- 使用可视块以块为区域进行选择
Ctrl+v
第5到第10行行首 - 按
I(大写i)
进行行首插入 - 插入一个
#
加一个空格
- 按
ESC
退出编辑即可生效
小结
这节课没有讲什么命令,主要就是vim
编辑器的使用,以后我们编辑文件就不用再依赖图形窗口进行编辑了
但这个vim的指令和快捷键太多了,这个只能大家自己在使用时慢慢用,慢慢的就熟悉了