Linux系统中的Vim编辑器

news/2024/11/15 17:31:33/文章来源:https://www.cnblogs.com/xyh9039/p/18327652

本章将和大家分享Linux系统中的Vim编辑器。废话不多说,下面我们直接进入主题。

一、Vim 入门帮助

Vim 带有完整的帮助文档:进入 Vim 后输入“:help”即可访问

二、Vim 模式介绍 

与大部分其它编辑器不同,进入 Vim 后,缺省状态下键入的字符并不会插入到所编辑的文件之中。Vim 的模式(mode,可以简单地理解为“状态 ”)概念非常重要。需要知道 Vim 有以下几个模式:

  • 正常(normal)模式,缺省的编辑模式;下面如果不加特殊说明,提到的命令都直接在正常模式下输入;任何其它模式中都可以通过键盘上的 Esc 键回到正常模式。
  • 命令(command)模式,用于执行较长、较复杂的命令;在正常模式下输入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可进入该模式;命令模式下的命令要输入回车键(Enter)才算完成。
  • 插入(insert)模式,输入文本时使用;在正常模式下键入“i”(insert)或“a”(append)即可进入插入模式(也有另外一些命令,例如:“c”,也可以进入插入模式,但这些命令有其它的作用)。
  • 可视(visual)模式,用于选定文本块;可以在正常模式下输入“v”(小写)来按字符选定,输入“V”(大写)来按行选定,或输入“Ctrl-V”来按方块选定。
  • 选择(select)模式,与普通的 Windows 编辑器较为接近的选择文本块的方式;在以可视模式和选择模式之一选定文本块之后,可以使用“Ctrl-G”切换到另一模式 —— 该模式很少在 Linux 上使用,本文中就不再介绍了。

1、正常模式

2、命令模式

3、插入模式

  • i 光标所在位置插入
  • I 光标所在位置行首插入
  • o 光标所在位置下方新开一行插入
  • O 光标所在位置上方新开一行插入
  • a 光标所在位置下一个字符的位置插入
  • A 光标所在位置行行尾插入

三、Vim 实例

1、首次运行 Vim

[root@localhost myfolder]# ll
总用量 4
-rw-r--r--. 1 root root 152 7月  27 23:28 file1
[root@localhost myfolder]# vim file1

使 Vim 开始编辑一个名为 file1 的文件,屏幕上看起来大致是这样:

1)“黑色块”代表当前光标位置;

2)上波浪线(~)表示所在行并不是文件内容的一部分。换句话说,Vim 将文件之外的部分显示为波浪线;

3)在窗口的底部,一个消息行显示说当前正在编辑的文件叫 file1,它有27行,152个字符,当前光标所在位置为第21行的第1位。

如果是新文件呢?

[root@localhost myfolder]# vim file

在窗口的底部,一个消息行显示说当前正在编辑的文件叫file,并且它是一个新文件。

2、插入文本

Vim 编辑器是一个模式编辑器。这意味着在不同状态下编辑器有不同的行为模式。两个基本的模式 Normal 模式和 Insert 模式。在 Normal 模式下你输入的每一个字符都被视为一个命令。而在 Insert 模式下输入的字符都作为实际要输入的文本内容。刚启动时 Vim 工作于 Normal 模式。要进入 Insert 模式你需要使用“i”命 令(i 意为 Insert),接下来就可以直接输入了。别怕出错,错了还可以修改。

编辑内容时使用 回车键 换行,编辑完成后按下 Esc 键退出 Insert 模式,回到 Normal 模式。

要知道你现在所处的工作模式是什么,打开显示模式的开关:

:set showmode
:set noshowmode 关闭显示模式

你会看到按下冒号键之后当前光标跑到窗口的最后一行去了。那是使用冒号命令的地方(顾名思义,冒号命令就是总是以冒号打头的命令)。最后按下回车键结束整个命令(所有的冒号命令都以这种方式表明命令的结束)。

现在,如果你输入了“i”命令 Vim 就会在窗口底部显示—INSERT—(插入)。这表明你目前处于 Insert 模式。如果按下 Esc 键返回到 Normal 模式,则刚才显示出来的模式—INSERT—就会消失;Normal 模式并不会显示—NORMAL—,作为默认的工作模式它不显示任何字符串。

不管你当前所处的模式是什么,按下 Esc 键都会让你回到 Normal 模式(即使已经在 Normal 模式下)。有时需要按两次,如果 Vim 以一声蜂鸣回答你,那说明你已经是在 Normal 模式了。

3、移动光标

回到 Normal 模式后,你就可以用下面的命令来移动光标:

  • h 左
  • j 下
  • k 上
  • l 右

备注:同时你还可以用箭头键来移动光标。不过这样做实际上会大大降低你的效率,因为用这些键你需要不停地在字母区和箭头键之间频繁转换。

4、删除字符

  • 在 Normal 模式下要删除一个字符,只需要将光标移到该字符的前面,然后按下“x”。
  • 在 Normal 模式下要删除一行,使用“dd”命令。
  • 命令“u”可以撤消上一次的操作。
  • 如果你撤消了多次,你还可以用 CTRL R 来反转撤消的动作,即反撤消。
  • 撤消命令还有另一种形式,大写的“U”命令,它一次撤消对一行的全部操作。第二次使用该命令则会撤消前一个“U”的操作。

5、其它编辑命令

另起一行 o/O (在 Normal 模式下):

  • “o”命令可以在当前行的下面另起一行,并使当前模式转为 Insert 模 式。这样你可以在该命令之后直接输入内容。
  • “O”命令(注意是大写的字母O)将在当前行的上面另起一行,并使当前模式转为 Insert 模 式。

6、退出

  • 在 Normal 模式下要退出 Vim,可以使用“ZZ”命令。
  • 放弃所有修改可以使用 :q! 命令。
  • 放弃所有修改并重新载入可以使用 :e! 命令。
  • 保存并退出可以使用 :wq 或 :wq!(强制保存退出) 命令。

7、光标的指定移动

  • 在 Normal 模式下,“G”命令指定一个命令计数,这个命令就会把光标定位到由命令计数指定的行上,比 如“33G”就会把光标置于第 33 行上。
  • “G”命令会把光标定位到最后一行上。
  • “gg”命令是跳转到第一行的快捷方法,和“1G”的效果是一样的。

8、简单搜索

1)“/string”命令,可用于搜索一个字符串,例如:要找到单词“mysql”,则可以使用命令:“/mysql”。

要查找上次查找的字符串的下一个位置,使用“n”命令。如果你知道你要找的确切位置是目标字符串的第几次出现,还可以在“n”之前放置一个命令计数,例如:“3n”则会去查找目标字符串的第3次出现。向光标所在位置以上查找用大写的“N”。

2)“?string”命令,“?”命令与“/”的工作相同,只是搜索方向相反。

3)忽略大小写,可以通过设置“ignorecase”选项:

:set ignorecase  //忽略大小写
:set noignorecase  //取消忽略大小写

4)查找结果高亮显示

:set hlsearch  //查找结果设置为高亮显示
:set nohlsearch  //取消高亮显示
:nohlsearch  //只去掉当前的高亮显示

9、复制粘贴

要把文本内容从一处复制到另一处:

  • 先删除 dd 再粘贴 p
  • “y”操作符命令会把文本复制到一个寄存器中,然后可以用“p”命令把它取回。

“y”命令:

  • “yw”来复制一个word;
  • “y2w”命令复制两个word;
  • “yy”复制一行;
  • “3yy”复制光标所在行和向下的行,一共三行。

10、替换字符

  • :s/UNIX/linux 对光标所在行第一个出现的 UNIX 替换成 linux
  • :s/UNIX/linux /g 对光标所在行所有 UNIX 都替换成 linux ,g 表示全行替换
  • :% s/UNIX/linux /g 将全文中的 UNIX 都替换成 linux ,其中“%”指定该命令将作用于所有行上

四、Vim 的保护机制

如果我们没有通过 q 退出,而是通过其他方式强行退出,比如说直接关终端,会导致 vim 的一个报错,当我们下次打开这个文件的时候,会提示:

E325: 注意
发现交换文件 ".file.swp"所有者: root    日期: Sun Jul 28 19:43:04 2024文件名: ~root/myfolder/file修改过: 是用户名: root      主机名: localhost.localdomain进程 ID: 3884
正在打开文件 "file"日期: Sun Jul 28 17:25:26 2024(1) Another program may be editing the same file.  If this is the case,be careful not to end up with two different instances of the samefile when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.如果是这样,请用 ":recover""vim -r file"恢复修改的内容 (请见 ":help recovery")。如果你已经进行了恢复,请删除交换文件 ".file.swp"以避免再看到此消息。交换文件 ".file.swp" 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 删除交换文件((D)), 退出((Q)), 中止((A)):

这是因为 vim 他不是实时写入的机制,他会先把文件写到内存,等我们执行 w 操作以后,再写回到原文件。那么在写回原文件,或者执行 q 的放弃操作之前,会生成一个临时的文件,以 . 开头,以 .swp 结尾。当我们看到这种情况,就说明这个文件是在被编辑的过程中强制退出的,或者是正在被人编辑。

所以这个文件的作用就是防止强制退出造成的数据安全隐患,和防止文件同时被多次修改。

我们可以根据他的提示执行相应的操作,比如说 Q 退出。如果想要顺利编辑这个文件的话,一方面可以使用 E 直接编辑,或者先退出,把 swp 文件删除了以后再编辑也是可以的。

注意:使用 vim 需要注意一下权限问题,必须要有读写权限才能使用 vim 。

可以看一下没有写权限和没有读权限会出现什么问题。

 

此文由博主精心撰写转载请保留此原文链接:https://www.cnblogs.com/xyh9039/p/18327652

版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024暑假集训测试14

前言比赛链接。最可惜的一点还是本来 T3 暴力能拿 \(20\),优化成 \(15\) 了,不然就 rk2 了,晚上可能又有泡面吃了。 不过因为 T2、T4 两道水题,剩下两道不太可做(至少对于我是这样的),这两题不挂分的打的貌似都不错。 T3 没学过莫反输麻了。 T1 黑暗型高松灯 本来应该是…

一篇文章教你如何读懂 JMeter聚合报告参数!

在进行性能测试时,JMeter是一款备受推崇的开源工具。而其中的聚合报告(Aggregate Report)是我们分析测试结果、了解系统性能的重要依据。今天,我们就来深入探讨如何读懂JMeter聚合报告中的各项参数。 面对复杂的聚合报告,究竟哪些参数是我们必须关注的?这些参数背后又隐藏…

[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂

标题即摘要,暂不赘述。 如果文中有不妥或不对的,多多交流。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18328759 出自【进步*于辰的博客】参考笔记一,P10.4、P13.2;笔记三,P48.1。目录先言1、通用函数2、…

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

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

智能家居如何把老款定频空调变成智能“变频”空调#米家#智能家居#HA

背景最近长沙的天气暴热,室内达到了34-35度,天气预报最高温度上了40度,这么酷热的天气,离开了空调,基本上就是一身汗,全身湿透,特别难受,然后不得不开启家里的一台将近10年的老式定频空调,输入功率970W,OMG,一小时将近一度电,假设一天吹10小时,就是10度电,一个月…

联想电脑 win11系统,关闭联想锁屏后,windows聚焦不生效(其他电脑同理)

先排查下前置条件,然后再使用解决方案。附加:如何关闭联想锁屏: 打开联想电脑管家->工具箱->联想锁屏->关闭排查 原因1:是不是使用clash代理导致的联网问题。 解决:在clash启动"UWP应用联网限制解除工具"助手,全选,保存,等待一阵即可以正常更新屏保…

imbalanced-learn库的作用和安装

imbalanced-learn是一个Python库,‌专门用于处理不平衡数据集的机器学习问题。‌ 这个库提供了一系列的重采样技术、‌组合方法和机器学习算法,‌旨在提高在不平衡数据集上的分类性能。‌Imbalanced-learn支持欠采样、‌过采样、‌结合欠采样和过采样的方法,‌以及一些集成学…

gorm中使用乐观锁

乐观锁简介 乐观锁(又称乐观并发控制)是一种常见的数据库并发控制策略。乐观并发控制多数用于数据竞争(data race)不大、冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据的成本,因此可以获得比其他并发控制方法更高的吞吐量。 它的作用是防止并发更…

lapce源码学习-启动过程

一、记录日志 1.1、panic恐慌(异常)记录跟踪 调用堆栈,如果有源代码信息时,则记录文件路径、行、列、堆栈;否则仅记录堆栈。 window系统,调用win32接口弹出模态框窗口提醒。1.2、链路追踪日志,输出到文件和控制台配置 文件:文件数目、文件前缀/后缀名、文件收集各目标日…

模块3 面向对象编程高级 --- 第十一章:异常处理

第十一章 异常处理 主要知识点1、异常产生的原因2、标准异常类3、Java的异常处理机制4、异常的创建5、异常的抛出6、异常语句的编程 学习目标熟悉异常产生的原因和标准异常类的用法。能够运用异常处理机制编写Java程序,提高安全性; 11.1 异常的分类一旦出现异常,系统将会立刻…

Win10资源管理器文件夹错乱

昨天晚上我不知道怎么搞得,鼠标在资源管理器界面,我手放在触控板上,不知道拖拽了啥,把所有文件搞到桌面文件夹下了。然后焦虑了一天,都打算从还原点还原了,然后今天早上更新了Windows,发现最新的还原点就在今早。。。无奈之下想到了去问问ChatGPT,然后居然它真的给了我…

[Redis]原子性

事务 为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis也不例外。 Redis的事务使用方法非常简单 不同于关系数据库我们无须理解那么多复杂的事务模型就可以直接使用。不过也正是因为这种简单性它的事务模型很不严格这要求我们不能像使用关系数据库的事…