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 系统中常用的文本编辑器,它有几种不同的模式,其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行,以下是一些常用的vi命令来控制光标位置: • h,j,k,l:分别用于将光标向左、向下、向…...

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

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

C++基础知识学习记录—引用
1、引用的概念 概念:引用相当于给变量取个别名 对引用进行操作与直接操作变量相同,注意引用类型与变量类型一致 #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的几个流程图,清晰易懂形象直观,记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》, 文章链接:https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…...

C++ ——从C到C++
1、C的学习方法 (1)C知识点概念内容比较多,需要反复复习 (2)偏理论,有的内容不理解,可以先背下来,后续可能会理解更深 (3)学好编程要多练习,简…...

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案
建筑设计公司在项目执行过程中,会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求:为了方便内部管理和向客户交付完整的设计方案,公司需要将每个项目文件…...

前端学习之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天
回顾昨天并计划今天 在这期节目中,主要讲解了光照的概念,并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分: 光照的基础概述:讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…...

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

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

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

C语言学习笔记:子函数的调用实现各个位的累加和
在C语言程序学习之初,我们都会学习如何打印 hello world,在学习时我们知道了int main()是主函数,程序从main函数开始执行,这是流程控制的一部分内容。在主函数中我们想要实现一些功能,比如求各个…...

【大模型】本地部署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,生成图像并下载到本地,用户可以通过输入描述性提示词来获取相应的图像。使用Pyt…...

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

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

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

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…...

在微服务中,如何使用feign在各个微服务中进行远程调用
在微服务中,如何使用feign在不同微服务中进行远程调用 在微服务中,如何使用feign在不同微服务中进行远程调用 步骤: 第一步: 引入feign依赖 <dependency><groupId>org.springframework.cloud</groupId><…...

Kafka中的KRaft算法
我们之前的Kafka值依赖于Zookeeper注册中心来启动的,往里面注册我们节点信息 Kafka是什么时候不依赖Zookeeper节点了 在Kafka2.8.0开始就可以不依赖Zookeeper了 可以用KRaft模式代替Zookeeper管理Kafka集群 KRaft Controller和KRaft Leader的关系 两者关系 Lea…...

vue3 -- 集成 amap(高德地图)
🍍效果 本文介绍了如何在 Vue 3 项目中集成高德地图(AMap),并使用 PoiPicker 实现地点搜索功能。 文章首先通过 AMapLoader 异步加载高德地图 API,并初始化 Map 实例。同时,借助 AMapUI 组件库引入 PoiPicker,绑定搜索输入框,实现地点选择功能。PoiPicker 监听用户的 …...

基于用户的协同过滤算法推荐
import numpy as np 计算用户之间的相似度(这里使用余弦相似度) def cosine_similarity(user1, user2): numerator np.dot(user1, user2) denominator np.linalg.norm(user1) * np.linalg.norm(user2) return numerator / denominator if denominato…...

4.python+flask+SQLAlchemy+达梦数据库
前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...

神经网络常见激活函数 4-LeakyReLU函数
文章目录 LeakyReLU函数导函数函数和导函数图像优缺点pytorch中的LeakyReLU函数tensorflow 中的LeakyReLU函数 LeakyReLU LeakyReLU: Leaky Rectified Linear Unit 函数导函数 LeakyReLU函数 L e a k y R e L U { x x > 0 p x x < 0 p ∈ ( 0 , 1 ) \rm …...

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架
源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发,可以打包成APP(非H5封壳)H5,接其他平台支付通道,前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG,修复无…...

单例模式详解(Java)
单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…...

2025年度Python最新整理的免费股票数据API接口
在2025年这个充满变革与机遇的年份,随着金融市场的蓬勃发展,量化交易逐渐成为了投资者们追求高效、精准交易的重要手段。而在这个领域中,一个实时、准确、稳定的股票API无疑是每位交易者梦寐以求的工具。 现将200多个实测可用且免费的专业股票…...

2.10学习总结
今天接着看了数据结构,但是跟指针有关的看不懂(万恶的指针),写了考试的补题。 #include <stdio.h> #include <stdlib.h> int a[1000005]; int main() {int n,i,x0;scanf("%d",&n);for(i1;i<n;i){x;i…...