Linux 的超级记事本(代码编辑器) —— vim

avatar
作者
筋斗云
阅读量:0

Linux 的超级记事本(代码编辑器) —— vim

Linux 上如何写代码?如何编辑修改配置文件?如何为我们的代码文件做语法高亮?命令行不比图形化界面,这些操作均需要使用 Liunx 指令来操控 vim 来完成,这是什么呢?

关于 vim

vim 是一款强大的 文本编辑器 ,是开发过程中不可或缺的工具;其本质上就是记事本,但比记事本要更加强大

除了 vim ,还有 vi 也是文本编辑器

vi/vim 的区别简单点来说,它们都是 多模式文本编辑器 ,不同的是 vimvi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面,例如语法加亮,可视化操作,也可以运行于 x windowmac oswindows

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 是用小写英文字母 hjkl ,分别控制光标左、下、上、右移一格
    • 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 默认为 1
    • R进入替换模式,替换光标所到之处的字符,直到按下 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切换正在分屏的文件光标

小操作 —— 加/去 注释代码

在写代码的时候,我们总是要对代码上的调试,编写注释,所以注释代码的操作是必须要会的

加注释

  1. 首先 ctrl + v 组合键来一套,这时可以看见左下角有 VISUAL BLOCK 字样(不难发现和 INSERT 字样十分相似,没错,此时正是在名为 可视化块模式(是可视化选择模式的一种) 的模式中):

在这里插入图片描述

  1. 利用 hjkl 键来调整块区域,也可以利用 n + G 将光标跳至指定的第 n 行,例如:16G
  2. 选择好需要注释掉的区域后,需要进入 插入模式 ,此时千万注意键入的是 I ,不是 i
  3. 这里以 C/C++ 为例,进入之后请直接键入 // 注释(要输入和代码对应的注释语法格式)
  4. 最后键入 Esc 回到 命令模式 ,一次不行按两次

非常麻烦 ^ ^

去注释

比加注释略微简单:

  1. 还是 ctrl + v 组合键先来一套
  2. 利用 hjkl 键来调整块区域,也可以利用 n + G 将光标跳至指定的第 n 行,但此时要注意:我们选中的块要包含且仅包含用于注释的语法代码!!!(实际上是 选中 注释语法代码)
  3. 直接键入 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 账号密码哦

接下来按着步骤执行:

  1. 执行 su 指令,正确输入 root 密码后,你就是 root
  2. 执行 vim /etc/sudoers 指令,进入配置文件
  3. 首先输入 : 进入 底行模式 ,再输入 set nu 后回车调出行号
  4. 下图可以看见允许 sudo 提权的用户,在下图所示的 100 行 root 的下一行添加你自己的用户名(像 101 行这样,我这里是 exercise ),自己操作哦 ^ ^( 命令模式 下先 yy 复制下图的第 100 行,再 p 粘在下面,按 i 进入 插入模式 并修改为你自己的普通用户名)
    在这里插入图片描述
  5. 添加完成后须 强制退出 ,因为此文件是只读的;即使现在你是 root ,也需要添加 ! 表达强制的决心(:wq!
  6. 回到你普通用户的身份 ,再次执行 sudo touch file.txt 指令并输入对应的普通用户密码 后是成功的,查看文件会发现,虽然你是普通用户 ,但文件的 拥有者所属组 却是 root ,这就是 sudo 提权的作用咯
    在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!