「Linux系列」聊聊vi/vim的3种命令模式

文章目录

  • 一、vim简介
  • 二、命令模式
    • [1. 光标移动](#1. 光标移动)
    • [2. 复制、剪切和粘贴](#2. 复制、剪切和粘贴)
    • [3. 撤销和重做](#3. 撤销和重做)
    • [4. 搜索和替换](#4. 搜索和替换)
    • [5. 显示行号](#5. 显示行号)
  • 三、输入模式
    • [1. 进入输入模式](#1. 进入输入模式)
    • [2. 在输入模式下编辑文本](#2. 在输入模式下编辑文本)
    • [3. 使用特殊字符和快捷键](#3. 使用特殊字符和快捷键)
    • 注意事项
  • 四、命令行模式
    • [1. 保存和退出](#1. 保存和退出)
    • [2. 查找和替换](#2. 查找和替换)
    • [3. 显示行号和其他设置](#3. 显示行号和其他设置)
    • [4. 执行外部命令](#4. 执行外部命令)
    • 注意事项
  • 五、相关链接

一、vim简介

Vim是高度可配置的,大多数常用的编辑功能都可以不必使用鼠标就可以实现,并提供了丰富的插件系统。Vim的这些特性使其成为了一个非常强大的文本编辑器,尤其适合在命令行界面中使用。

Vim的操作模式主要包括普通模式、插入模式和命令模式。在普通模式下,用户可以进行文本的定位、复制、粘贴、删除等操作;在插入模式下,用户可以输入文本;在命令模式下,用户可以执行一些特定的命令,如保存文件、退出Vim等。

二、命令模式

在 vi/vim 的命令模式下,用户可以执行一系列的命令来操作文本,而无需进入插入模式。

1. 光标移动

  • h:左移一个字符
  • j:下移一行
  • k:上移一行
  • l:右移一个字符
  • w:向前移动到下一个单词的开头
  • b:向后移动到上一个单词的开头
  • e:向前移动到当前单词的结尾
  • 0(数字零):移动到当前行的开头
  • $:移动到当前行的结尾
  • G:移动到指定行号的位置,例如 10G 将光标移动到第10行

案例 :假设你正在编辑一个文本文件,并且想要快速将光标移动到第10行的末尾。你可以在命令模式下输入 10G$

2. 复制、剪切和粘贴

  • yy:复制当前行
  • dd:剪切当前行
  • p:粘贴到当前行的下一行
  • P:粘贴到当前行的上一行

案例:假设你想要复制第5行并将其粘贴到第7行之后。你可以在命令模式下执行以下步骤:

  1. 将光标移动到第5行:5G
  2. 复制当前行:yy
  3. 将光标移动到第7行:7G
  4. 粘贴到下一行:p

3. 撤销和重做

  • u:撤销上一步操作
  • Ctrl + r:重做上一步被撤销的操作

案例 :如果你在编辑文本时不小心删除了几行,你可以使用 u 命令来撤销这个操作。如果你又想要恢复那些被撤销的更改,可以使用 Ctrl + r 命令。

4. 搜索和替换

  • /pattern:从当前位置开始向前搜索指定的模式
  • ?pattern:从当前位置开始向后搜索指定的模式
  • :s/old/new/g:在当前行替换第一个old为new
  • :%s/old/new/g:在全文替换old为new
  • :n,ms/old/new/g:在第n行到第m行之间替换old为new

案例 :假设你想要在全文中将所有的 "apple" 替换为 "orange"。你可以在命令模式下输入 :%s/apple/orange/g

5. 显示行号

  • :set nu:显示行号
  • :set nonu:取消显示行号

案例 :如果你想要查看当前文件的行号,可以在命令模式下输入 :set nu。当你不再需要行号时,可以输入 :set nonu 来取消显示。

这些只是 vi/vim 命令模式下的一些基本命令和案例。实际上,vi/vim 的功能非常强大,还有许多高级特性和命令等待你去探索和学习。通过不断练习和实践,你可以逐渐掌握这个强大的文本编辑器,并提高你的文本编辑效率。

三、输入模式

在 vi/vim 编辑器中,输入模式(Insert Mode)是用户用于输入或编辑文本的模式。当从命令模式(Command Mode)切换到输入模式后,用户就可以开始输入文本了。

1. 进入输入模式

  • i:在当前光标位置前插入文本。
  • I:在当前行的行首插入文本。
  • a:在当前光标位置后插入文本。
  • A:在当前行的行末插入文本。
  • o:在当前行的下一行插入新行并进入插入模式。
  • O:在当前行的上一行插入新行并进入插入模式。

案例:假设你正在编辑一个文本文件,并且想要在第5行的行首插入一些文本。你可以在命令模式下执行以下步骤:

  1. 将光标移动到第5行:5G
  2. 在行首插入文本:I 然后输入你想要添加的文本,比如 "这是新添加的内容:"。
  3. 按下 Esc 键退出输入模式,返回到命令模式。

2. 在输入模式下编辑文本

在输入模式下,除了 Esc 键用于退出输入模式外,其他的按键都可以被视作为一般的输入按键,用于输入文本。你可以输入字母、数字、标点符号等任何你需要的字符。

案例 :继续上面的例子,假设你想要在刚才插入的文本后面继续输入一些内容。你可以直接在输入模式下继续输入,比如 "这是继续输入的内容。",然后按下 Esc 键退出输入模式。

3. 使用特殊字符和快捷键

在输入模式下,你还可以使用一些特殊字符和快捷键来辅助编辑。例如:

  • Ctrl + u:撤销当前行的所有更改。
  • Ctrl + r:恢复被撤销的更改。
  • Tab:插入制表符(通常用于缩进)。

案例 :假设你在输入模式下输入了一行文本,但突然发现其中有误,你可以使用 Ctrl + u 来撤销整行的更改,然后重新输入。如果你想要恢复被撤销的更改,可以使用 Ctrl + r

注意事项

  • 在输入模式下,编辑器不会识别命令,只会将输入的字符作为文本内容。
  • 按下 Esc 键是退出输入模式并返回到命令模式的唯一方式。
  • 在输入模式下,你可以使用方向键来移动光标,但这通常不是最高效的做法。在 vi/vim 中,更推荐使用命令模式的光标移动命令来快速定位光标位置。

四、命令行模式

在 vi/vim 编辑器中,命令行模式(Command-line Mode)允许用户执行一些全局性的命令,如保存文件、退出编辑器、查找替换文本等。

1. 保存和退出

  • :w:将当前编辑的内容写入文件。
  • :q:退出 vi/vim 编辑器。
  • :wqZZ(两个大写字母Z):保存文件并退出。
  • :q!:不保存文件,强制退出。
  • :w [filename]:将当前文件内容另存为新文件,filename 为新文件名。

案例 :假设你编辑完一个文件后,想要保存并退出 vi/vim。你可以在命令行模式下输入 :wq 然后按回车键。如果你想直接退出而不保存更改,可以输入 :q!

2. 查找和替换

  • /pattern:在当前文件中向前查找指定的字符串 pattern。
  • ?pattern:在当前文件中向后查找指定的字符串 pattern。
  • :s/old/new/g:在当前行将 old 替换为 new。
  • :%s/old/new/g:在整个文件中将 old 替换为 new。
  • :n,ms/old/new/g:在文件的第 n 行到第 m 行之间将 old 替换为 new。

案例 :如果你想在当前文件中查找所有的 "error" 字符串,可以在命令行模式下输入 /error 然后按回车键。每次按 n 键会向前查找下一个匹配项,按 N 键会向后查找。如果你想将文件中的所有 "error" 替换为 "mistake",可以输入 :%s/error/mistake/g

3. 显示行号和其他设置

  • :set number:set nu:显示文件的行号。
  • :set nonumber:set nonu:隐藏文件的行号。
  • :set ignorecase:在查找时忽略大小写。
  • :set paste:切换到粘贴模式,避免粘贴时出现格式问题。

案例 :如果你想在编辑时显示文件的行号,可以在命令行模式下输入 :set number。当你不再需要显示行号时,可以输入 :set nonumber 来隐藏它们。

4. 执行外部命令

  • :!command:执行 shell 命令 command,并返回到 vi/vim。

案例 :如果你想在编辑文件时执行一个外部命令(比如查看当前目录的文件列表),可以在命令行模式下输入 :!ls。执行完命令后,按回车键会返回到 vi/vim 继续编辑。

注意事项

  • 在命令行模式下输入的命令通常以冒号 : 开头。
  • 输入完命令后,需要按回车键来执行。
  • 一些命令可能支持额外的参数或选项,可以通过查看 vi/vim 的文档或帮助信息来了解更多详情。

五、相关链接

  1. Linux官网
  2. Linux常用命令
  3. CentOS官网下载地址
  4. 「Linux系列」Linux简介及常见的Linux系统
  5. 「Linux系列」Linux 系统启动过程
  6. 「Linux系列」Linux 系统目录结构/忘记密码解决方法
  7. 「Linux系列」Linux 远程登录/文件基本属性
  8. 「Linux系列」Linux 文件与目录管理
  9. 「Linux系列」Linux 如何学习用户和用户组管理
  10. 「Linux系列」聊聊Linux磁盘管理的事
相关推荐
绵绵细雨中的乡音1 小时前
网络基础知识
linux·网络
Peter·Pan爱编程1 小时前
Docker在Linux中安装与使用教程
linux·docker·eureka
kunge20132 小时前
Ubuntu22.04 安装virtualbox7.1
linux·virtualbox
清溪5492 小时前
DVWA中级
linux
Sadsvit3 小时前
源码编译安装LAMP架构并部署WordPress(CentOS 7)
linux·运维·服务器·架构·centos
xiaok3 小时前
为什么 lsof 显示多个 nginx 都在 “使用 443”?
linux
苦学编程的谢4 小时前
Linux
linux·运维·服务器
G_H_S_3_4 小时前
【网络运维】Linux 文本处理利器:sed 命令
linux·运维·网络·操作文本
Linux运维技术栈4 小时前
多系统 Node.js 环境自动化部署脚本:从 Ubuntu 到 CentOS,再到版本自由定制
linux·ubuntu·centos·node.js·自动化
拾心214 小时前
【运维进阶】Linux 正则表达式
linux·运维·正则表达式