当前位置: 首页 > article >正文

vim基本命令(vi、工作模式、普通模式、插入模式、可视模式、命令行模式、复制、粘贴、插入、删除、查找、替换)

1. Vim的作用

1.1. 文本编辑

1.1.1. 基础文本编辑功能

Vim是一个功能强大的文本编辑器,它可以用来创建、修改和保存各种文本文件。无论是编写简单的文本笔记,还是复杂的代码文件,Vim都能胜任。例如,我们可以用它来编写Python脚本,编写HTML网页代码等。它支持多种文本编码格式,如UTF - 8、ASCII等。这使得Vim能够处理不同语言和地区字符的文本文件,满足了在国际化开发环境中的需求。

1.1.2. 代码编辑优势

对于程序员来说,Vim在代码编辑方面有着独特的优势。它支持语法高亮显示,能够根据不同的编程语言自动识别并高亮代码中的关键字、变量、函数等元素。比如在编辑C++代码时,类名、方法名、控制语句等会以不同的颜色显示,让代码结构一目了然。

Vim还支持代码缩进功能。它可以自动按照编程语言的规范对代码进行缩进,帮助程序员保持代码的整洁和可读性。例如,在编写Python代码时,当写完一个if语句后按下回车键,Vim会自动将下一行代码缩进四个空格,符合Python的缩进规则。

1.2. 文件浏览和管理

1.2.1. 文件浏览

Vim内置了文件浏览器功能。用户可以在Vim中直接浏览文件系统,查看文件夹中的文件列表。这对于在编辑过程中需要快速切换到其他文件进行编辑的情况非常方便。例如,当我们在一个项目的多个源代码文件之间切换时,不需要退出Vim,就可以在Vim的文件浏览器中找到并打开需要的文件。

1.2.2. 文件管理操作

它还可以进行一些基本的文件管理操作,如复制、移动、删除文件等。这些操作可以在Vim的命令模式下完成,减少了在编辑文件过程中频繁切换到外部文件管理器的麻烦。比如,我们可以使用Vim的命令来删除一个不再需要的临时文件,而不用退出Vim去使用操作系统的文件管理工具。

1.3. 多窗口编辑

1.3.1. 分屏编辑

Vim支持多窗口编辑功能,可以将屏幕分割成多个窗口,同时打开和编辑多个文件。这对于对比不同文件的内容或者同时查看和修改多个相关文件非常有用。例如,当我们在编写一个软件项目时,可能需要同时查看头文件和源文件,通过Vim的分屏功能,可以将头文件和源文件分别放在上下两个窗口或者左右两个窗口中,方便同时对它们进行编辑。

1.3.2. 标签页功能

除了分屏,Vim还支持标签页功能。用户可以将不同的文件放在不同的标签页中,通过切换标签页来快速切换到不同的文件。这使得在编辑多个文件时,界面更加清晰,文件管理更加方便。比如,在处理一个包含多个配置文件和代码文件的项目时,可以将每个文件放在单独的标签页,通过点击标签页快速定位到需要编辑的文件。

2. Vim的原理

2.1. 工作模式

2.1.1. 普通模式(Normal mode)

这是Vim启动后的默认模式。在这个模式下,键盘上的大部分按键都被定义为命令,而不是用来输入文本。例如,按下h键表示光标向左移动,j键表示光标向下移动等。这种设计使得用户可以通过快捷键快速进行光标移动、文本删除、复制等操作,大大提高了编辑效率。

快捷键功能描述
h光标向左移动一个字符
j光标向下移动一行
k光标向上移动一行
l光标向右移动一个字符
🌟gg跳转到文件的第一行
🌟G跳转到文件的最后一行
数字 + G跳转到指定行号的行,例如10G跳转到第10行
🌟i进入插入模式,在当前光标位置插入文本
🌟o进入插入模式,在光标所在行的下一行插入文本
O进入插入模式,在光标所在行的上一行插入文本
🌟x删除光标所在位置的字符
🌟dd删除光标所在的一整行
D删除从光标位置到行尾的文本
🌟yy复制光标所在的一行文本
🌟p粘贴复制的文本到光标所在位置的下一行
🌟u撤销上一次的编辑操作
Ctrl + r重做上一次撤销的编辑操作
🌟/查找文本查找文件中的文本内容,按回车键后光标会移动到找到的第一个匹配位置
🌟n查找下一个匹配项
🌟N查找上一个匹配项
🌟:w保存文件(在命令行模式下输入)
🌟:wq保存文件并退出Vim(在命令行模式下输入)
🌟:q退出Vim(如果文件有未保存的修改,会提示不能退出)(在命令行模式下输入)
🌟:q!强制退出Vim,不保存文件的修改(在命令行模式下输入)

🤔 𝑸𝒖𝒆𝒔𝒕𝒊𝒐𝒏:使用/查找模式后,按Enter开始搜索吗?如何退出呢?

🥳 𝑨𝒏𝒔𝒘𝒆𝒓:在Vim中使用/查找模式时,操作流程和退出方法如下:

  • 开始搜索

    1. 进入查找模式:在普通模式下,按下/键,这将使Vim进入查找模式。此时,Vim的底部会出现一个输入框,等待我们输入要查找的文本内容。
    2. 输入查找内容并回车:在底部的输入框中输入我们想要查找的文本,例如输入error来查找文档中所有的error文本。输入完成后,按下Enter键开始搜索。Vim会将光标移动到找到的第一个匹配位置,并且匹配的文本通常会高亮显示。
  • 退出查找模式:在完成查找操作后,有几种方法可以退出查找模式并返回到普通模式:

    1. Esc:直接按下Esc键可以退出查找模式,光标会停留在当前匹配位置,Vim回到普通模式。这是最直接的退出方式。
    2. Enter:如果我们已经查看了当前匹配项,并且想要快速回到普通模式,再次按下Enter键也可以退出查找模式。不过,这种方式可能会因Vim的配置或版本而有所不同,在某些情况下可能需要先按Esc键。
    3. 使用查找快捷键:在查找模式下,我们可以使用n键查找下一个匹配项,使用N键查找上一个匹配项。当我们通过这些键查看完所有匹配项后,按Esc键退出查找模式。这种方式在我们想要浏览所有匹配项时非常有用。

总之,使用/查找模式后,按Enter键开始搜索,通过按Esc键可以退出查找模式并返回到普通模式。在查找过程中,使用nN键可以方便地在匹配项之间切换。

🤔 𝑸𝒖𝒆𝒔𝒕𝒊𝒐𝒏:查找模式没有高亮怎么办?

🥳 𝑨𝒏𝒔𝒘𝒆𝒓:如果在Vim中使用查找模式时没有高亮显示,可以按照以下步骤解决:

  • 临时设置高亮显示

    1. 进入命令行模式:在普通模式下,按下 : 键进入命令行模式。
    2. 设置高亮显示:输入 set hlsearch 并按 Enter 键。这将使当前文档中的查找结果高亮显示。
  • 永久设置高亮显示

    1. 编辑 .vimrc 文件:打开终端,输入 vim ~/.vimrc 命令来编辑 .vimrc 文件。如果该文件不存在,Vim会自动创建一个。
    2. 添加高亮显示设置:在 .vimrc 文件中添加以下行:set hlsearch
    3. 保存并退出:按 Esc 键,然后输入 :wq 并按 Enter 键保存并退出。
  • 取消高亮显示

    1. 临时取消高亮显示:在命令行模式下,输入 :nohlsearch:noh 并按 Enter 键。这将临时取消当前文档中的查找结果高亮显示。

    2. 永久取消高亮显示:如果我们希望每次启动Vim时都不高亮显示查找结果,可以在 .vimrc 文件中添加以下行:set nohlsearch,保存并退出 .vimrc 文件。

2.1.2. 插入模式(Insert mode)

当用户需要输入文本时,需要从普通模式切换到插入模式。在插入模式下,键盘上的按键就像普通文本编辑器一样,用来输入字符。用户可以通过按i键从普通模式进入插入模式。例如,当我们需要在文档中添加一段新的文字描述时,就可以进入插入模式进行输入。

快捷键功能描述
🌟Esc退出插入模式,返回到普通模式
Ctrl + [同Esc键,退出插入模式,返回到普通模式
🌟Ctrl + o暂时退出插入模式,执行一个普通模式的命令后立即返回插入模式
Ctrl + u删除插入模式下当前行光标之前的内容
🌟Ctrl + w删除插入模式下光标前的一个单词
Ctrl + h删除插入模式下光标前的一个字符,相当于Backspace键
Ctrl + i插入一个Tab字符
🌟Ctrl + t在当前缩进级别上增加一个缩进(通常用于编程语言的代码缩进)
🌟Ctrl + d在当前缩进级别上减少一个缩进
Ctrl + r + 寄存器名插入寄存器中的内容,例如Ctrl + r + a插入寄存器a的内容
Ctrl + y在插入模式下,从普通模式复制的内容可以使用此快捷键粘贴到当前光标位置的上一行
Ctrl + e在插入模式下,从普通模式复制的内容可以使用此快捷键粘贴到当前光标位置的下一行
Ctrl + n在插入模式下,进行单词补全(向下匹配)
Ctrl + p在插入模式下,进行单词补全(向上匹配)

2.1.3. 可视模式(Visual mode)

可视模式用于选择文本。用户可以通过在普通模式下按v键进入普通可视模式,按V键进入行可视模式,按Ctrl - v键进入块可视模式。在可视模式下,可以通过移动光标来选择文本区域,然后对选中的文本进行复制、删除等操作。比如,要复制一段连续的代码,就可以先在可视模式下选中这段代码,然后使用复制命令。

快捷键功能描述
🌟v进入普通可视模式,可以选择任意文本
V进入行可视模式,可以选择整行
Ctrl + v进入块可视模式,可以选择列块
h向左扩展选择区域一个字符
j向下扩展选择区域一行
k向上扩展选择区域一行
l向右扩展选择区域一个字符
🌟gg扩展选择区域到文件的第一行
🌟G扩展选择区域到文件的最后一行
H扩展选择区域到屏幕的顶部
M扩展选择区域到屏幕的中间
L扩展选择区域到屏幕的底部
🌟0扩展选择区域到行首
^扩展选择区域到行首的第一个非空白字符
🌟$扩展选择区域到行尾
w扩展选择区域到下一个单词的开始
🌟e扩展选择区域到当前单词的末尾
b扩展选择区域到上一个单词的开始
gg0扩展选择区域到文件的开头
G$扩展选择区域到文件的末尾
o跳转到选择区域的另一端
O跳转到选择区域的另一端,并保持光标在行首
:进入命令行模式,对选中的文本执行命令,如 :s/old/new/ 替换选中的文本
🌟d删除选中的文本
c修改选中的文本,进入插入模式
🌟y复制选中的文本到默认寄存器
🌟p粘贴寄存器中的内容到选中的文本位置
🌟u撤销对选中区域的上一次操作
Ctrl + r重做对选中区域的上一次撤销操作
🌟Esc退出可视模式,返回到普通模式

🤔 𝑸𝒖𝒆𝒔𝒕𝒊𝒐𝒏:如果我想任意复制,是不是应该用可视模式?

🥳 𝑨𝒏𝒔𝒘𝒆𝒓:是的,如果我们需要任意选择并复制文本,使用可视模式(Visual mode)会更加灵活和直观。可视模式允许我们通过移动光标来选择文本区域,然后进行复制、删除、修改等操作。

假设我们有以下文本:

Hello world, this is a test.
This is another line of text.
  1. 进入普通可视模式

    • 将光标移动到 world 这个单词的任意位置。
    • v 进入普通可视模式。
  2. 选择文本

    • w 选择 world,
    • w 再次选择 this
    • e 选择 is
  3. 复制选中的文本

    • y 复制选中的文本 world, this is 到默认寄存器。
  4. 退出可视模式

    • Esc 退出可视模式,返回到普通模式。
  5. 粘贴文本

    • 将光标移动到我们想要粘贴的位置。
    • p 粘贴选中的文本。

通过使用可视模式,我们可以非常灵活地选择任意文本区域,并进行复制、删除、修改等操作。这使得文本编辑更加直观和高效。

2.1.4. 命令行模式(Command - line mode)

在命令行模式下,用户可以输入Vim的命令行命令。通过在普通模式下按:键可以进入命令行模式。例如,要保存文件,可以在命令行模式下输入:w命令;要退出Vim,可以输入:q命令。命令行模式是Vim进行复杂操作和配置的重要入口。

快捷键功能描述
🌟:从普通模式进入命令行模式
🌟Esc从命令行模式返回到普通模式,不执行当前输入的命令
Ctrl + c从命令行模式返回到普通模式,不执行当前输入的命令(与 Esc 相同效果)
Ctrl + u清除命令行中已输入的内容
Ctrl + w删除命令行中光标前的一个单词
Ctrl + h删除命令行中光标前的一个字符(相当于 Backspace 键)
Ctrl + r在命令行中插入寄存器的内容,例如 Ctrl + r + a 插入寄存器 a 的内容
Ctrl + y在命令行中插入上一个命令行历史中的内容
Ctrl + n在命令行中插入下一个命令行历史中的内容
Ctrl + p在命令行中插入上一个命令行历史中的内容(与 Ctrl + y 相同效果)
Ctrl + e将光标移动到命令行的末尾
Ctrl + a将光标移动到命令行的开头
Up浏览命令行历史,显示上一个命令
Down浏览命令行历史,显示下一个命令
Enter执行命令行中输入的命令
Tab自动补全命令行中的命令或文件名
🌟:%s/旧文本/新文本/替换文本(一次)
🌟:%s/旧文本/新文本/g替换文本(全部)

⚠️在替换文本的操作下,如果提示模式错误,请使用:%s/旧文本/新文本/

假设你有以下文本:

Hello world, this is a test.
This is another line of text.
This is a third line.
This is a fourth line.
This is a fifth line.
  1. 进入命令行模式

    • : 键进入命令行模式。
  2. 输入命令

    • 输入 :w 保存文件。
    • 输入 :q 退出Vim。
    • 输入 :wq 保存文件并退出Vim。
    • 输入 :s/old/new/ 替换文件中的文本。
  3. 使用快捷键

    • Ctrl + u 清除已输入的命令。
    • Ctrl + w 删除光标前的一个单词。
    • Ctrl + h 删除光标前的一个字符。
    • UpDown 浏览命令行历史。
    • Enter 执行当前输入的命令。

2.2. 缓冲区和寄存器

2.2.1. 缓冲区(Buffer)

Vim内部使用缓冲区来存储打开的文件内容。每个打开的文件都有一个对应的缓冲区。当用户对文件进行编辑时,实际上是修改缓冲区中的内容。只有当用户执行保存操作时,缓冲区中的内容才会写入到磁盘上的文件中。这种设计使得编辑操作更加灵活,用户可以在编辑过程中随时进行撤销、重做等操作,而不用担心文件内容的丢失。

2.2.2. 寄存器(Register)

寄存器用于存储文本片段,方便用户在编辑过程中进行复制、粘贴等操作。Vim有多个寄存器,包括默认寄存器、命名寄存器等。例如,当用户使用yy命令(在普通模式下)复制一行文本时,复制的文本会被存储到默认寄存器中。然后,用户可以通过p命令(粘贴命令)将寄存器中的内容粘贴到其他位置。寄存器的使用使得文本的移动和复制更加高效。

3. Vim的常用方法

3.1. 文件操作

3.1.1. 打开文件

使用命令vim 文件名可以在终端中打开指定的文件。如果文件不存在,Vim会创建一个新文件。例如,要打开一个名为example.txt的文件,就在终端输入:

# 使用vim打开文件,语法为:vim <filepath>
vim example.txt

3.1.2. 保存文件

在命令行模式下,输入:w命令可以保存文件。如果要保存文件并退出Vim,可以输入:wq命令。如果只是想退出Vim而不保存文件,可以输入:q!命令。这些命令使得文件的保存和退出操作非常灵活。

# 保存内容(不退出)
:w

# 保存并退出
:wq

# 没有对文件修改,直接退出
:q

# 不保存强制退出
:q!

3.1.3. 查看文件内容

在普通模式下,可以通过移动光标来查看文件内容。使用h, j, k, l键可以分别实现光标向左、向下、向上、向右移动。还可以使用gg命令跳转到文件的第一行,G命令跳转到文件的最后一行,快速浏览文件的开头和结尾。

3.2. 文本编辑

3.2.1. 插入文本

在普通模式下,按i键进入插入模式,就可以开始输入文本。如果要从当前光标位置的下一行开始输入文本,可以按o键;要从当前光标位置的上一行开始输入文本,可以按O键。这些命令使得文本的插入位置更加精确。

3.2.2. 删除文本

在普通模式下,按x键可以删除光标所在位置的字符。按dd键可以删除光标所在的一整行。如果要删除从光标位置到行尾的文本,可以按D键。这些删除命令可以根据需要删除不同范围的文本。

3.2.3. 复制和粘贴文本

yy键可以复制光标所在的一行文本,按p键可以将复制的文本粘贴到光标所在位置的下一行。如果要复制多行文本,可以先按数字键指定行数,再按yy键。例如,3yy表示复制光标所在位置的当前行以及下面的两行。然后使用p键粘贴这些文本。

3.3. 查找和替换

3.3.1. 查找文本

在普通模式下,按/键可以进入查找模式,然后输入要查找的文本内容,按回车键进行查找。Vim会高亮显示找到的文本内容,并将光标移动到找到的第一个匹配位置。按n键可以查找下一个匹配项,按N键可以查找上一个匹配项。这种查找功能非常方便,可以帮助用户快速定位到文件中特定的文本内容。

3.3.2. 替换文本

在命令行模式下,可以使用:s/旧文本/新文本/命令来替换文本。这个命令会将当前行中第一个匹配的旧文本替换为新文本。如果要替换整行中的所有匹配项,可以使用:s/旧文本/新文本/g命令。例如,:s/dog/cat/会将当前行中的第一个dog替换为cat:s/dog/cat/g会将当前行中所有的dog都替换为cat

# 替换一次
:%s/旧文本/新文本/

# 全部替换
:%s/旧文本/新文本/g

⚠️在替换文本的操作下,如果提示模式错误,请使用:%s/旧文本/新文本/

4. Vim的快捷键

4.1. 普通模式快捷键

  • 光标移动
    • h:光标向左移动一个字符。
    • j:光标向下移动一行。
    • k:光标向上移动一行。
    • l:光标向右移动一个字符。
    • gg:跳转到文件的第一行。
    • G:跳转到文件的最后一行。
    • 数字 + G:跳转到指定行号的行。例如,10G跳转到第10行。
  • 文本编辑
    • i:进入插入模式,在当前光标位置插入文本。
    • o:进入插入模式,在光标所在行的下一行插入文本。
    • O:进入插入模式,在光标所在行的上一行插入文本。
    • x:删除光标所在位置的字符。
    • dd:删除光标所在的一整行。
    • D:删除从光标位置到行尾的文本。
    • yy:复制光标所在的一行文本。
    • p:粘贴复制的文本到光标所在位置的下一行。
    • u:撤销上一次的编辑操作。
    • Ctrl + r:重做上一次撤销的编辑操作。

4.2. 命令行模式快捷键

  • 文件操作

    • :w:保存文件。
    • :wq:保存文件并退出Vim。
    • :q:退出Vim(如果文件有未保存的修改,会提示不能退出)。
    • :q!:强制退出Vim,不保存文件的修改。
  • 查找和替换

    • /查找文本:查找文件中的文本内容,按回车键后光标会移动到找到的第一个匹配位置。
    • n:查找下一个匹配项。
    • N:查找上一个匹配项。
    • :s/旧文本/新文本/:替换当前行中第一个匹配的旧文本为新文本。
    • :s/旧文本/新文本/g:替换当前行中所有匹配的旧文本为新文本。

    ⚠️在替换文本的操作下,如果提示模式错误,请使用:%s/旧文本/新文本/

5. 参考

  1. KIMI

http://www.kler.cn/a/502328.html

相关文章:

  • pycharm-pyspark 环境安装
  • 论文笔记(六十一)Implicit Behavioral Cloning
  • 深入学习 Python 量化编程
  • VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署
  • WPF中如何在MVVM模式下跨线程更新UI
  • 浅谈云计算05 | 云存储等级及其接口工作原理
  • PHP答题考试系统:智慧教育的璀璨明珠
  • pyqt鸟瞰
  • 【三维数域】三维数据调度-负载均衡和资源优化
  • 2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一
  • 面经学习-操作系统-上下文切换
  • 服务器出现蓝屏现象的原因有什么?
  • Java URLClassLoader类来动态加载数据库驱动jar
  • Linux的用户管理
  • 数据结构(Java版)第八期:LinkedList与链表(三)
  • OpenCV的图像分割
  • 利用开源AI智能名片2+1链动模式S2B2C商城小程序拓展社交电商的深度实践探索
  • uniapp 预加载分包,减少loading
  • 【高阶数据结构】位图
  • 【react进阶】create-react-app高阶配置
  • Perl语言的网络编程
  • Zookeeper单机操作
  • [mysql] mariabackup增量备份数据库
  • 80个Three.js 3D模型资源
  • STM32按键中断案例(HAL库实现)
  • 《Linux系统编程篇》POSIX信号量(Linux 进程间通信(IPC))——基础篇