一篇文章教会你使用命令行工具vi

前言

在 Linux 和 macOS 终端环境下,vi(Vim 的前身)是最常见的文本编辑器之一。尽管初学者可能会被它的界面吓到,但熟练掌握后,vi 可以让你高效地编辑文本,成为开发者和运维工程师的利器。

本篇文章将从 vi 的基本操作讲起,带你逐步掌握这个强大的命令行工具。

1. 如何打开和退出 vi

打开 vi

在终端中输入以下命令即可打开 vi

复制代码
vi 文件名

如果 文件名 存在,则打开该文件;如果不存在,则创建一个新文件。

退出 vi

vi 最让新手困惑的地方之一是如何退出。可以使用以下命令:

  • :q ------ 退出(如果有未保存的修改,则会报错)。
  • :q! ------ 强制退出,不保存修改。
  • :wqZZ ------ 保存并退出。

2. vi 的模式

vi 有三种主要模式:

模式名称 说明
普通模式 默认模式,用于移动光标、删除文本等
插入模式 允许输入文本,类似于普通编辑器
命令模式 允许执行保存、搜索、替换等命令

模式切换

  • 普通模式 → 插入模式:按 i(在光标前插入)、a(在光标后插入)、o(新建一行并插入)。
  • 插入模式 → 普通模式:按 Esc 键。
  • 普通模式 → 命令模式:按 : 键。

3. vi 的基本操作

光标移动

按键 作用
h 左移
l 右移
j 下移
k 上移
0 移动到行首
$ 移动到行尾
gg 移动到文件开头
G 移动到文件结尾

📌 提示 :你也可以使用 Arrow(方向键)进行移动。

删除和撤销

命令 作用
x 删除光标所在字符
dd 删除当前行
D 删除光标后所有内容
u 撤销上一步操作
Ctrl + r 重新执行撤销的操作

复制、剪切和粘贴

命令 作用
yy 复制当前行("yank")
p 在光标后粘贴内容
dd 剪切当前行
d$ 剪切光标到行尾的内容
y$ 复制光标到行尾的内容

快捷键速查表

快捷键 功能
Ctrl + f 向下翻页
Ctrl + b 向上翻页
Ctrl + d 向下移动半页
Ctrl + u 向上移动半页
J 将当前行与下一行合并
. 重复上一次操作

4. 搜索与替换

搜索

  • /关键词 ------ 向下搜索 关键词
  • ?关键词 ------ 向上搜索 关键词
  • n ------ 跳到下一个匹配项。
  • N ------ 跳到上一个匹配项。

替换

  • :%s/旧字符串/新字符串/g ------ 替换整个文件中的所有匹配项。
  • :s/旧字符串/新字符串/g ------ 替换当前行中的所有匹配项。

5. 进阶技巧

多窗口编辑

  • :split 文件名 ------ 水平分屏打开文件。
  • :vsplit 文件名 ------ 垂直分屏打开文件。
  • Ctrl + w 再按 h/j/k/l 进行窗口切换。

宏录制(批量操作)

  1. 进入普通模式,按 q 再按一个字母(例如 a)开始录制。
  2. 执行一系列操作。
  3. q 停止录制。
  4. @a 运行宏。
  5. @@ 运行上次执行的宏。

6. 练习与进阶学习

可以使用以下方法提高 vi 操作技能:

  • 练习 vimtutor

    shell 复制代码
    vimtutor

    这是一个内置的 vi 教程,非常适合新手。

  • 在线练习网站:vim-adventures.com

  • 多使用 vi 进行日常文本编辑。

结语

虽然 vi 乍看之下有些复杂,但掌握基本操作后,你会发现它的高效之处。希望这篇文章能帮助你快速入门 vi,提高文本编辑效率!

相关推荐
灰海4 分钟前
vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
前端·javascript·vue.js·heatmap·heatmapjs
王源骏33 分钟前
LayaAir鼠标(手指)控制相机旋转,限制角度
前端
大虾写代码1 小时前
vue3+TS项目配置Eslint+prettier+husky语法校验
前端·vue·eslint
wordbaby1 小时前
用 useEffectEvent 做精准埋点:React analytics pageview 场景的最佳实践与原理剖析
前端·react.js
上单带刀不带妹1 小时前
在 ES6 中如何提取深度嵌套的对象中的指定属性
前端·ecmascript·es6
excel1 小时前
使用热力贴图和高斯函数生成山峰与等高线的 WebGL Shader 解析
前端
wyzqhhhh2 小时前
组件库打包工具选型(npm/pnpm/yarn)的区别和技术考量
前端·npm·node.js
码上暴富2 小时前
vue2迁移到vite[保姆级教程]
前端·javascript·vue.js
舒一笑2 小时前
为什么where=Version就是乐观锁了?
后端·mysql·程序员
土了个豆子的2 小时前
04.事件中心模块
开发语言·前端·visualstudio·单例模式·c#