vi的使用与基本命令

2023-05-16

vi的使用

一、初识vi
1、什么是vi
vi,即终端中一款编辑器。
2、vi的应用场景
当我们要通过远程连接到服务器时,此时没有图形界面,当我们要对服务器上的文件进行编辑时,便可以使用vi进行快速地处理。其核心设计思想便是让程序员的手指始终保持在键盘的核心区域便能够完成所有的编辑操作。
3、vi的特点
vi没有图形界面,只能编辑文本内容,不支持鼠标操作,没有菜单,只有命令。
4、vi与vim
在很多Linux发行版中,直接把vi做成vim的软链接。vim(vim = vi improved)是从vi发展来的一个文本编辑器,支持代码补全、编译、错误跳转等多项功能,被称之为"编辑器之神"。
二、使用vi
通过人如下命令可以使用vi打开文件:

vi 文件名

提示:若文件已经存在,则直接打开,否则会创建一个新文件。
使用如下命令可以打开文件并将光标定位到指定行:

vi 文件名 +行数

提示:若只有"+“而不指定行号,会直接定位到文件末尾。
注:若vi异常退出,在磁盘上会保存交换文件,下次使用vi编辑该文件时,会看到如下提示信息,这时需按下字母"d"删除交换文件才能继续进行编辑。
这里写图片描述
三、vi三种工作模式
1、命令模式
使用vi打开一个文件首先进入命令模式,是使用vi的入口,通过命令对文件进行常规的编辑操作,如:定位、复制、粘贴、翻页、删除等。
2、末行模式
用于执行保存、退出等操作。要退出vi,需要在末行模式下输入命令,末行模式是vi的出口。(在命令模式下按”:"便进入末行模式,可通过相应命令执行相应的结果,按"esc"便可退回到命令模式)
末行模式命令如下:

命令英文功能
wwrite保存
qquit退出,若没有保存不允许退出
q!quit强行退出,不保存直接退出
wqwrite&quit保存并退出
x保存并退出

3、编辑模式
用于正常的文字编辑。(在命令模式下按"i"便可进入编辑模式,按"esc"便可退回到命令模式)
三种模式关系如下所示:
这里写图片描述

四、vi常用命令
注:使用vi时,一定要将输入法切换至英文状态,否则无法正常使用。
1、重复命令
在命令模式下,可以在要执行的命令前加一个数字,就可以使该命令执行的结果重复指定次数。
2、移动和选择命令
①在命令模式下,可以通过"h",“j”,“k”,"l"四个按键来控制光标的移动,其四个按键的移动方位如下图所示:
这里写图片描述
②vi在行内移动

命令英文功能
wword向后移动一个单词
bback向前移动一个单词
0行首
^行首,即不是空白字符的位置
$行尾

③行数移动

命令英文功能
gggo文件顶部
Ggo文件末尾
数字gggo移动到指定数字的行数
数字Ggo移动到指定数字的行数
数字移动到指定数字的行数

④屏幕移动

命令英文功能
ctrl + bback向上翻页
ctrl + fforward向下翻页
HHead屏幕顶部
MMiddle屏幕中部
LLow屏幕底部

⑤段落移动
在vi中会使用空行来区分一个段落,使用如下命令可以在段落间移动。

命令功能
{上一段
}下一段

⑥括号匹配
在我们开发中,经常会出现"()","{}","[]"括号,并且均成对出现,使用如下命令便可以方便找到当前行中与之匹配的另一个括号的位置。

命令功能
%括号匹配与切换

⑦标记
在编辑时,也许需要先查看别的位置,之后再回到当前位置继续进行编辑,只是可以在当前位置添加标记,以便在需要编辑该位置时可以快速跳转回来。
在需要的行使用m增加标记,m后加上标记名称,若其他行添加了相同名称的标记,之前添加的标记会被替换掉。
使用('标记名)便可以定位到标记所在位置。
注:若标记所在行被删除,标记也会被同时删除。

命令英文功能
mxmark添加标记x,x是a-z或A-Z之间的任意一个字母
'x直接定位到标记x所在位置

3、编辑命令
①选中文本
在vi中要选中文本需要使用Visual命令切换到可视模式,vi中提供了三种可视模式以便选中文本,按"esc"可以放弃选中,返回到命令模式。

命令英文功能
v可视模式从光标位置开始按照正常模式选择文本
V可视行模式选中光标经过的完整行
ctrl + v可视块模式垂直方向选中文本

注:在可视模式可以和移动命令连用,如ggVG会选中全部内容。
②删除文本

命令英文功能
xcut删除光标所在字符或选中的字符
d(移动命令)delete删除移动命令对应的内容
dddelete删除光标所在行(数字dd即删除多行)
Ddelete删除至行尾

提示:可视模式下选中的文本,使用d和x都可以删除选中的文本。
删除命令可以与移动命令连用,以下是常见组合:

dw        从光标位置删除到单词末尾
d0        从光标位置删除到一行的起始位置
d}        从光标位置删除到段落结尾
ndd       从光标位置向下连续删除n行
d行数G     从光标所在行删除到指定行之间的内容
d'a       从光标所在行删除到标记a之间的所有内容

③复制粘贴文本
vi提供有一个被复制文本的缓冲区,复制和删除命令都会讲选中的文字保存在缓冲区,在需要的位置使用粘贴便可以将缓冲区的文本插入到光标所在位置。

命令英文功能
y(移动命令)copy复制
yycopy复制一行,可以nyy复制多行
ppaste粘贴

提示:要想实现剪切效果,可以对文本先删除,再粘贴。
vi中文本缓冲区只有一个,若后续做过复制,剪切操作,之前的缓冲区内容会被替换。

注意:vi中的文本缓冲区和系统中的剪切板不是同一个东西,所以使用在别的地方使用ctrl + c复制的内容无法在vi中通过p命令进行粘贴,可在编辑模式下使用鼠标右键粘贴。
④替换

命令英文功能工作模式
rreplace替换当前字符命令模式
Rreplace替换当前行光标后的字符替换模式

注:R命令进入替换模式,替换完成后按下"esc"可以回到命令模式。
⑤缩排和重复执行

命令功能
>>向右增加缩进
<<向左减少缩进
.重复上传命令

注:每次缩进量为4个空格。在可视模式下,缩排命令只需要一个">“或”<"。
4、撤销命令

命令英文功能
uundo撤销上次命令
ctrl + rredo恢复撤销的命令

5、查找和替换命令
①常规查找

命令功能
/str查找str

查找到之后可以使用如下命令查看下一个:
n:查找下一个
N:查找上一个
②单词快速匹配

命令功能
*向后查找当前光标所在单词
#向前查找当前光标所在单词

③查找并替换
vi中查找和替换需要在末行模式下执行,命令格式如下:

:%s///g

a:全局替换
一次性替换文件中所有出现的旧文本:

:%s/旧文本/新文本/g

b:可视区域替换
先选中要替换文字的范围,然后执行命令:

:s/旧文本/新文本/g

c:确认替换
在命令后添加"c",替换时会有提示,推荐使用该方式进行替换:

:%s/旧文本/新文本/gc

提示如下:

y   -yes   替换
n   -no    不替换
a   -all   替换所有
q   -quit  退出替换
l   -last  最后一个,并把光标移动到行首
^E  向下滚屏
^Y  向上滚屏

6、插入命令
在vi中除了"i"进行编辑模式外,使用如下命令同样可以进入编辑模式:
|命令 |英文 |功能 |
|: ------------- 😐:-----|:-----|
|i|insert|在当前字符前插入文本|
|I|insert|在行首插入文本|
|a|append|在当前字符后添加文本|
|A|append|在行末添加文本|
|o||在当前行后面插入一空行|
|O||在当前行前面插入一空行|
7、分屏命令
vi中的高级命令,可以同时编辑和查看多个文件。
①末行命令扩展

命令英文功能
:e.edit会打开内置的文件浏览器,浏览当前目录下的文件
:n 文件名new新建文件
:w 文件名write另存为,但是仍然编辑当前文件,不会切换文件

注:切换文件前一定要保证当前文件已被保存。
②分屏命令
使用分屏可以同时编辑和查看多个文件

命令英文功能
:sp [文件名]split横向增加分屏
:vsp [文件名]vertical split纵向增加分屏

切换分屏窗口,分屏窗口都是基于ctrl + w的:

命令英文功能
wwindow切换到下一个窗口
rreverse互换窗口
cclose关闭当前窗口,但不关闭最后一个窗口
qquit退出当前窗口,若是最后一个窗口则关闭vi
oother关闭其他窗口

下面附上两张大神总结的vim命令大全:
这里写图片描述

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vi的使用与基本命令 的相关文章

  • 网上英语学习资源大整理

    翻译 http www bilinguist com 汉英论坛 xff0c 高手云集 url http www chinatranslate net url 中国翻译网 xff0c 号称全国最大的翻译专业网站 url http gb tra
  • 使用PID和LQR控制器进行多旋翼飞行器控制

    任务内容 通过调整PID和LQR控制器以实现稳定悬停的多旋翼飞行器 xff0c 运用在无论是在仿真中还是在实际系统中 参考内容 LQR控制部分基础参考内容 xff1a LQR控制器 参考链接 xff1a Linear Quadratic R
  • Ardupilot板载计算机上云实践——第一步

    阿里云ECS在基于MAVLink的飞行器的数据中转与日志上云应用 自己先搭建了一个Demo用于测试稳定性 xff0c 访问地址 xff1a http 182 92 127 202 8123 Ardupilot 官方在今年 xff08 202
  • ADRC Ardupilot代码分析

    记录一下自己对于Ardupilot ADRC控制代码的一些理解 GitHub链接 ADRC Active Disturbance Rejection Control by MichelleRos Pull Request 20243 Ard
  • Phillweston 自动驾驶 决策规划算法 面经

    By Phillweston 注 xff1a 原创链接如下 xff1a 详细 xff01 自动驾驶规划控制算法工程师面经 xff08 具体题目 43 回答思路 xff09 本人引用了此链接中的提问内容 xff0c 并根据自己的想法写了部分回
  • OpenWRT 分流DNS的设置

    文章出处 xff1a OpenWRT 分流DNS的设置 Issue 57 luckyyyyy blog 我自己根据实际需要基于上方的链接内容进行了相关补充 OpenWRT配置IPv6的方法参考如下文章 xff1a OpenWRT IPv6
  • 智鹰科技——无人机线路巡检系统商业计划书

    智鹰科技 无人机线路巡检系统商业计划书 第一章 执行总结1 1 项目背景1 2 产品介绍1 3 市场分析1 4 竞争分析1 5 营销策略1 6 公司战略1 7 公司概况1 8 财务与投融资计划1 9 风险分析 第二章 项目背景2 1 国内外
  • linux环境安装nodejs和npm环境

    原文地址 前言 因为刚刚换上hexo的框架 xff0c 想利用私有部署把Twikoo评论部署在博客上 xff0c 所以需要使用liunx安装node js 网络上对于安装linux的资料很少 xff0c 在我查找了一些资料之后终于把环境配置
  • python 一些常用但总是记不住的函数

    python 一些常用但总是记不住的函数 import numpy as np transpose 转置函数 y 61 np mat span class hljs number 1 span span class hljs number
  • 每天一篇论文 316/365 用于欠驱动系统能量控制端到端学习的深拉格朗日网络

    Deep Lagrangian Networks for end to end learning of energy based control for under actuated systems 摘要 将深度学习应用于控制领域 xff0
  • Android 注解(Annotation)的入门与使用(一)

    Android 注解 xff08 Annotation xff09 的入门与使用 xff08 一 xff09 概述什么是注解 xff08 Annotation xff09 注解 xff08 Annotation xff09 用来做什么元注解
  • Java的equals方法使用方法

    在标准Java库中包含150多个equals方法的实现 xff0c 这里给出一个比较完美的实现方法 1 xff09 显示参数命名为otherObject xff0c 稍后需要将它转换成另一个叫做other的变量 2 xff09 检测this
  • Java学习之旅--集合的使用(Map集合)

    好几天没有更新了 xff0c 主要是最近正在学习集合 xff0c 让博主有点头大 所以就耽误了 xff1a 现在就来说说集合里的Map集合 xff1a import java span class hljs preprocessor uti
  • Java学习之旅--线程的创建方法

    线程创建的方法一 span class hljs keyword package span com geminno day14 createthread1 span class hljs keyword public span span c
  • select搜索功能实现

    select搜索功能实现 最近在找工作 没时间写博客 现在找到了 就发发工作上的代码吧 xff01 今天我们说说select标签的搜索功能 xff1b 拿到任务时 xff0c 我先想到就是上网找资料 xff0c 最后看到的都是各种jquer
  • 【转】setStyleSheet的用法

    转自 xff1a https www cnblogs com aheng123 p 5630761 html 使用setStyleSheet来设置图形界面的外观 xff1a QT Style Sheets是一个很有利的工具 xff0c 允许
  • Mysql插入语句之value与values区别

    本文编写时间是在几年前 xff0c 可能不符合现有MySQL最新版本文档所述 xff0c 请自行判断 value与values区别 http dev mysql com doc refman 5 7 en insert html 看了一下官
  • 将jetson nano tf卡 制作成img镜像批量克隆

    jetson nano tf卡系统克隆 注意 这篇文章所使用的方式如果失败的话请看另一篇 大概率失败 1 linux 安装工具 根据使用的文件系统大小生成镜像文件 更改空镜像文件的分区表信息 挂载虚拟磁盘并对虚拟磁盘进行分区格式化 备份SD
  • 电机,电调,电池搭配的一些关系

    电机 2212 920KV 含义 宽22mm xff0c 高12mm 在1V电压下每分钟920转 kv 值越大 转速越快 配的桨叶越小 扭力越小 kv值越小 转速越慢 配的桨叶越大 扭力越大 电流关系 电机满载电流 lt 电调输出电流 lt

随机推荐

  • 使用Docker安装RabbitMq

    1 搜索镜像 docker search rabbitmq management 2 拉取镜像 docker pull macintoshplus rabbitmq management 3 启动rabbitmq docker run d
  • git如何回滚到历史某个版本

    场景 xff1a 比如某员工误操作提交到了公司比较重要的develop分支 xff0c 如何恢复到之前的某一个版本呢 xff0c git如何回滚到历史某个版本 方法一 xff1a idea里面git操作版本 1 2 选中某一个版本 xff0
  • 使用Idea中Docker插件部署Springboot应用并远程Debug

    目前在java开发中 xff0c 由于一套完整的项目所涉及到的微服务模块很多 xff0c 要是按照传统的方式一个一个部署比较麻烦 xff0c 所以很多情况下我们都会使用docker镜像的方式进行部署 当我们的应用部署好之后 xff0c 若运
  • ClickHouse安装(单机版)

    官方说明文档 yum span class token function install span span class token parameter variable y span yum utils yum config manage
  • docker推送镜像至阿里私有镜像仓库

    docker推送镜像至阿里私有镜像仓库 一 注册阿里私有镜像仓库二 将公共镜像推送至私有镜像仓库1 首先拉取到mysql镜像2 登录阿里云Docker Registry xff08 这里的信息要更换成自己的 xff09 3 将mysql镜像
  • Docker安装Jenkins

    查找jenkins镜像 span class token function docker span search jenkins 拉取jenkins镜像 span class token function docker span pull
  • HDFS通过WEB UI操作文件

    HDFS通过WEB UI操作文件 1 创建目录2 向指定目录上传文件3 返回上层目录4 移动文件5 删除文件6 修改文件权限 所有者 xff0c 组等信息7 搜索文件8 查看文件 进入Browse the file system 1 创建目
  • Jenkins创建多分支流水线

    Jenkins创建多分支流水线 一 准备工作二 安装插件1 安装Docker和Docker Pipeline2 安装Blue Ocean3 安装Publish Over SSH 三 创建多分支流水线四 配置以及脚本四 构建项目 在我们的实际
  • Jenkins利用docker部署vue项目

    Jenkins利用docker部署vue项目 一 环境准备1 安装docker2 安装nodejs3 安装cnpm与配置淘宝镜像4 jenkins安装nodejs插件 二 jenkins以vue项目1 全局参数配置2 源码配置3 构建环境4
  • Jenkins利用阿里镜像仓库部署springboot应用

    Jenkins利用阿里镜像仓库部署springboot应用 一 本次目标二 环境准备三 jenkins创建项目1 添加全局配置参数 xff0c 这里我配置了版本号信息2 源码配置3 maven打包 amp docker镜像包生成4 远程机器
  • 网页设计与制作(HTML+CSS)(一)

    初识html 名词解释 xff1a Internet xff1a 即因特网 www World Wide Web xff1a 即万维网 URL Uniform Reource Locator xff1a 统一资源定位符 DNS Domain
  • 局域网中连接mysql数据库

    解决局域网中无法连接mysql数据库问题 在局域网中如果多人协作开发 xff0c 肯定会连接同一数据库 mysql 服务 xff0c 可是在连接时总是遇到问题 现提供解决方案如下 xff1a 只需要修改mysql配置文件 xff1a 在li
  • GPS在ROS中的测试和使用

    原链接 通过GPS机器人可以获取定位信息 ROS中也提供了GPS的相关驱动包 xff0c 可以方便的使用GPS的定位信息 下面以蓝鲸GPS模块为例演示如何在ROS中使用GPS传感器 其他的可以通过串口指令发布nmea语句的GPS模块都是通用
  • spring security oauth2 sso退出

    一 客户端退出调用认证中心 logout服务 这种方式是客户端先退出 xff0c 然后再退出认证中心 方法1 xff1a 集成WebSecurityConfigurerAdapter xff0c 重写方法如下 xff08 推荐这种方式 xf
  • 【智能家居】Home Assistant入门安装并内网穿透实现远程安全控制

    文章目录 前言1 安装Home Assistant2 配置Home Assistant3 安装cpolar内网穿透3 1 windows系统3 2 Linux系统3 3 macOS系统 4 映射Home Assistant端口5 公网访问H
  • Windows搭建Maven环境并在Eclipse中进行配置

    Maven环境 下载maven并配置 http maven apache org download cgi 下载完成如下 xff1a 接下来开始配置maven环境 xff1a 计算机 gt 右键 属性 gt 高级系统设置 gt 环境变量 g
  • 初见Ubuntu

    Ubuntu入门与常用娱乐软件安装 设置语言环境设置服务器镜像源安装搜狗输入法安装网易云音乐 一 设置语言环境 在系统右上角找到小齿轮图标 xff0c 点击选择 System Settings 选项 在打开的设置界面点击 Language
  • Ubuntu终端命令详述

    一 基本终端命令 1 调整终端窗口的字体大小 34 ctrl 43 shift 43 61 34 放大终端窗口的字体 34 ctrl 43 34 缩小终端窗口的字体 2 Linux命令的基本使用 序号命令对应英文作用01lslist查看当前
  • Ubuntu安装并连接Mysql

    安装配置MySql sudo apt install mysql server XX 提示 xff1a 当输入mysql时便可连续按 tab 键两次便可得到提示信息 xff0c 根据信息选择安装 安装过程中会提示输入mysql服务密码 xf
  • vi的使用与基本命令

    vi的使用 一 初识vi 1 什么是vi vi xff0c 即终端中一款编辑器 2 vi的应用场景 当我们要通过远程连接到服务器时 xff0c 此时没有图形界面 xff0c 当我们要对服务器上的文件进行编辑时 xff0c 便可以使用vi进行