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

vi 是 Unix 和 Linux 系统中常用的文本编辑器

`vi`是 Unix 和 Linux 系统中常用的文本编辑器,它有几种不同的模式,其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行,以下是一些常用的`vi`命令来控制光标位置:


• h,j,k,l:分别用于将光标向左、向下、向上、向右移动一个字符。


• Ctrl+f:向下滚动屏幕,但不移动光标位置。


• Ctrl+b:向上滚动屏幕,但不移动光标位置。


• G:将光标移动到文件的开头。


• gg(两个g):将光标移动到文件的第一行。


• :将光标移动到当前行的末尾。


• 0(数字零):将光标移动到当前行的开头。


• ::跳转到指定行号,比如输入`:10`会将光标移动到第10行。


• H:将光标移动到屏幕顶部(第一行)。


• M:将光标移动到屏幕中间。


• L:将光标移动到屏幕底部(最后一行)。


• w:将光标向前移动一个单词。


• b:将光标向后移动一个单词。


• e:将光标向前移动到下一个单词的末尾。


• ge:将光标向后移动到上一个单词的末尾。


• W:将光标向前移动一个空格分隔的“单词”(比`w`更宽泛的定义)。


• B:将光标向后移动一个空格分隔的“单词”。


• E:将光标向前移动到下一个“单词”的末尾。


• g0(`g`后跟数字0):将光标移动到当前行的第一个非空白字符。


• g:将光标移动到当前行的最后一个非空白字符。


• %:将光标移动到匹配的括号、方括号或花括号。


• Ctrl+o:返回到之前查看的位置,`Ctrl + i`回到跳转后的位置。


• 或#:在当前单词的下一个/上一个出现处移动光标。


• f:向前查找下一个指定字符,并将光标放在该字符上。


• F:向后查找上一个指定字符,并将光标放在该字符上。


• t:向前查找下一个指定字符,并将光标放在该字符前。


• T:向后查找上一个指定字符,并将光标放在该字符后。

这些命令可以帮助你在`vi`编辑器中有效地定位和控制光标。记住,这些命令都是在命令模式下使用的,如果你处于插入模式,需要按`Esc`键先切换回命令模式。

在`vi`或`vim`编辑器中,删除文本是一项基本操作,可以在命令模式下通过多种方式完成。以下是一些常用的删除命令:


• x:删除光标所在位置的字符。


• X(大写):删除光标前一个字符。


• dd:删除(剪切)当前行。


• D:删除从光标位置到行尾的所有内容。


• d0或d^:删除从光标位置到行首的所有内容。


• d:删除从光标位置到行尾的所有内容。


• dw:删除光标所在位置的一个单词。


• daw:删除光标所在位置的整个单词,包括前后空格。


• d:结合其他移动命令使用,删除从当前位置到由`<motion>`指定的位置之间的文本。例如,`d$`删除到行尾,`d0`删除到行首。


• J:合并光标所在行与下一行。


• yy:复制当前行,与`dd`类似,但`yy`是复制而不是剪切。


• Y(大写):复制从光标所在位置到行尾的所有内容。


• :d:删除从当前行到指定行号(`<number>`)的内容。


• :%d或:1,d:删除整个文件内容。


• u:撤销最后一次删除操作。


• Ctrl+r:重做最后一次撤销的操作。


• d后跟其他命令,如`dG`删除到文件末尾,`dgg`删除到文件开头。


• gD:删除光标所在位置到未匹配的右括号`)`或`}`的内容。


• d%:删除光标所在位置到匹配的括号`()`、`[]`或`{}`之间的内容。


• d`[`:删除光标所在位置到下一个标记`[]`之间的内容。

请注意,`vi`和`vim`中的删除操作会将文本放入剪切板,可以通过`p`(粘贴)命令将文本粘贴到其他地方。如果需要删除不相邻的文本,可以使用可视模式(按`v`进入)选择文本,然后执行删除命令。

在使用这些命令时,请确保在命令模式下操作。如果不确定当前处于哪个模式,可以按`Esc`键确保回到命令模式。

在`vi`或`vim`编辑器中,如果你想要替换文本,可以使用多种命令来完成这项操作。以下是一些常用的替换命令:


1.替换单个字符

• `r`:替换光标所在位置的单个字符。例如,将光标放在要替换的字符上,然后按`r`键,接着输入新的字符。


2.替换单词或行

• `R`(大写):进入替换模式,可以连续替换光标所在位置开始的字符,直到按`Esc`键停止。

• `S`:替换当前行,进入插入模式,并从光标所在位置开始替换。


3.替换文本块

• `cw`:替换光标所在位置的单词。

• `c$`:替换从光标位置到行尾的内容。

• `c0`或`c^`:替换从光标位置到行首的内容。

• `cc`或`S`:替换整行。


4.全局替换

• `:%s/old/new/g`:在整个文件中将所有的`old`替换为`new`。

• `:%s/old/new/gc`:在整个文件中将所有的`old`替换为`new`,并在每次替换前询问确认。

• `:n,ms/old/new/g`:在第`n`行到第`m`行之间将所有的`old`替换为`new`。


5.可视模式下的替换

• 按`v`进入可视模式,选择要替换的文本,然后按`:`进入命令模式,输入`s`进行替换。


6.替换并复制到剪贴板

• `"*y`:复制选中的文本到系统剪贴板。

• `"*p`:粘贴系统剪贴板的内容。


7.使用外部工具进行替换

• `:%!`:对整个文件执行外部命令。例如,`:%!sort`会对整个文件内容进行排序。


示例操作
假设你正在编辑一个名为`example.txt`的文件,并且想要替换文件中的所有"foo"为"bar":


• 打开文件:

```bash
   vi example.txt
   ```


• 进入命令模式(如果已经在命令模式则不需要)。

• 输入以下命令进行替换:

```vim
   :%s/foo/bar/g
   ```

这将在整个文件中将所有的"foo"替换为"bar"。


• 保存文件并退出:

```vim
   :wq
   ```


这些命令可以帮助你在`vi`或`vim`编辑器中有效地替换文本。记住,替换操作可能会改变文件的内容,因此在执行全局替换等操作时要小心,并确保在执行前备份文件。

在`vi`或`vim`编辑器中,如果你想要终止当前正在执行的命令或操作,可以使用以下几种方法:


• Esc 键:

• 按下`Esc`键通常可以退出正在执行的大多数命令,特别是当你在插入模式下编辑文本时。它将你带回到命令模式。


• Ctrl+C:

• 在命令模式下,`Ctrl + C`可以中断当前的命令或操作。这在`vi`尝试执行一个需要用户交互的命令(如搜索或替换)时特别有用。


• :q!:

• 如果你想要退出`vi`而不保存更改,可以在命令模式下输入`:q!`然后按回车键。这将强制退出编辑器并丢弃所有未保存的更改。


• ZZ:

• 在命令模式下,输入`ZZ`(大写字母 Z 后面跟着另一个大写字母 Z)然后按回车键,可以保存更改并退出`vi`。这是一个快速保存并退出的快捷方式。


• :qa!:

• 如果你打开了多个文件并且想要退出所有文件,可以在命令模式下输入`:qa!`然后按回车键。这将关闭所有文件并退出`vi`,不保存任何更改。


• Ctrl+Z:

• 在某些系统中,`Ctrl + Z`可以将`vi`进程挂起,将其放到后台。你可以使用`fg`命令将挂起的进程恢复到前台。


• :cq:

• 在命令模式下,输入`:cq`然后按回车键,可以放弃所有更改并退出`vi`。这与`:q!`类似,但`:cq`通常用于放弃全局命令(如全局搜索和替换)。


• :qa:

• 如果你打开了多个文件并且想要保存所有更改并退出,可以在命令模式下输入`:qa`然后按回车键。

请记住,在使用这些命令时,确保你处于命令模式。如果你不确定当前处于哪个模式,可以按`Esc`键确保回到命令模式。

相关文章:

vi 是 Unix 和 Linux 系统中常用的文本编辑器

vi是 Unix 和 Linux 系统中常用的文本编辑器&#xff0c;它有几种不同的模式&#xff0c;其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行&#xff0c;以下是一些常用的vi命令来控制光标位置&#xff1a; • h,j,k,l&#xff1a;分别用于将光标向左、向下、向…...

SwanLab x verl:可视化LLM强化学习后训练教程

文章目录 介绍Verl和SwanLab1. 环境安装2. 使用方法3. 查看训练日志 介绍Verl和SwanLab verl 是一个灵活、高效且可用于生产环境的强化学习&#xff08;RL&#xff09;训练框架&#xff0c;专为大型语言模型&#xff08;LLMs&#xff09;的后训练设计。它由字节跳动火山引擎团…...

职场到校园,初心未改:我的2024年

Hi&#xff0c;大家好&#xff0c;我是几何心凉。 其实早就想写一份复盘文章&#xff0c;正好借助2024年度博客之星的评选机会&#xff0c;来写下这篇总结。回望过去&#xff0c;感慨颇多。自从加入CSDN平台以来&#xff0c;已经见证了许多博主的来去匆匆&#xff0c;各类创作…...

C++基础知识学习记录—引用

1、引用的概念 概念&#xff1a;引用相当于给变量取个别名 对引用进行操作与直接操作变量相同&#xff0c;注意引用类型与变量类型一致 #include<iostream> using namespace std; int main(){int a10;int& cite_a a;//操作引用cite_a 与操作变量a完全一样cout &l…...

AWS Savings Plans 监控与分析工具使用指南

一、背景介绍 1.1 什么是 Savings Plans? AWS Savings Plans 是一种灵活的定价模式,通过承诺持续使用一定金额的 AWS 服务来获得折扣价格。它可以帮助用户降低 AWS 使用成本,适用于 EC2、Fargate 和 Lambda 等服务。 1.2 为什么需要监控? 优化成本支出跟踪使用情况评估投…...

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图&#xff0c;清晰易懂形象直观&#xff0c;记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》&#xff0c; 文章链接&#xff1a;https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…...

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…...

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中&#xff0c;会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求&#xff1a;为了方便内部管理和向客户交付完整的设计方案&#xff0c;公司需要将每个项目文件…...

前端学习之Flex布局

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Flex布局示例</title><style>.conta…...

游戏引擎学习第97天

回顾昨天并计划今天 在这期节目中&#xff0c;主要讲解了光照的概念&#xff0c;并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分&#xff1a; 光照的基础概述&#xff1a;讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…...

Mysql中存储引擎各种介绍以及应用场景、优缺点

概述 MySQL 提供了多种存储引擎&#xff0c;每种引擎有不同的特点和适用场景。以下是几种常见的 MySQL 存储引擎的详细介绍&#xff0c;包括它们的底层工作原理、优缺点&#xff0c;以及为什么 MySQL 默认选择某种引擎。 1. InnoDB 底层工作原理&#xff1a; 事务支持&#…...

PHP 运算符

PHP 运算符 概述 PHP 是一种广泛使用的开源服务器端脚本语言,它具有丰富的运算符集,这些运算符是编写 PHP 程序的基础。运算符用于执行各种数学、逻辑和比较操作。本篇文章将详细介绍 PHP 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 算术运…...

Vue全流程--Vue3.0与Vue2.0响应式原理对比

Vue2中数据的响应式 需要使用Vue.set这么一个api&#xff0c;修改数据 需要使用Vue.delete这么一个api&#xff0c;删除数据 数据代理这个当面的理解可以看看我前面文章Vue全流程--数据代理的理解以及在Vue中的应用-CSDN博客 Vue3中数据的响应式 Vue3使用proxy这个api实现…...

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初&#xff0c;我们都会学习如何打印 hello world&#xff0c;在学习时我们知道了int main&#xff08;&#xff09;是主函数&#xff0c;程序从main函数开始执行&#xff0c;这是流程控制的一部分内容。在主函数中我们想要实现一些功能&#xff0c;比如求各个…...

【大模型】本地部署DeepSeek-R1:8b大模型及搭建Open-WebUI交互页面

本地部署DeepSeek-R1:8b大模型 一、摘要及版本选择说明1.1 摘要1.2 版本选择 二、下载并安装Ollama三、运行DeepSeek-R1:8b大模型四、安装Open WebUI增强交互体验五、关闭Ollama开机自动启动六、DeepSeek大模型启停步骤 一、摘要及版本选择说明 1.1 摘要 作为一名对 AI 和生成…...

Python 调用 Stabilityai API在本地生成图像

Python 调用 Stabilityai API在本地生成图像 摘要功能 代码结构关键技术代码下载立即体验 摘要 本程序利用硅基流动目前的免费 stabilityai/stable-diffusion-2-1 模型API&#xff0c;生成图像并下载到本地&#xff0c;用户可以通过输入描述性提示词来获取相应的图像。使用Pyt…...

Python3中异常处理:try-finally语句的示例

一. 简介 前面一篇文章简单学习了 try-finally语句结构&#xff0c;执行过程、以及使用场景。文章如下&#xff1a; Python3中异常处理&#xff1a;try-finally语句-CSDN博客 本文写一些简单的示例来继续学习 try-finally语句的使用。 二. Python3中异常处理&#xff1a;try…...

Lua限流器的3种写法

学而不思则罔&#xff0c;思而不学则殆 引言 上篇文章讲解了Lua脚本&#xff0c;事务和Pipline之间的使用方式和性能差距&#xff0c;本篇文章将聚焦Lua脚本&#xff0c;我将用三种写法来展现如何实现一个Redis限流器 固定窗口限流 固定窗口限流也是最简单的限流算法&#x…...

基于 GEE 利用插值方法填补缺失影像

目录 1 完整代码 2 运行结果 利用GEE合成NDVI时&#xff0c;如果研究区较大&#xff0c;一个月的影像覆盖不了整个研究区&#xff0c;就会有缺失的地方&#xff0c;还有就是去云之后&#xff0c;有云量的地区变成空值。 所以今天来用一种插值的方法来填补缺失的影像&#xf…...

linux部署ollama+deepseek+dify

Ollama 下载源码 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz启动 export OLLAMA_HOST0.0.0.0:11434 ollama serve访问ip:11434看到即成功 Ollama is running 手动安装deepseek…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...