Linux 的超级记事本(代码编辑器) —— vim
- 关于 vim
- vim 的使用
- 入门级使用——多模式
- 基础使用——多模式
- 插入模式(Insert mode)
- 理解
- 命令模式(command mode)
- 理解
- 命令集
- 底行模式(last line mode)
- 理解
- 命令集
- 小操作 —— 加/去 注释代码
- 加注释
- 去注释
- 入门实践:利用 vim 为普通用户添加 sudo 提权功能
- 问题描述
- 解决
Linux
上如何写代码?如何编辑修改配置文件?如何为我们的代码文件做语法高亮?命令行不比图形化界面,这些操作均需要使用 Liunx
指令来操控 vim
来完成,这是什么呢?
关于 vim
vim
是一款强大的 文本编辑器 ,是开发过程中不可或缺的工具;其本质上就是记事本,但比记事本要更加强大
除了 vim
,还有 vi
也是文本编辑器
vi/vim
的区别简单点来说,它们都是 多模式文本编辑器 ,不同的是 vim
是 vi
的升级版本,它不仅兼容 vi
的所有指令,而且还有一些新的特性在里面,例如语法加亮,可视化操作,也可以运行于 x window
、 mac os
、 windows
vim 的使用
使用 vim
来编辑文本相当简单:
vim 文本名
- 只写文件名会默认在当前文件夹寻找此文件;
- 如没找到,则会自动创建新的以此命名的文件;
- 若想编辑其他路径文件,请带上路径(相对或绝对)进行标识
进入之后恐怕你编辑不了任何东西,可能会误触一些按键,但你似乎也不知如何退出,这就是多模式的原因
入门级使用——多模式
在这里有 3 种常用的模式(不止这 3 种):命令模式,底行模式,插入模式
编辑不了任何东西,是因为你 vim + 文件名
回车后进入的是 命令模式 ,所以你现在不论做什么都会当 键入命令 来看待,而你输入的大多数按键也都被看作是无效命令,没有反应
要想编辑文本,咱可以切换到 插入模式 ,最简单的方法就是键入 i
即可,当 左下角 出现 INSERT
字样,就可以进行文本编辑了:
一旦编辑完成,可以按 Esc
退出 插入模式 ,回到 命令模式
此时你若迫不及待的想关闭文件,咱就需要从 命令模式 进入 底行模式 ,方法输入 :
即可,再输入 wq
( 底行的小命令 )按下回车即可退出,这里 w
表示保存,q
表示退出
如果按照上面的步骤完成,那么恭喜你现在已经完成了 vim
的入门级使用 ^ ^
是否觉得麻烦无比,没有办法,这是命令行,不是你的图形化界面,在图形化界面你可以自由点击,但如果是单纯的命令行下你觉得要完成输入,保存,退出,异常,是否正常关闭等等这么多操作,可能吗?
基础使用——多模式
我们说到有三种模式: 命令模式,底行模式,插入模式,那么如何理解它们呢?
插入模式(Insert mode)
理解
只有在 Insert mode 下,才可以做文字输入,按 ESC
键可回到 命令模式 ;该模式是我们后面用的最频繁
的编辑模式
根据上面的步骤,我们知道这肯定是用来 编辑 文本的模式,想怎么用就怎么用呗
命令模式(command mode)
理解
允许使用者通过命令,来进行文本的编辑 控制
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode
乍一听这不是和 插入模式 一样吗?实则不是,平时使用 记事本 时我们不是通过键盘输入我们需要的东西吗?
那鼠标选中,复制整行,删除整行和这里的 插入模式 还有关系吗?所以 命令模式 的重点是对文本进行 控制
命令集
-
插入模式
i
进入 插入模式 后,是从光标当前位置开始输入文件a
进入 插入模式 后,是从光标当前位置的下一个位置开始输入文字o
进入 插入模式 后,是光标当前位置的下一行插入新的一行,从行首开始输入文字
-
从 插入模式 切换为 命令模式
ESC
键
-
移动光标
vim
可以直接用键盘上的上下左右键完成上下左右移动,但正规的vim
是用小写英文字母h
、j
、k
、l
,分别控制光标左、下、上、右移一格G
:移动到文章的最后$
:移动到光标所在行的 “行尾”^
:移动到光标所在行的 “行首”w
:光标跳到下个字(单词)的开头e
:光标跳到下个字(单词)的字尾b
:光标回到上个字(单词)的开头n + l
:光标移到该行的第 n 个位置,如:5l
,56l
gg
:进入到文本开始G
:进入文本末端ctrl + b
:屏幕往“后”移动一页ctrl + f
:屏幕往“前”移动一页ctrl + u
:屏幕往“后”移动半页ctrl + d
:屏幕往“前”移动半页
-
删除文字
x
:每按一次,删除光标所在位置的一个字符n + x
:例如:6x
表示删除光标所在位置的 “后面(包含自己在内)” 的 6 个字符X
:大写的X
,每按一次,删除光标所在位置的 “前面” 一个字符n + X
:例如:20X
表示删除光标所在位置的 “前面” 20个字符dd
:删除光标所在行n + dd
:从光标所在行开始删除 n 行
-
复制
yw
:将光标所在之处到字尾的字符复制到缓冲区中n + yw
:复制 n 个字到缓冲区yy
:复制光标所在行到缓冲区n + yy
:例如:6yy
表示拷贝从光标所在的该行 “往下数” 6 行文字n + p
:将缓冲区内的字符贴到光标所在位置,若有 n 贴 n 次,没有默认为 1 次。注意:所有与y
有关的复制命令都必须与p
配合才能完成复制与粘贴功能
-
替换
n + r
:替换光标所在处的 n 个字符,不写 n 默认为 1R
:进入替换模式,替换光标所到之处的字符,直到按下ESC
键为止
-
撤销上一次操作
u
:如果误执行一个命令,可以马上按下u
,回到上一个操作 进行撤销;按多次u
可以执行多次撤销ctrl + r
: 撤销的恢复
-
更改
cw
:更改光标所在处的字到字尾处c + w
:例如:c3w
表示更改 3 个字
-
跳至指定的行
ctrl + g
列出光标所在行的行号n + G
例如:15G
,表示 移动光标至文章的第 15 行行首
-
快速切换大小写
~
:快速切换大小写
底行模式(last line mode)
理解
上面两种模式绝对是对文件的内容进行控制,但你编辑好一个文件,注定有文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作;
在命令模式下, :
即可进入该模式。要查看你的所有模式:打开 vim
,底行模式 直接输入
:help vim-modes
所以 底行模式 是让 vim
和包括但不限于 shell
进行交互的
命令集
-
列出行号
set nu
:输入set nu
后,会在文件中的每一行前面列出行号set nonu
:输入set nonu
后,取消文件中的每一行前面的行号
-
跳到文件中的某一行
#
:#
号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车,就会跳到文章的第 15 行
-
查找字符
/关键字
:先按/
键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n
会往后寻找到您要的关键字为止,noh
取消高亮?关键字
:先按?
键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n
会往前寻找到您要的关键字为止,noh
取消高亮
-
保存文件
w
:在:
后输入字母w
就可以将文件保存起来
-
离开 vim
q
:按q
就是退出,如果无法离开vim
,可以在q
后跟一个!
强制离开vim
wq
:一般建议离开时,搭配w
一起使用,这样在退出的时候还可以保存文件ZZ
:保存并退出快捷键
-
执行命令
!commend
:不退出 vim ,可以进行 shell 命令的执行,常用函数查看
-
分屏
-
vs filename
:多文件分屏操作,ctrl + ww
切换正在分屏的文件光标
小操作 —— 加/去 注释代码
在写代码的时候,我们总是要对代码上的调试,编写注释,所以注释代码的操作是必须要会的
加注释
- 首先
ctrl + v
组合键来一套,这时可以看见左下角有VISUAL BLOCK
字样(不难发现和INSERT
字样十分相似,没错,此时正是在名为 可视化块模式(是可视化选择模式的一种) 的模式中):
- 利用
hjkl
键来调整块区域,也可以利用n + G
将光标跳至指定的第 n 行,例如:16G
- 选择好需要注释掉的区域后,需要进入 插入模式 ,此时千万注意键入的是
I
,不是i
- 这里以 C/C++ 为例,进入之后请直接键入
//
注释(要输入和代码对应的注释语法格式) - 最后键入
Esc
回到 命令模式 ,一次不行按两次
非常麻烦 ^ ^
去注释
比加注释略微简单:
- 还是
ctrl + v
组合键先来一套 - 利用
hjkl
键来调整块区域,也可以利用n + G
将光标跳至指定的第 n 行,但此时要注意:我们选中的块要包含且仅包含用于注释的语法代码!!!(实际上是 选中 注释语法代码) - 直接键入
d
完成(实际上是 删除 选中注释语法代码)
入门实践:利用 vim 为普通用户添加 sudo 提权功能
问题描述
在非 root
新用户进行 sudo
时,总是会出现相关权限问题,比如我执行以下指令:
sudo touch file.txt
此时会让你输入你的用户密码,接着就报出如下错误(我的用户名为 exercise
):
这里主要原因是为了 保护系统相关文件以及其他用户隐私,毕竟 sudo
提权是以普通用户的身份,却用 root
的权限执行后面的指令啊,更何况还是输入你自己的用户密码
讲白了,就是系统有充分的理由不信任你
那么如何让系统信任你,从而使用 sudo
提权?
解决
首先报错信息就和你说了:
exercise(开头是你的非 root 用户名) is not in the sudoers file.
说你不在 sudoers
这个文件里,那么问题就在这个文件里,你需要在这个配置文件里添加自己的普通用户
云服务器的 sudoers
文件在下面这个路径下:
/etc/sudoers
查看发现只有 root
(超管)才有修改权限,所以需要 root
账号密码哦
接下来按着步骤执行:
- 执行
su
指令,正确输入root
密码后,你就是root
了 - 执行
vim /etc/sudoers
指令,进入配置文件 - 首先输入
:
进入 底行模式 ,再输入set nu
后回车调出行号 - 下图可以看见允许
sudo
提权的用户,在下图所示的 100 行root
的下一行添加你自己的用户名(像 101 行这样,我这里是exercise
),自己操作哦 ^ ^( 命令模式 下先yy
复制下图的第 100 行,再p
粘在下面,按i
进入 插入模式 并修改为你自己的普通用户名)
- 添加完成后须 强制退出 ,因为此文件是只读的;即使现在你是
root
,也需要添加!
表达强制的决心(:wq!
) - 回到你普通用户的身份 ,再次执行
sudo touch file.txt
指令并输入对应的普通用户密码 后是成功的,查看文件会发现,虽然你是普通用户 ,但文件的 拥有者 和 所属组 却是root
,这就是sudo
提权的作用咯