Linux系统使用超详细(十)~vi/vim命令①

news2024/11/18 23:36:48

vi/vim命令有很多,其实只有少数的用法对于我们日常工作中起到了很大帮助,但是既然我选择梳理Linux的学习笔记,那么一定全力把自己的理解和学习笔记的内容认真整理汇总,内容或许有错误,还请发现的C友们发现了及时指出。

最近工作繁忙,断更了几天,今天的内容先整理一部分,希望对大家有帮助!

目录

一、vi/vim的由来

二、为什么学习vi/vim?

三、vi/vim命令

3.1简介

3.2模式

3.2.1命令模式(Command Mode):

3.2.2插入模式(Insert Mode):

3.2.3末行模式(Ex Mode):

3.3操作

3.3.1启动vi

3.3.2编辑模式

3.3.3光标移动

3.3.4基本编辑:追加文本

3.3.5基本编辑:删除文本

3.3.6基本编辑:剪切文本

3.3.7基本编辑:复制文本

3.3.8基本编辑:连接行

3.3.9基本编辑:查找

3.3.10基本编辑:全局查找和替换

3.3.11基本编辑:撤销

3.3.12基本编辑:退出

3.4编辑多个文件

3.4.1文件之间切换

3.4.2打开另一个文件并编辑

四、vim与vi的区别


 

一、vi/vim的由来

vi(Visual Editor)是由Bill Joy于1976年创建的文本编辑器,Bill Joy是伯克利加州大学的一位计算机科学家,也是 BSD 操作系统的共同开发者之一。当时的 Unix 系统上并没有像 vi 这样的全屏幕编辑器,而只有基于行编辑的编辑器。为了提高编辑效率和用户体验,Bill Joy开发了 vi 这个全屏幕编辑器。

vi 最初是为了更好地编辑原始的 C 语言代码而设计的,但它很快就被广泛应用于各种编程语言的编辑和其他文本处理任务中。vi 的设计理念是使用键盘命令来控制文本编辑操作,而不需要依赖鼠标。

随着时间的推移,vi 发展出多个变种和改进版本,其中最著名的是 vim(Vi Improved)。vim(Vi IMproved)是vi的改进版本,由Bram Moolenaar于1991年创建。vim保留了vi的许多特性和命令,同时增加了许多新功能和增强,使其成为一款更强大和可定制的文本编辑器。vim支持语法高亮、代码折叠、多窗口编辑、宏录制、插件等功能,以及对多种操作系统的支持。

二、为什么学习vi/vim?

学习使用 vi 或其改进版本 vim(Vi Improved)有以下几个原因:

  1. 跨平台性vivim 都是在不同的操作系统上广泛使用的文本编辑器,例如 Unix、Linux 和 macOS。无论在哪个平台上工作,都可以依赖于 vi/vim 的存在。

  2. 强大的功能和灵活性:一个功能丰富的文本编辑器,支持各种高级特性,如宏录制、自动补全、语法高亮等。它允许使用者迅速编辑和处理大型文件,执行全局替换、正则表达式搜索、多文件编辑等任务。学习使用vi/vim可以提高编辑效率,并能够处理各种文本编辑需求。它还允许用户自定义配置,使其能够满足个人偏好和需求。

  3. 命令行编辑vi/vim 是基于命令行的编辑器,这意味着可以通过键盘命令来实现编辑操作,而无需依赖鼠标。这对于远程连接到服务器或在纯文本环境中工作的情况非常有用。

  4. 学会一种普遍编辑器:作为一种通用的文本编辑器,掌握 vi/vim 将能够适应各种环境和工作流程。许多终端工具和开发环境都提供了 vi/vim 的集成或模拟,因此学习它可以提高效率和适应能力。

  5. 成为更好的程序员vi/vim 在编程领域得到广泛应用。学习并熟练使用 vi/vim 可以提高编码速度和效率,并能够更好地理解和修改代码。

  6. 终端环境下的编辑:在服务器和终端环境中,可能无法使用图形界面的文本编辑器。学习vi/vim能够在纯文本终端中进行编辑,无论是在本地终端还是通过SSH连接到远程服务器,都能够进行文本编辑和修改配置文件等操作。

三、vi/vim命令

3.1简介

vi 是一款流行的文本编辑器,它是 Unix 和类 Unix 系统中广泛使用的默认编辑器之一。名称 "vi" 代表 "Visual Editor"(可视化编辑器),它最初在 1976 年由 Bill Joy 开发。vi提供一个全屏幕的编辑环境,通过键盘命令来控制文本编辑操作,而无需依赖鼠标。这种设计理念使得 vi 可以在低分辨率终端上运行,并且适用于远程连接到服务器或在纯文本环境中工作的情况。 

随着时间的推移,vi 发展出多个变种和改进版本,其中最著名的是 vim(Vi Improved)。vim 是 Bram Moolenaar 在 1991 年创建的,它保留了 vi 的许多特性,并在此基础上引入了更多的功能和选项,成为一个高度可定制的编辑器。

vi/vim的设计目标是提供一种高效和可定制的文本编辑环境,适用于终端和远程服务器等各种场景。它们的设计理念强调快速的键盘操作和命令式的编辑方式,使用户能够快速进行文本编辑和操作。

3.2模式

vi编辑器有三种工作模式,它们是:命令模式(Command mode)、插入模式(Insert mode)和底行模式(Ex mode)

3.2.1命令模式(Command Mode):

启动vi时的默认模式。在命令模式下,按键输入会被解释为命令,而不是插入文本。可以执行各种编辑命令、移动光标、复制粘贴等操作。

3.2.2插入模式(Insert Mode):

在命令模式下按下 “i” 键进入插入模式。在插入模式下,按键输入会被解释为要插入到文本中的内容,可以自由编辑文本。

3.2.3末行模式(Ex Mode):

在命令模式下按下 “:” 键进入末行模式。末行模式用于执行一些高级操作,如保存文件、退出编辑器、搜索替换文本等。

以下是vi命令的工作模式简图:

+---------------------------------------------------------------------------+
|                                     vi                                    |
|                                                                           |
|            +----------------------+  +---------------------------+        |
|            |                      |  |                           |        |
|            |                      |  |                           |        |
|            |      命令模式         |  |        插入模式           |        |
|            |                      |  |                           |        |
|            |                      |  |                           |        |
|            +----------+-----------  -----------+------------------+       |
|                       |                       |                           |
|                       |                       |                           |
|                       |ESC                    |i                          |
|                       |                       |                           |
|                       v                       v                           |
|                                                                           |
|                +---------------------------------+                        |
|                |                                 |                        |
|                |       底行模式                   |                        |
|                |                                 |                        |
|                +----------------------------------+                       |
|                                                                           |
+---------------------------------------------------------------------------+

3.3操作

3.3.1启动vi

要启动 vi 编辑器,可以在终端或命令行界面中输入以下命令:

vi

打开一个新的 vi 窗口,并进入 vi 的默认模式,也就是命令模式(Command mode)。在该模式下,可以使用各种命令来编辑文本。 如图所示:

该图是 vim 编辑器的欢迎界面,它显示了以下信息:

  • "VIM - Vi IMproved":指明了当前使用的是 vim 编辑器,它是 vi 的增强版,提供了更多的功能和选项。
  • "version 7.4.629":显示了 vim 的版本号,这里是 7.4.629。不同版本的 vim 可能会有略微不同的特性和改进。
  • "by Bram Moolenaar et al.":表示 vim 的主要作者是 Bram Moolenaar,还有其他贡献者也参与了 vim 的开发。
  • "Modified by bugzilla@redhat.com":表示该版本的 vim 经过了一些修改和定制,来自于 Red Hat 公司的 Bugzilla 团队。
  • "Vim is open source and freely distributable":说明了 vim 是开源软件,可以自由地分发和使用。
  • "Help poor children in Uganda!":提倡向乌干达的贫困儿童提供帮助,你可以通过输入 :help iccf<Enter>来获取相关信息。
  • "type :q<Enter> to exit":建议输入 :q<Enter> 来退出 vim 编辑器。
  • "type :help<Enter> or <F1> for on-line help":建议输入 :help<Enter> 或按下 <F1> 键来获取在线帮助。
  • "type :help version7<Enter> for version info":建议输入 :help version7<Enter> 来获取关于版本的详细信息。

 如果想直接打开一个文件并开始编辑,可以在 vi 命令后面加上待编辑的文件名。例如,要打开名为 myfile.txt 的文件,可以使用如下命令:

vi myfile.txt

当输入以上命令后,vi 将会加载 myfile.txt 文件并显示其内容。然后,我们可以进行编辑操作。比如打开 users.txt文件:

vi users.txt


user1::1001:1001:User One:/home/user1:/bin/bash
user2::1002:1002:User Two:/home/user2:/bin/bash

结果如图:

 

注释:

  • 绿色方框:类似游标查询,帮助用户识别并处理这些特殊字符;
  • 红色方框标记:users.txt的文件内容;
  • '~':表示空行;
  • 'users.txt' 2L, 96C:这是一个提示信息,显示当前正在编辑的文件名为 "users.txt"。其中,'2L' 表示文件有两行,'96C' 表示文件有 96 个字符(包括可见和不可见字符)。

3.3.2编辑模式

vi /vim编辑器有三种主要的编辑模式,它们是:

  1. 命令模式(Command Mode): 这是 vi 的默认模式,也是你打开文件后进入的模式。在命令模式下,你可以执行各种功能命令,如光标移动、删除、复制、粘贴等。你可以使用单个字符的命令或组合键来操作文本。

  2. 插入模式(Insert Mode): 在命令模式下,按下小写字母 iao 或其他命令切换到插入模式。在插入模式下,你可以直接输入文本内容,并即时修改文件。按下 Esc 键返回到命令模式。

  3. 可视模式(Visual Mode): 在命令模式下,按下大写字母 V 或其他命令切换到可视模式。可视模式允许你通过移动光标来选择一定范围的文本,以便进行复制、删除或其他操作。同样,按下 Esc 键返回到命令模式。

除了这些主要的编辑模式之外,还有一些其他的子模式和扩展模式,如替换模式(Replace Mode)、命令行模式(Command-line Mode)等。这些模式可以根据不同的需求和编辑任务进行切换,使得 vi 编辑器非常灵活和功能丰富。

以上面的users.txt文件为例,按下 i 进入输入模式(也称为编辑模式),开始编辑文字,显示如下图标志即表示已进入:

其实有很多命令都能进入编辑模式,以下是一部分的命令介绍,下面的小章节会进行详细划分: 

这是进入文件时的图面,我们用以下命令分别向文件插入 123456:

  1. i:在光标当前位置之前插入文本(即在光标前插入)。
  2. a:在光标当前位置之后插入文本(即在光标后插入)。
  3. o:在光标所在行的下方新建一行,并在新行上开始插入文本。
  4. O:在光标所在行的上方新建一行,并在新行上开始插入文本。
  5. I:在当前行的行首开始插入文本。这里需要调整游标位置演示,比如在第一个user1的位置,看第一个图,按下 I 后看第二个图:
  6. A:在当前行的行尾开始插入文本。这里需要调整游标位置演示,比如在第一个user1的位置,看第一个图,按下 A 后看第二个图:
  7. r:替换光标所在位置的字符。比如将u 替换为U,如图:
  8. R:连续替换光标所在位置及其后面的字符,直到按下 Esc 键。比如将字符替换为M,底行会显示--REPLACE-- 完成结果如下图:
  9. s:删除光标所在位置的字符,并在此处插入新的文本。比如删除第一行的首字符u,然后再插入M,结果如下图所示:
  10. S:删除整行并在该行上开始插入新的文本。

3.3.3光标移动

vi 的命令模式下,可以使用以下移动命令来在文本中移动光标:

  • h:向左移动一个字符。
  • j:向下移动一行。
  • k:向上移动一行。
  • l:向右移动一个字符。

这些基本的光标移动命令可以让我们在文本中进行逐字符或逐行的导航。 

科普:
为什么 hjkl 按键被用来移动光标呢?
因为在开发 vi 之初,并不是所有的视频终端都有箭头按键,最初是在键盘没有方向键的设备上开发的, 熟练的打字员可以使用组合键来移动光标,他们的手指从不需要移开键盘。其次是 hjkl 键位于大多数标准键盘布局的中心位置附近,方便用户使用右手来控制光标的移动。

除了单个字符和行之间的移动,vi 还提供了更灵活的移动命令,同样以users.txt文件为例,再插入两行文本:

This is an example.
This_is_an_example.

记得执行命令:wq 保存退出。

以下是其他一些移动命令的介绍,大家可以进行实践练习并熟悉用法,下面就不再一 一展示:

1)w:向前移动到下一个单词的开头。

2)WW 命令用于向前移动到下一个以空格分隔的单词的开头。相比于小写字母 w 命令,W 命令会忽略标点符号和其他非空白字符。

以下是使用 W 命令的示例:

  • 如果当前光标位于句子 "This is an example." 中的 "T" 上,按下 W 后,光标将移动到单词 "is" 的开头。
  • 如果当前光标位于句子 "This_is_an_example." 中的 "T" 上,按下 W 后,光标将移动到单词 "is" 的开头,而不包括下划线。

注意:

W 命令只考虑以空格分隔的单词,对于其他类型的分隔符(例如逗号、点号等),它们被视为单词的一部分。如果想要跳过所有的分隔符并移动到下一个单词的开头,可以使用 w 命令。 

3)b:向后移动到前一个单词的开头。

4)B:B 命令用于向后移动到前一个以空格分隔的单词的开头。与小写字母 b 命令不同,B 命令会忽略标点符号和其他非空白字符。

以下是使用 B 命令的示例:

  • 如果当前光标位于句子 "This is an example." 中的 "i" 上,按下 B 后,光标将移动到单词 "is" 的开头。
  • 如果当前光标位于句子 "This_is_an_example." 中的第一个下划线上,按下 B 后,光标将移动到单词 "is" 的开头。

注意:

B 命令只考虑以空格分隔的单词,对于其他类型的分隔符(例如逗号、点号等),它们被视为单词的一部分。如果想要跳过所有的分隔符并移动到前一个单词的开头,可以使用 b 命令。 

5)e:向前移动到当前或下一个单词的末尾。

6)0(数字零):移动到当前行的行首。

7)^:移动到当前行第一个非空白字符的位置。

8)$:移动到当前行的行尾。

9)numberG:这个组合键的作用是跳转到指定的行号。需要将 number 替换为目标行号,然后按下 G 键。例如,要跳转到文件的第 10 行,可以输入 10G

10)G:当没有指定数字时,单独使用 G 命令会将光标定位到文件的最后一行。

11)Ctrl-f 或 Page Down:向下滚动一页(相当于按下 Page Down 键)。

12)Ctrl-b 或 Page Up:向上滚动一页(相当于按下 Page Up 键)。

注意:

11)和12)组合键在不同的终端和操作系统中可能会有所差异。一些终端模拟器可能需要使用 Fn 键组合来模拟 Page Up 和 Page Down 键。

在某些情况下,也可以使用其他移动命令来实现类似的效果,例如 Ctrl-d(向下滚动半页)和 Ctrl-u(向上滚动半页)

上面的这些命令可帮助我们更快地定位和浏览文本中的特定位置。 

3.3.4基本编辑:追加文本

vi 的命令模式下,可以使用以下命令来进行文本追加:

  1. 使用 a 命令: 在光标所在位置的后面追加文本,按下小写字母 a 进入插入模式。此时,可以输入要添加的文本,并在完成后按下 Esc 键返回到命令模式。

  2. 使用 A 命令: 在当前行的行尾追加文本,按下大写字母 A 进入插入模式。此时,光标会自动移动到当前行的末尾,可以开始键入要追加的文本。完成后,按下 Esc 键返回到命令模式。

  3. 使用 o 命令: 在当前行的下方追加新行,并进入插入模式。按下小写字母 o,会在当前行的下方插入一个新行,并将光标置于新行的开头,以便添加新的文本。

  4. 使用 O 命令: 在当前行的上方追加新行,并进入插入模式。按下大写字母 O,会在当前行的上方插入一个新行,光标将位于新行的开头,使你能够添加新的文本。

这些命令可让我们在 vi/vim 编辑器中灵活地进行文本追加操作。根据追加的位置和需求选择合适的命令即可。其中,o和O是我们常用来打开(新建)新的一行的使用方法。记住,在完成文本追加后,按下 Esc 键返回到命令模式。

3.3.5基本编辑:删除文本

vivim 编辑器中,可以使用以下命令来删除文本:

  1. x 命令: 在命令模式下,将光标放在你想要删除的字符上,按下小写字母 x。这将删除当前光标所在位置的单个字符。

  2. dw 命令: 在命令模式下,将光标放在你想要删除的单词上,按下 dw。这将删除从光标所在位置到单词末尾的所有字符,包括空格分隔符。

  3. dd 命令: 在命令模式下,将光标放在你想要删除的行上,按下 dd。这将删除整行文本。

  4. #dd命令:在命令模式下,将光标移动到你想要删除的行上。输入数字 #,代表你要删除的行数。例如,如果想删除当前行和下面的两行,就输入 3。常用于删除指定行数的文本。

  5. D 命令: 在命令模式下,将光标放在你想要删除的行内某个位置上,按下大写字母 D。这将删除从光标位置到行尾的所有字符。

  6. :n1,n2d 命令: 在命令模式下,输入 :n1,n2d,其中 n1n2 是要删除的行号范围。这将删除指定行号范围内的所有行。

  7. Visual 模式: 进入可视模式(按下大写字母 V)后,通过移动光标选择要删除的文本块。然后按下 d 命令来删除选中的文本。

3.3.6基本编辑:剪切文本

vivim 编辑器中,剪切(cut)操作可以通过结合可视模式和删除命令来实现。以下是一些常用的方法:

  1. 使用可视模式进行剪切:

    • 进入可视模式:按下大写字母 V 键。
    • 移动光标以选择要剪切的文本块。
    • 按下 d 命令来删除选定的文本块。

    这样,所选文本将被删除并存储在剪贴板中,可以粘贴到其他位置。

  2. 使用 x 和剪贴板命令进行剪切:

    • 在命令模式下,将光标移动到要剪切的字符上。
    • 按下小写字母 x 来删除当前光标所在位置的单个字符,并将其存储在剪贴板中。
    • 要剪切多个字符,请连续按下 x 键直到删除所需的文本。
    • 要将剪切的内容粘贴到其他位置,请进入插入模式或命令模式,然后按下小写字母 p 来粘贴。

这些方法可以让你在 vivim 中剪切文本。记住,剪切的文本会被存储在剪贴板中,可以在之后的粘贴操作中使用。如果需要将文本剪切到其他文件中,则可以在两个文件之间使用 :e 命令打开目标文件,并在其中执行粘贴操作

附加注释--x/X字符用法

vivim 编辑器中,字符 x 用于删除当前光标所在位置的单个字符。

  • 在命令模式下,将光标放置在你想要删除的字符上。
  • 按下小写字母 x 键,这将删除当前光标所在位置的字符。

需要注意以下几点: 

  • 如果你按下 x 后立即后悔了,可以按下 u 命令来撤销删除操作,恢复被删除的字符
  • 连续按下多次 x 将删除连续的字符,每次按下 x 都会删除光标后面的一个字符。
  • 如果要删除光标前面的字符,可以使用大写字母 X 键。它与 x 效果相同,只是方向相反。大写的X,每按一次,删除光标所在位置的"前面"一个字符。

除外,还有「#x」和「#X」,例如:

「6x」表示删除光标所在位置的"后面"6个字符。 

「20X」表示删除光标所在位置的"前面"20个字符。

那么3x 就表示连续按下 x 键三次。每次按下 x 键会删除当前光标所在位置的一个字符。因此,使用 3x 命令将删除光标后面的三个字符。例如,假设我们有以下文本:

Hello, World!

如果光标位于字符 o 上,并执行 3x 命令,则文本将变为:

Hellrld!

 第一个 x 删除了 o,第二个 x 删除了 ,,第三个 x 删除了空格。

3.3.7基本编辑:复制文本

vivim 编辑器中,复制(copy)操作可以通过结合可视模式和复制命令来实现。以下是一些常用的方法:

  1. 使用可视模式进行复制:

    • 进入可视模式:按下小写字母 v 键。
    • 移动光标以选择要复制的文本块。
    • 按下 y 命令来复制选定的文本块。

    这样,所选文本将被复制到剪贴板中,可以粘贴到其他位置。

  2. 使用 yy 和剪贴板命令进行复制:

    • 在命令模式下,将光标移动到要复制的行上。
    • 按下 yy 命令来复制当前行。
    • 要复制多个行,请连续按下 yy 键直到复制所需的文本。
    • 要将复制的内容粘贴到其他位置,请进入插入模式或命令模式,然后按下小写字母 p 来粘贴。

这些方法可以在 vivim 中复制文本。记住,复制的文本会被存储在剪贴板中,并可以在之后的粘贴操作中使用。如果需要将文本复制到其他文件中,则可以在两个文件之间使用 :e 命令打开目标文件,并在其中执行粘贴操作

附加注释y字符用法:

命令含义
yy当前行。
5yy    当前行及随后的四行文本。
yW
从当前光标位置到下一个单词的开头。
y$
从当前光标位置到当前行的末尾。
y0
从当前光标位置到行首。
y^
从当前光标位置到文本行的第一个非空字符。
yG
从当前行到文件末尾。
y20G
从当前行到文件的第 20 行。

3.3.8基本编辑:连接行

vi/vim如何实现行的连接?

vivim 编辑器中,可以使用以下方法来实现行的连接:

  1. 使用 J 命令: 在命令模式下,将光标放在要连接的第一行的末尾处(即行尾),然后按下大写字母 J 键。这将删除第一行的换行符,并将其与下一行合并为一行。

  2. 使用 :join 命令: 在命令模式下,输入 :join 命令,然后按下回车键。这将连接当前行和下一行,并将它们合并为一行。

  3. 使用可视块(Visual Block)模式: 这种方法适用于需要连接多行的情况。首先,按下 Ctrl + v 进入可视块模式。然后,使用上下箭头或其他光标移动命令选择要连接的多行。接下来,按下大写字母 J 来连接选定的行。

通过合并行,我们可以将多行文本合并为单行,从而满足特定的编辑需求。 

3.3.9基本编辑:查找

vivim 编辑器中,有多种方法可以使用查找功能来搜索文本。以下是一些常用的查找命令和技巧:

  1. 基本查找:

    • 在命令模式下按下 / 键,然后输入要查找的文本,并按下回车键。例如,要查找单词 "apple",输入 /apple
    • 按下 n 键可以继续向后查找下一个匹配项。
    • 按下 N 键可以反向查找上一个匹配项。
  2. 正则表达式查找:

    • 在命令模式下按下 / 键,然后输入要查找的正则表达式,并按下回车键。例如,要查找以字母 "a" 开头的单词,输入 /^a\w*
    • 可以使用正则表达式的元字符和模式定界符来指定更复杂的搜索模式。
  3. 忽略大小写查找:

    • 在命令模式下输入 :set ignorecase 命令,然后按下回车键。这将开启忽略大小写的查找功能。
    • 输入 / 命令进行查找时,不区分大小写。
  4. 高亮显示匹配项:

    • 在命令模式下输入 :set hlsearch 命令,然后按下回车键。这将开启匹配项的高亮显示功能。按下 / 键,然后输入要查找的文本,再次按下回车键。例如,如果要查找单词 "apple",输入 /apple
    • 执行查找操作后,所有匹配项都会被突出显示。
    • 取消匹配项高亮显示:在任何时候,如果想取消匹配项的高亮显示,可以在命令模式下输入 :nohlsearch 命令,然后按下回车键。

3.3.10基本编辑:全局查找和替换

vivim 编辑器中,可以使用替换命令来进行文本替换操作。以下是基本的替换步骤:

  1. 进入命令模式:按下 Esc 键确保处于命令模式。

  2. 执行替换命令:输入 :%s/pattern/replacement/g 命令,并按下回车键。

    • % 表示对整个文件进行替换操作。
    • s 表示 "substitute",即替换的意思。
    • pattern 是要被替换的文本模式。
    • replacement 是要替换成的新文本。
    • g 表示全局替换,即替换所有匹配项,而不仅仅是每行的第一个匹配项。
  3. vi/vim 将会执行替换操作并显示替换结果。

  4. 可选:确认每个替换项(交互式替换):

    • 使用 :%s/pattern/replacement/gc 命令来进行交互式替换。
    • 在执行替换时,每次遇到匹配项时,编辑器将提示你是否要进行替换操作。
  5. 也可以限制替换范围:

    • 如果只想替换某一行或指定范围内的文本,可以将 % 替换为行号或行号范围。

注意:

  • 如果替换的文本中包含了 / 字符,需要使用 \ 进行转义,例如 / 需要输入为 \/
  • 如果要替换的文本中包含特殊字符,可以使用 \ 进行转义,例如 \t 表示制表符。

替换用法的另一种理解方法:

: [定址]s/旧/新/[g]
#不加定址只会替换光标所在的一行中匹配上的字符

定址:  

1     只替换第一行

1,5   第一行到第五行

%     全部行

5,$   第五行到最后一行

$-3   倒数第四行

$-9,$ 倒数第10行到最后一行

加上 g   是整行所有匹配到的字符都替换

不加 g   是替换(定址)选中行的第一个匹配项

以下是一些示例展示:

#替换所有的root为ROOT
:%s/root/ROOT/g
#替换所有行的第一个root为ROOT
:%s/root/ROOT/
#替换光标当前行的root为ROOT
:s/root/ROOT/g
#替换第一行的第一个root为ROOT
:1s/root/ROOT/
#替换后10行的/为\
:$-9,$s/\//\\/g
我们也可以指定一个需要用户确认的替换命令。通过添加一个 “c” 字符到这个命令的末尾,
来完成这个替换命令,如上面第四条所述。例如,以users.txt文本为例,将文本中的bash全部替换为BASH,要求需要用户确认。执行命令:
:%s/bash/BASH/gc

【enter】后底行显示:

 选项解释:

  • y:替换当前匹配项并继续。
  • n:跳过当前匹配项,不进行替换。
  • a:替换所有匹配项,并不再询问。
  • q:立即退出替换操作,不再进行任何替换。
  • l:替换当前匹配项并显示替换结果,然后继续。
  • ^E:向上滚动一行并继续替换。
  • ^Y:向下滚动一行并继续替换。

每输入一次y将替换一次。最后结果如下:

 

3.3.11基本编辑:撤销

vivim 编辑器中,可以使用撤销操作来恢复先前的修改。以下是几种常见的撤销操作方式:

  1. 撤销最后一次编辑:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 u 命令,然后按下回车键。
    • 这将撤销最近的编辑操作。
  2. 多次撤销:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 :undo [n] 命令,并按下回车键。
    • [n] 是一个可选参数,表示要撤销的步骤数,默认为 1。
    • 这将撤销指定数量的编辑操作。
  3. 撤销所有更改:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 :e! 命令,并按下回车键。:e 表示重新加载当前文件。! 表示强制重新加载,忽略未保存的更改。
    • 这将将丢弃所有未保存的更改并还原文件为上次保存的版本。
  4. 撤销到特定操作或保存点:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 :earlier [n] 命令,并按下回车键。
    • [n] 是一个可选参数,表示要撤销到的特定操作或保存点。
    • 这将撤销到指定的操作或保存点之前的状态。

3.3.12基本编辑:退出

vivim 编辑器中,有几种方式可以退出编辑器。以下是常见的退出方法:

  1. 保存并退出:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 :wq 命令,并按下回车键。
    • 这将保存文件并退出编辑器。
  2. 不保存并退出:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 :q! 命令,并按下回车键。
    • 这将强制退出编辑器并丢弃对文件的任何更改。
  3. 保存但不退出:

    • 进入命令模式,按下 Esc 键确保处于命令模式。
    • 输入 :w 命令,并按下回车键。
    • 这将保存文件,但不退出编辑器。
  4. 不保存退出:

    • 当没有进行修改或已保存修改时,按下 Esc 键确保处于命令模式,使用:q安全地退出。
    • 如果文档有更改但未保存,编辑器将不会立即退出,并显示一个错误消息,提示你保存或舍弃更改。在这种情况下,你可以选择保存更改并退出编辑器(:wq),或者放弃更改并退出编辑器(:q!)。

3.4编辑多个文件

同时能够编辑多个文件是很有用的。你可能需要更改多个文件或者从一个文件复制内容到另一
个文件。通过 vi ,我们可以打开多个文件来编辑,只要在命令行中指定要编辑的文件名。
vi file1 file2 file3...
我们先退出已经存在的 vi 会话,然后创建一个新文件来编辑。输入 :wq 来退出 vi 并且保存
了所做的修改。下一步,我们将在家目录下创建一个额外的用来玩耍的文件。通过获取从 ls
令的输出,来创建这个文件。
 ls -l /root > ls-passwd1.txt
vi 来编辑我们的原文件和新创建的文件:
vi users.txt ls-passwd1.txt
vi 启动,我们会看到第一个文件显示出来:
3.4.1文件之间切换
vi vim 编辑器中切换到下一个或上一个文件, 打开 编辑器并进入 ex 模式。在终端中运行 vi 命令,然后按下 : 键进入 ex 模式。 ex 模式下, 可以使用以下命令:
  • 下一个文件:在命令模式下,按下 :next 或 :n 命令,然后按下回车键。
  • 上一个文件:在命令模式下,按下 :previous 或 :N 命令,然后按下回车键。
当我们从一个文件移到另一个文件时,如果当前文件没有保存修改, vi 会阻止我们切换文 件,这是 vi 强制执行的政策。在命令之后添加感叹号,可以强迫 vi 放弃修改而转换文件。
3.4.2打开另一个文件并编辑
在我们的当前的编辑会话里也能添加别的文件。 ex 命令 :e ( 编辑 (edit) 的简写 ) 紧跟要打开的文件名将会打开另外一个文件。让我们结束当前的会话回到命令行。重新启动 vi 并只打开一个文件:
vi users.txt
要加入我们的第二个文件,输入:
:e ls-passwd1.txt

四、vim与vi的区别

vimvi 在使用上有很多相似之处,但也存在一些区别。基本上可以说,vimvi 的改进版本,提供了更多功能和便捷的操作。

以下是一些 vim 相对于传统的 vi 所具有的特点和改进:

  1. 增强功能: vim 提供了许多额外的功能和命令,如语法高亮、代码补全、多级撤销/重做、分屏编辑、多标签页等。这些功能使得在 vim 中进行编辑更加方便和高效。

  2. 可定制性: vim 允许用户自定义配置文件,以满足个人偏好和需求。用户可以修改颜色方案、绑定快捷键、添加插件等,从而使编辑器适应自己的工作流程。

  3. 模式: vim 引入了不同的编辑模式,包括命令模式、插入模式和可视模式。这些模式使得 vim 更灵活和强大,用户可以根据需要在不同的模式下执行不同的操作。

尽管 vim 在功能和用法上扩展了 vi,但两者仍然遵循相同的基本思想和大部分命令。因此,如果你熟悉 vi,你会发现在 vim 中也能够轻松地进行编辑。不过,对于某些高级功能和定制选项,可能需要更深入地了解 vim 的文档和配置。

这里是一个区别的示例
在上面所描述的切换方法中, vim (和一些版本的 vi )也提供了一些 ex 命令,这些命令使多个文件更容易管理。我们可以查看正在编辑的文件列表,使用:buffers 命令。运行这个命令后,屏幕底部就会显示出一个文件列表:

要切换到另一个缓冲区(文件),输入 :buffer, 紧跟着你想要编辑的缓冲器编号。比如,要从
包含文件 users .txt 1 号缓冲区切换到包含文件 ls-passwd1.txt 2 号缓冲区,我们会这样输入:
:buffer 2

【enter】后我们的屏幕现在会显示第二个文件

本篇大致总结了vi/vim命令的相关使用方法,但是由于这部分的命令比较冗杂,我也是尽力按照之前学习笔记的逻辑思路进行梳理,这块的内容还有一部分需要再划分整理,我会在第二篇中继续汇总,并对该篇中缺失的命令再补充,同时也会把常用的命令梳理到一张表中方便区分和记忆。

当然最好的学习方式就是我们自己动手练习,不断的练习操作才能更快的掌握。

最后,感谢大家的查看,如果对你们有帮助的话,就点个赞/关注 支持下吧!我会很快将篇2写好发布,敬请期待!

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

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

相关文章

小程序基础学习(发送请求)

原理 通过js发起wx.request的方法发送请求并接受相应数据 实例&#xff08;一&#xff09; 参数&#xff1a; url:请求网址地址&#xff0c; success:请求成功执行的函数&#xff0c; fail:请求失败执行的函数 请求返回的数据 实例&#xff08;二&#xff09; 参数&#xff1…

如何用LLM和自有知识库搭建智能agent?

用LangChain建立知识库&#xff0c;文末中也推荐其他方案。 项目源码&#xff1a;ChatPDF实现 LangChain Indexes使用 对加载的内容进行索引&#xff0c;在indexes中提供了一些功能&#xff1a; Document Loaders&#xff0c;加载文档Text Splitters&#xff0c;文档切分V…

Codeforces Round 768 (Div. 1) D. Flipping Range(思维题 等价类性质 dp)

题目 思路来源 官方题解 洛谷题解 题解 可操作的最短区间长度肯定是gcd&#xff0c;记为g&#xff0c;然后考虑如何dp 考虑g个等价类&#xff0c;每个等价类i,ig,i2*g,... 每次翻转长度为g的区间&#xff0c;会同时影响到g个等价类总的翻转的奇偶性&#xff0c; 性质一&…

Puppeteer让你网页操作更简单(2)抓取数据

Puppeteer让你网页操作更简单(1)屏幕截图】 示例2 —— 让我们抓取一些数据 现在您已经了解了Headless Chrome和Puppeteer的工作原理基础知识,让我们看一个更复杂的示例,其中我们实际上可以抓取一些数据。 首先,请查看此处的Puppeteer API文档。如您所见,有大量不同的方法我…

Python教程39:使用turtle画今天日期

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

10.9.2 std::function 非OO的多态实现 Page185~187

源代码&#xff1a; #include <iostream> #include <functional> #include <list>using namespace std;//使用function模板类定义一个类型&#xff0c; //该类型要求作为T的 //函数类型是参数是string,返回值是void typedef std::function <void (std::s…

MySQL-多表联合查询

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

【算法实验】实验1

实验1-1 斐波那契数 【问题描述】斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。 定义&#xff1a;F(0) 0, F(1) 1, F(n) F(n-1) F(n-2) 其中n>1 要求计…

1、计算机的硬件组成、校验码

计算机的硬件组成 CPU的组成与功能 CPU的组成 CPU主要是由运算器、控制器、寄存器组和内部总线等部件组成 CPU的功能 1、程序控制通过执行指令来控制程序的执行顺序2、操作功能一条指令的实现需要若干操作信号配合&#xff0c;控制相应的部件完成相对应的操作3、时间控制对…

idea2020.1 x64实现git的push

今天还有点时间&#xff0c;顺便写一下这个。 我这边只说一下远程仓库&#xff08;gitee&#xff09;的push 点击之后会弹出 点击&#xff0c;弹出 输入你定义的远程仓库名&#xff08;自己起&#xff09;&#xff0c;以及url&#xff0c;url由下面获取 在你的gitee创建好仓库…

Marin说PCB之传输线损耗---趋肤效应和导体损耗01

大家在做RF上的PCB走线或者是车载相机的上走线的时候经常会听那些硬件工程师们说你这个走线一定要保证50欧姆的阻抗匹配啊&#xff0c;还有就是记得加粗走做隔层参考。 有的公司的EE硬件同事会很贴心的把RF走线的注意事项给你备注在原理图上或者是layoutguide上&#xff0c;遇到…

Rust-函数

简介 Rust的函数使用关键字fn开头。 函数可以有一系列的输入参数&#xff0c;还有一个返回类型。 函数体包含一系列的语句(或者表达式)。 函数返回可以使用return语句&#xff0c;也可以使用表达式。 Rust编写的可执行程序的入口就是fn main()函数。 以下是一个函数的示例…

Puppeteer让你网页操作更简单(1)屏幕截图

网页自动化设计爬虫工具 中就使用了Puppeteer进行对网页自动化处理&#xff0c;今天就来看看它是什么东西&#xff01; 我们将学习什么? 在本教程中,您将学习如何使用JavaScript自动化和抓取 web。 为此,我们将使用Puppeteer。 Puppeteer是一个Node库API,允许我们控制无头Ch…

在Eureka中注册多个服务(根据本地主机端口号区分)

这篇文章主要介绍如何在Eureka注册中心内注册多个EurekaServer服务端 建项目 创建一个Maven项目&#xff0c;在里面创建三个小的Maven空项目&#xff0c;具体结构如下。 EurekaServer3&#xff0c;即外面的大模块&#xff0c;为了清楚的观察项目结构&#xff0c;我将其src文…

Python data Structures: Strings, Files, Lists

Python data Structures 这门课是在coursera上由美国密歇根大学开展的公开课。python零基础可以选择course1,这是course2&#xff0c;我用来复习和补充的。本章将复习字符串、文件、列表。 Python是这样的&#xff0c;没学一次都有新的发现&#xff0c;补充以前遗漏的地方。 …

助力工业园区作业违规行为检测预警,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建工业园区场景下作业人员违规行为检测识别系统

在很多工业园区生产作业场景下保障合规合法进行作业生产操作&#xff0c;对于保护工人生命安全降低安全隐患有着非常重要的作用&#xff0c;但是往往在实际的作业生产中&#xff0c;因为一个安全观念的淡薄或者是粗心大意&#xff0c;对于纪律约束等意思薄弱&#xff0c;导致在…

开发er们必知的Git命令

Git和GitHub是每位软件工程师都必须了解的最基本的东西。这些工具是开发人员日常工作的组成部分,因为我们每天都要与它们进行交互。熟练掌握Git不仅能简化您的生活,还能显著提高生产力。在这篇博文中,我们将探索一组命令,这些命令将大大提高您的生产力。随着您对这些命令的掌握…

【数据结构】八大排序之计数排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.计数排序简介及思想 二.计数排序代码实现 三.计数排序复杂度分析 &#x1f4cc;时间复杂度 &#x1f4cc;空间复杂度 结语 一.计数排序简介及思想 计数排序(Cou…

每日一博 - 使用APIFOX调测 @RequestBody标注的对象

文章目录 概述发送 post 请求步骤1.新建接口&#xff0c;设置为 post 请求2. 填写 URL 和参数3.发送请求 实战 RequestBody 概述 APIFOX&#xff08;类似Postman&#xff09;提供了丰富的功能来支持用户发送包含各种信息的 POST 请求&#xff0c;如文本数据、JSON 或 XML 数据…

雷达截面积RCS原理浅析

Radar Cross Section 雷达截面积&#xff08;Radar Cross Section&#xff09;是雷达扫描到物体的等效可见面积。具体来讲&#xff0c;RCS是一个虚拟的平面&#xff0c;该平面可以拦截该区域覆盖范围内的全部雷达能量&#xff0c;并且以漫反射形式将能量反射给雷达。雷达接受到…