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

vi的基本使用

`vi` 是 Unix/Linux 系统中最常用的文本编辑器之一,功能强大但学习曲线较陡。以下是 `vi` 的基本使用方法:

---

### **1. vi 的两种模式**
- **命令模式(Command Mode)**:
  - 默认进入的模式,用于执行命令(如保存、退出、移动光标等)。
  - 按 `Esc` 键可确保进入命令模式。
- **插入模式(Insert Mode)**:
  - 用于输入或编辑文本。
  - 在命令模式下按 `i`、`a`、`o` 等键可进入插入模式。

---

### **2. 启动与退出**
- **启动 vi**:
  - 打开文件:`vi 文件名`
  - 新建文件:`vi 新文件名`
- **退出 vi**:
  - 保存并退出:在命令模式下输入 `:wq` 或 `:x`,然后按 `Enter`。
  - 不保存退出:在命令模式下输入 `:q!`,然后按 `Enter`。
  - 仅保存不退出:在命令模式下输入 `:w`,然后按 `Enter`。

---

### **3. 光标移动(命令模式)**
- **基本移动**:
  - `h`:左移
  - `j`:下移
  - `k`:上移
  - `l`:右移
- **快速移动**:
  - `0`:移动到行首
  - `$`:移动到行尾
  - `gg`:移动到文件开头
  - `G`:移动到文件末尾
  - `nG`:移动到第 `n` 行(如 `5G` 移动到第 5 行)
  - `Ctrl + f`:向下翻页
  - `Ctrl + b`:向上翻页

---

### **4. 文本编辑**
#### **进入插入模式**
- `i`:在光标前插入
- `a`:在光标后插入
- `o`:在当前行下方插入新行
- `O`:在当前行上方插入新行

#### **删除文本**
- `x`:删除光标处的字符
- `dd`:删除当前行
- `ndd`:删除从当前行开始的 `n` 行(如 `3dd` 删除 3 行)
- `dw`:删除从光标处到单词结尾
- `D`:删除从光标处到行尾

#### **复制与粘贴**
- `yy`:复制当前行
- `nyy`:复制从当前行开始的 `n` 行(如 `3yy` 复制 3 行)
- `p`:粘贴到光标后
- `P`:粘贴到光标前

#### **撤销与重做**
- `u`:撤销上一次操作
- `Ctrl + r`:重做撤销的操作

---

### **5. 查找与替换**
#### **查找**
- `/关键词`:向下查找(按 `n` 查找下一个,`N` 查找上一个)
- `?关键词`:向上查找

#### **替换**
- `:s/旧内容/新内容`:替换当前行的第一个匹配项
- `:s/旧内容/新内容/g`:替换当前行的所有匹配项
- `:%s/旧内容/新内容/g`:替换整个文件中的所有匹配项

---

### **6. 保存与退出**
- `:w`:保存文件
- `:w 文件名`:另存为
- `:q`:退出(未修改时)
- `:q!`:强制退出(不保存修改)
- `:wq` 或 `:x`:保存并退出

---

### **7. 其他常用命令**
- `:set nu`:显示行号
- `:set nonu`:隐藏行号
- `:n`:跳转到第 `n` 行
- `:r 文件名`:将文件内容插入到当前光标位置
- `:!命令`:执行外部命令(如 `:!ls` 查看当前目录文件)

---

### **8. 示例操作流程**
1. 打开文件:`vi test.txt`
2. 进入插入模式:按 `i`
3. 输入文本:`Hello, world!`
4. 返回命令模式:按 `Esc`
5. 保存并退出:输入 `:wq`,按 `Enter`

---

掌握以上基本操作后,可以高效使用 `vi` 进行文本编辑。随着熟练度提高,可以进一步学习高级功能(如宏、多文件编辑等)。

http://www.lryc.cn/news/542172.html

相关文章:

  • clickhouse--表引擎的使用
  • LeetCode刷题零碎知识点整理
  • GLTFLoader.js和OrbitControls.js两个 JavaScript 文件都是 Three.js 生态系统中的重要组成部分
  • 大厂数据仓库数仓建模面试题及参考答案
  • angular简易计算器
  • 谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇
  • 16、Python面试题解析:python中的浅拷贝和深拷贝
  • 游戏引擎学习第119天
  • 爬虫解析库:Beautiful Soup的详细使用
  • OpenHarmony-4.基于dayu800 GPIO 实践(2)
  • 【C++设计模式】观察者模式(1/2):从基础到优化实现
  • 《机器学习数学基础》补充资料:欧几里得空间的推广
  • 在配置PX4中出现的问题2
  • 2025-2-24-4.9 单调栈与单调队列(基础题)
  • python绘图之swarmplot分布散点图
  • 数据库之MySQL——事务(一)
  • Linux学习笔记之文件
  • LLM学习
  • Classic Control Theory | 13 Complex Poles or Zeros (第13课笔记-中文版)
  • 给小米/红米手机root(工具基本为官方工具)——KernelSU篇
  • 【MySQL】表的增删查改(CRUD)(上)
  • 测试用例的Story是什么?
  • 15.4 FAISS 向量数据库实战:构建毫秒级响应的智能销售问答系统
  • Golang笔记——Interface类型
  • 如何查看图片的原始格式
  • FreiHAND (handposeX-json 格式)数据集-release >> DataBall
  • 【Rust中级教程】2.8. API设计原则之灵活性(flexible) Pt.4:显式析构函数的问题及3种解决方案
  • LabVIEW Browser.vi 库说明
  • promise的方法有哪些?【JavaScript】
  • 基于模仿学习(IL)的端到端自动驾驶发展路径