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,56lgg:进入到文本开始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后跟一个!强制离开vimwq:一般建议离开时,搭配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提权的作用咯



















