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

news2024/11/19 7:40:44

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

  • 关于 vim
  • vim 的使用
    • 入门级使用——多模式
    • 基础使用——多模式
      • 插入模式(Insert mode)
        • 理解
      • 命令模式(command mode)
        • 理解
        • 命令集
      • 底行模式(last line mode)
        • 理解
        • 命令集
  • 小操作 —— 加/去 注释代码
    • 加注释
    • 去注释
  • 入门实践:利用 vim 为普通用户添加 sudo 提权功能
    • 问题描述
    • 解决

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 提权的作用咯
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Logback 快速入门

一、简介 Java 开源日志框架,以继承改善 log4j 为目的而生,是 log4j 创始人 Ceki Glc 的开源产品。 它声称有极佳的性能,占用空间更小,且提供其他日志系统缺失但很有用的特性。 其一大特色是,在 logback-classic 中本…

5G 基站特有的 5 个关键同步挑战

随着 5G 的推出和 O-RAN 联盟等举措,移动设备领域正在遭遇相当大的颠覆,这当然适用于基站和移动回程。 从手机到物联网设备,设备数量呈爆炸式增长,再加上移动视频流、工业物联网和汽车应用等新应用,给移动网络带来了容…

自学JavaScript(放假在家自学第一天)

目录 JavaScript介绍分为以下几点 1.1 JavaScript 是什么 1.2JavaScript书写位置 1.3 Javascript注释 1.4 Javascript结束符 1.5 Javascript输入输出语法 JavaScript(是什么?) 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。 2.作用(做什么?)网…

算法-插入排序

插入排序步骤 前面文章分享了两种排序算法:冒泡排序和选择排序。虽然它们的效率都是O(N2),但其实选择排序比冒泡排序快一倍。现在来学第三种排序算法——插入排序。你会发现,顾及最坏情况以外的场景将是多么有用。 插入排序包括以下步骤。 …

从0开始搭建vue + flask 旅游景点数据分析系统(一):创建前端项目

根据前面的爬虫课程,我们重新开一个坑,就是基于爬取到的数据,搭建一个vueflask的前后端分离的数据分析系统 1 通过这个系列教程可以学习到什么? 从0开始搭建一个 vue flask 的数据分析系统;了解系统的整体架构&…

BSPTool工具

BSPTool工具 链接:https://pan.baidu.com/s/1UxMPjJtCHHkadFwnOfLqww?pwd1234 提取码:1234 1.使用方式 下载下来后,双击exe即可 2.MTK常用工具 2.1 MTK导出日志功能 2.2 导fulldump日志 2.3 .合并日志: 2.4 ADB指令集合 2.5 Fastboot指…

传统自然语言处理(NLP)与大规模语言模型(LLM)详解

自然语言处理(NLP)和大规模语言模型(LLM)是理解和生成人类语言的两种主要方法。本文将介绍传统NLP和LLM的介绍、运行步骤以及它们之间的比较,帮助新手了解这两个领域的基础知识。 传统自然语言处理(NLP&…

指针!!C语言(第三篇)

目录 一. 二维数组传参的本质 二. 函数指针变量和函数指针数组 三. typedef关键字 四. 转移表 五. 回调函数以及qsort使用举例 一. 二维数组传参的本质 🍟首先我们先回顾一下二维数组是怎样传参的?我们需要传入数组名以及行数和列数,这…

VS C++ Project(项目)的工作目录设置

如果只是简单创建一个VS CProject或者MFC Project,可能很多时候,只关心将Project放在硬盘的那个位置,与Project目录相关的的其他问题,并不引人注意,我们也不是十分在意。有时我们不得不进行工作目录方面的设置&#xf…

Javascript前端面试(七)

JavaScript 部分 1. JavaScript 有哪些数据类型,它们的区别? JavaScript 共有八种数据类型,分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是 ES6 中新增的数据类型: ●Sym…

卷积神经网络(一)---原理和结构

在介绍卷积神经网络之前,先提出三个观点,正是这三个观点使得卷积神经网络能够真正起作用。 1. 局部性 对于一张图片而言,需要检测图片中的特征来决定图片的类别,通常情况下这些特征都不是由整张图片决定的,而是由一些…

暑期集训周报三

题解 SMU Summer 2024 Contest Round 8-CSDN博客 CSDN 积累题目 dp 1.花店橱窗 思路:用dp[i][j]表示第i个放在j位置上的最大价值,那么我们可以枚举i-1被放在了区间[i-1,j-1]的那个位置,找到最大价值部分,然后更新dp[i][j]&a…

gitee的远程连接与公钥SSH的连接

目录 1. 登录注册gitee1.1 登录注册1.2 创建仓库 2. 远程连接3. 公钥连接4. 参考链接 1. 登录注册gitee 1.1 登录注册 gitee官网 进入后进行登录注册 1.2 创建仓库 2. 远程连接 在你想要上传文件的文件夹中进行git初始化(我在其他文章已经写过,链接…

FastAPI(七十六)实战开发《在线课程学习系统》接口开发-- 课程详情

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 这个接口用户可以不登录,因为我们的课程随意浏览 那么我们梳理下这里的逻辑 1.根据课程id判断课程是否存在 2.课程需要返回课程的详情 3…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github:X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内,运行下面内容 依赖文件系统环境运行环…

【把玩数据结构】详解队列

目录 队列介绍队列概念队列的结构生活中的队列 队列的实现队列的初始化队列的销毁队尾入队列队头出队列获得队头元素获得队尾元素统计队列元素个数 队列介绍 队列概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列遵…

Python 代码中的 yield 到底是什么鬼?

在Python编程中,有一个强大而神秘的关键字,那就是yield。初学者常常被它搞得晕头转向,而高级开发者则借助它实现高效的代码。到底yield是什么?它又是如何在Python代码中发挥作用的呢?让我们一起来揭开它的面纱。 Pyth…

Chrome浏览器设置暗黑模式 - 护眼模式 - 亮度调节 - DarkReader - 地址栏和书签栏设置为黑色背景

效果图 全黑 浅灰 (DarkReader设置开启亮色亮度-25) 全白 前言 主要分两部分需要操作, 1)地址栏和书签栏 》 需要修改浏览器的外观模式 2)页面主体 》 需要安装darkreader插件进行设置 步骤 1)地址栏和…

Unity UGUI 实战学习笔记(3)

仅作学习,不做任何商业用途 不是源码,不是源码! 是我通过"照虎画猫"写的,可能有些小修改 不提供素材,所以应该不算是盗版资源,侵权删 拼UI 提示面板的逻辑 using System.Collections; using System.Col…

加密溢出问题

今天编写程序,使用一个非常简单的对256取模的运算,但是总是得不到正确的结果。 后来发现,是数据的值的范围问题。 例如,处理图像时,值的范围是【0,255】. 异或等等运算都是没有问题的。 但是,如果进行加法…