Vi--终端中的编辑器
Vi–终端中的编辑器vi 简介打开和新建文件三种工作模式常用命令分屏命令常用命令速查图vi 简介学习 vi 的目的在工作中要对 服务器 上的文件进行 简单 的修改可以使用ssh远程登录到服务器上并且使用vi进行快速的编辑即可常见需要修改的文件包括源程序配置文件例如ssh的配置文件~/.ssh/config在没有图形界面的环境下要编辑文件vi 是最佳选择每一个要使用 Linux 的程序员都应该或多或少的学习一些 vi 的常用命令Vi和Vim在很多 Linux 发行版中直接把 vi 做成 vim 的软连接vivi 是 Visual interface 的简称是 Linux 中 最经典 的文本编辑器vi 的核心设计思想 ——让程序员的手指始终保持在键盘的核心区域就能完成所有的编辑操作vi 的特点没有图形界面 的 功能强大 的编辑器只能是编辑 文本内容不能对字体、段落进行排版不支持鼠标操作没有菜单只有命令vi 编辑器在 系统管理、服务器管理 编辑文件时其功能永远不是图形界面的编辑器能比拟的vimvim vi improvedvim是从 vi 发展出来的一个文本编辑器支持 代码补全、编译 及 错误跳转 等方便编程的功能特别丰富在程序员中被广泛使用被称为编辑器之神查询软连接命令知道在很多 Linux 发行版中直接把 vi 做成 vim 的软连接# 查找 vi 的运行文件 $ which vi $ ls -l /usr/bin/vi $ ls -l /etc/alternatives/vi $ ls -l /usr/bin/vim.basic # 查找 vim 的运行文件 $ which vim $ ls -l /usr/bin/vim $ ls -l /etc/alternatives/vim $ ls -l /usr/bin/vim.basic打开和新建文件在终端中输入 vi 在后面跟上文件名 即可$ vi 文件名如果文件已经存在会直接打开该文件如果文件不存在会新建一个文件打开文件并且定位行在日常工作中有可能会遇到打开一个文件并定位到指定行 的情况例如在开发时知道某一行代码有错误可以 **快速定位 **到出错代码的位置这个时候可以使用以下命令打开文件$ vi 文件名 行数提示如果只带上 而不指定行号会直接定位到文件末尾异常处理如果vi异常退出在磁盘上可能会保存有交换文件下次再使用vi编辑该文件时会看到以下屏幕信息按下字母d可以 删除交换文件 即可提示按下键盘时注意关闭输入法三种工作模式vi 有三种基本工作模式命令模式打开文件首先进入命令模式是使用 vi 的入口通过 命令 对文件进行常规的编辑操作例如定位、翻页、复制、粘贴、删除……在其他图形编辑器下通过 快捷键 或者 鼠标 实现的操作都在命令模式下实现末行模式—— 执行保存、退出等操作要退出vi返回到控制台需要在末行模式下输入命令末行模式 是vi的出口编辑模式—— 正常的编辑文字提示在 Touch Bar 的 Mac 电脑上 按 ESC 不方便可以使用 CTRL [ 替代**末行模式命令 **命令英文功能wwrite保存qquit退出如果没有保存不允许退出q!quit强行退出不保存退出wqwrite quit保存并退出x保存并退出常用命令命令线路图重复次数在命令模式下**先输入一个数字再跟上一个命令**可以让该命令重复执行指定次数移动和选择多练vi 之所以快关键在于** 能够快速定位到要编辑的代码行**移动命令能够 和** 编辑操作** 命令组合使用编辑操作删除、复制、粘贴、替换、缩排撤销和重复查找替换编辑学习提示vi 的命令较多不要期望一下子全部记住个别命令忘记了只是会影响编辑速度而已在使用 vi 命令时注意 关闭中文输入法移动基本要熟练使用 vi首先应该学会怎么在** 命令模式** 下能快速移动光标编辑操作命令能够和 移动命令 结合在一起使用上、下、左、右命令功能手指h向左食指j向下食指k向上中指l向右无名指行内移动命令英文功能wword向后移动一个单词bback向前移动一个单词0行首^行首第一个不是空白字符的位置$行尾行数移动命令英文功能gggo文件顶部Ggo文件末尾数字gggo移动到 数字 对应行数数字Ggo移动到 数字 对应行数:数字移动到 数字 对应行数屏幕移动命令英文功能Ctrl bback向上翻页Ctrl fforward向下翻页HHead屏幕顶部MMiddle屏幕中间LLow屏幕底部移动程序段落移动vi 中使用 空行 来区分段落在程序开发时通常一段功能相关的代码会写在一起—— 之间没有空行命令功能{上一段}下一段括号切换在程序世界中()、[]、{}使用频率很高而且 都是成对出现的命令功能%括号匹配及切换标记在开发时某一块代码可能需要稍后处理例如编辑、查看此时先使用m增加一个标记这样可以 在需要时快速地跳转回来 或者 执行其他编辑操作标记名称 可以是a~z或者A~Z之间的任意 一个 字母添加了标记的行如果被删除标记同时被删除如果 在其他行添加了相同名称的标记之前添加的标记也会被替换掉命令英功能mxmark添加标记 xx 是 a~z 或者 A~Z 之间的任意一个字母x直接定位到标记 x 所在位置选中文本可视模式学习复制命令前应该先学会怎么样选中 要复制的代码在vi中要选择文本需要先使用Visual命令切换到可视模式vi 中提供了 三种 可视模式可以方便程序员选择选中文本的方式按ESC可以放弃选中返回到命令模式命令模式功能v可视模式从光标位置开始按照正常模式选择文本V可视行模式选中光标经过的完整行Ctrl v可视块模式垂直方向选中文本可视模式下可以和 移动命令 连用例如ggVG能够选中所有内容撤销和恢复撤销在学习编辑命令之前先要知道怎样撤销之前一次 错误的 编辑动作命令英文功能uundo撤销上次命令CTRL rredo恢复撤销的命令删除文本命令英文功能xcut删除光标所在字符或者选中文字d(移动命令)delete删除移动命令对应的内容dddelete删除光标所在行可以 ndd 复制多行Ddelete删除至行尾提示如果使用可视模式已经选中了一段文本那么无论使用d还是x都可以删除选中文本删除命令可以和 移动命令 连用以下是常见的组合命令* dw # 从光标位置删除到单词末尾 * d0 # 从光标位置删除到一行的起始位置 * d} # 从光标位置删除到段落结尾 * ndd # 从光标位置向下连续删除 n 行 * d代码行G # 从光标所在行 删除到 指定代码行 之间的所有代码 * da # 从光标所在行 删除到 标记a 之间的所有代码复制、粘贴vi 中提供有一个 被复制文本的缓冲区.**复制 **命令会将选中的文字保存在缓冲区.**删除 **命令删除的文字会被保存在缓冲区.在需要的位置使用 **粘贴 **命令可以将缓冲区的文字插入到光标所在位置命令英文功能y(移动命令)copy复制yycopy复制一行可以 nyy 复制多行ppaste粘贴提示命令d、x类似于图形界面的剪切操作——CTRL X命令y类似于图形界面的复制操作——CTRL C命令p类似于图形界面的粘贴操作——CTRL Vvi 中的文本缓冲区同样只有一个如果后续做过** 复制、剪切** 操作之前缓冲区中的内容会被替换注意vi 中的 文本缓冲区 和系统的 剪贴板 不是同一个所以在其他软件中使用CTRL C复制的内容不能在vi中通过P命令粘贴可以在编辑模式下使用 鼠标右键粘贴4.7 替换命令英文功能工作模式rreplace替换当前字符命令模式Rreplace替换当前行光标后的字符替换模式R命令可以进入替换模式替换完成后按下ESC可以回到命令模式替换命令的作用就是不用进入编辑模式对文件进行轻量级的修改4.8 缩排和重复执行命令功能向右增加缩进向左减少缩进.重复上次命令缩排命令在开发程序时统一增加代码的缩进比较有用一次性 在选中代码前增加 4 个空格就叫做增加缩进一次性 在选中代码前删除 4 个空格就叫做减少缩进在可视模式下缩排命令只需要使用 一个或者在程序中缩进 通常用来表示代码的归属关系前面空格越少代码的级别越高前面空格越多代码的级别越低查找常规查找命令功能/str查找 str查找到指定内容之后使用 Next 查找下一个出现的位置n:查找下一个N:查找上一个如果不想看到高亮显示可以随便查找一个文件中不存在的内容即可单词快速匹配命令功能*向后查找当前光标所在单词#向前查找当前光标所在单词在开发中通过单词快速匹配可以快速看到这个单词在其他什么位置使用过查找并替换在vi中查找和替换命令需要在 末行模式 下执行记忆命令格式:%s///g全局替换一次性替换文件中的所有出现的旧文本命令格式如下:%s/旧文本/新文本/g可视区域替换先选中 要替换文字的 范围命令格式如下:s/旧文本/新文本/g确认替换如果把末尾的 g 改成 gc 在替换的时候会有提示推荐使用:%s/旧文本/新文本/gcy - yes替换n - no不替换a - all替换所有q - quit退出替换l - last最后一个并把光标移动到行首^E向下滚屏^Y向上滚屏插入命令在 vi 中除了常用的 i 进入 编辑模式 外还提供了以下命令同样可以进入编辑模式命令英文功能常用iinsert在当前字符前插入文本常用Iinsert在行首插入文本较常用aappend在当前字符后添加文本Aappend在行末添加文本较常用o在当前行后面插入一空行常用O在当前行前面插入一空行常用实例演练演练 1 —— 编辑命令和数字连用在开发中可能会遇到连续输入 N 个同样的字符在 Python 中有简单的方法但是其他语言中通常需要自己输入例如********** 连续 10 个星号要实现这个效果可以在 **命令模式 **下1.输入10表示要重复 10 次2.输入i进入 编辑模式3.输入*也就是重复的文字4.按下ESC返回到 命令模式返回之后vi就会把第2、3两步的操作重复10次提示正常开发时在 进入编辑模式之前不要按数字演练 2 —— 利用 可视块 给多行代码增加注释在开发中可能会遇到一次性给多行代码 增加注释 的情况在Python中要给代码增加注释可以在代码前增加一个#要实现这个效果可以在 命令模式 下1.移动到要添加注释的 第 1 行代码按^来到行首2.按CTRL v进入** 可视块 模式**3.使用j向下连续选中要添加的代码行4.输入I进入 编辑模式并在 行首插入注意一定要使用 I5.输入#也就是注释符号6.按下ESC返回到 命令模式返回之后vi会在之前选中的每一行代码 前 插入#分屏命令属于 vi 的高级命令 —— 可以 同时编辑和查看多个文件末行命令扩展末行命令 主要是针对文件进行操作的保存、退出、保存退出、搜索替换、另存、新建、浏览文件命令英文功能:e .edit会打开内置的文件浏览器浏览要当前目录下的文件:n 文件名new新建文件:w 文件名write另存为但是仍然编辑当前文件并不会切换文件提示切换文件之前必须保证当前这个文件已经被保存已经学习过的 末行命令命令英文功能:wwrite保存:qquit退出如果没有保存不允许退出:q!quit强行退出不保存退出:wqwrite quit保存并退出:x保存并退出:%s///gc确认搜索并替换在实际开发中可以使用w命令 阶段性的备份代码分屏命令使用 分屏命令可以 同时编辑和查看多个文件命令英文功能:sp [文件名]split横向增加分屏:vsp [文件名]vertical split纵向增加分屏切换分屏窗口分屏窗口都是基于CTRL W这个快捷键的w对应的英文单词是window命令英文功能wwindow切换到下一个窗口rreverse互换窗口cclose关闭当前窗口但是不能关闭最后一个窗口qquit退出当前窗口如果是最后一个窗口则关闭 vioother关闭其他窗口调整窗口大小命令功能增加窗口高度-减少窗口高度增加窗口宽度减少窗口宽度等分窗口大小调整窗口宽高的命令可以和数字连用例如5 CTRL W 连续 5 次增加高度常用命令速查图Vim命令图解vimrcvimrc是vim的配置文件可以设置vim的配置包括**热键、配色、语法高亮、插件 **等Linux中vimrc有两个位置家目录下的配置文件优先级更高/etc/vim/vimrc ~/.vimrc常用的插件有1.代码补全2.代码折叠3.搜索4.Git 集成网上有很多高手已经配置好的针对python开发的vimrc文件可以下载过来直接使用或者等Linux比较熟悉后再行学习视频教程

相关新闻

从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

从Script到Code Blocks、Code Behind到MVC、MVP、MVVM 引言:前端架构的进化之路想象一下,你正在搭建一个乐高城堡。最初,你只是把积木随意堆在一起(Script方式),后来你把城堡分成底座、塔楼、城门等模块&am…

2026/9/23 13:11:29 阅读更多 →
BP神经网络在车牌识别系统中的优化实践

BP神经网络在车牌识别系统中的优化实践

1. 项目背景与核心价值 车牌识别作为智能交通系统的核心技术之一,在停车场管理、违章抓拍、高速公路收费等场景中发挥着关键作用。传统基于图像处理的车牌识别方案在复杂光照、污损车牌等场景下识别率骤降,而BP神经网络凭借其强大的非线性映射能力&#…

2026/9/22 23:23:07 阅读更多 →
如何用REFramework实现游戏模组的零代码开发:终极可视化编程指南

如何用REFramework实现游戏模组的零代码开发:终极可视化编程指南

如何用REFramework实现游戏模组的零代码开发:终极可视化编程指南 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework 在游戏模组开发领域…

2026/9/24 5:07:56 阅读更多 →

最新新闻

Word内容粘贴到富文本编辑器样式丢失?一套清洗管线方案彻底解决

Word内容粘贴到富文本编辑器样式丢失?一套清洗管线方案彻底解决

1. 问题根源:为什么Word内容一进浏览器就“变脸”做前端的人,尤其是跟CMS后台、富文本编辑器、协同文档打过交道的,基本都遇到过一个让人抓狂的场景:客户或者运营同事在Word里排版排得漂漂亮亮,标题带色、段落缩进、表…

2026/9/24 20:30:47 阅读更多 →
JavaWeb仓库管理系统:Layui+Layer+Laydate实战

JavaWeb仓库管理系统:Layui+Layer+Laydate实战

简介:这是一套面向JavaWeb初学者与信息系统课程设计者的完整仓库管理系统实战项目,聚焦企业库存管理核心场景,融合传统Web开发与基础AI应用理念。资源包含13个功能模块的可运行代码及配套文档,覆盖登录注册、商品/库存/出入库/订单…

2026/9/24 20:30:47 阅读更多 →
Python电影数据集探索实战:从清洗到可视化全流程

Python电影数据集探索实战:从清洗到可视化全流程

简介:一份基于Python的电影数据分析项目包,面向正在完成课程设计、期末大作业或毕设的计算机、人工智能、大数据、数学、电子信息等相关专业学生,也适合刚入门数据分析的开发者参考。包内共3个文件:一个Python脚本用于完整执行分析…

2026/9/24 20:30:47 阅读更多 →
V100 16GB跑通Qwen 27B:推理速度从4.2到63.8 tok/s的优化实录

V100 16GB跑通Qwen 27B:推理速度从4.2到63.8 tok/s的优化实录

几个月前,我从仓库角落翻出一台配着 Tesla V100 16GB 的老服务器时,同事的第一反应是:这卡还能跑 Qwen 27B 大模型?说实话我自己也没底。Qwen 27B 的 FP16 权重就有 54GB,一块 16GB 显存的 V100 连一半都装不进去&…

2026/9/24 20:30:47 阅读更多 →
5分钟打造你的专属AI助手:Strands Agents零基础入门指南

5分钟打造你的专属AI助手:Strands Agents零基础入门指南

5分钟打造你的专属AI助手:Strands Agents零基础入门指南 【免费下载链接】harness-sdk Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. 项目地址: https://gi…

2026/9/24 20:30:47 阅读更多 →
离线知识服务器搭建实战:Kiwix+Ollama实现断网AI问答

离线知识服务器搭建实战:Kiwix+Ollama实现断网AI问答

说实话,这个项目是我被网络逼出来的。去年去一个偏远项目现场,网络差到连搜索都打不开,临时要查一个设备说明,翻遍手机缓存也没找到,最后只能打电话回去让人查了再念给我听。那种憋屈感让我下了一个决心——搞一台完全…

2026/9/24 20:29:46 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →