3.23 vi/vim:纯文本编辑器

2023-10-31

vi/vim

  是Linux命令行界面下的文字编辑器,几乎所有的Linux系统都安装了vi,只要学会了vi这个编辑工具,就可以在任何Linux系统上使用它。而vim是vi命令的增强版(Vi IMproved),与vi编辑器完全兼容,此外还有很多增强功能,例如用不同颜色高亮显示代码。因此,如果系统有vim命令,那么建议大家就使用vim编辑文本。
 
 

vim的三种模式

    一般来说,vim可分为三种模式:普通模式、编辑模式、命令模式。这三种模式的作用分别如下。
(1)普通模式
    用vim命令打开一个文件,默认的状态就是普通模式。在这个模式中,不能进行编辑输入操作,但可以按“上下左右”键来移动光标,也可以执行一些操作命令进行如删除、复制、粘贴等之类的工作。
(2)编辑模式
    在普通模式下不能进行编辑输入操作,只有按下“i,I,o,O,a,A,r,R,s,S”(其中“I”最常用)等字母进入编辑模式之后才可以执行录人文字等编辑操作。看文件是否处于编辑模式状态有一个重要的特征,那就是在窗口的左下角要有插入的标记“--INSERT--”或“--插入--”
(3)命令模式
    在普通模式下,输入“:”或“/”或“?”时,光标会自动定位在那一行,在这个模式中,可以执行保存、退出、搜索、替换、显示行号等相关操作。
 
 
 
 

vim命令的参数选项及说明

普通模式:移动光标的操作

G或(shift+g)    将光标移动到文件的最后一行
gg                将光标移动到文件的第一行,等价于1gg或1G
0                 数字0,将光标从所在位置移动到当前行的开头
$                 从光标所在位置将光标移动到当前行的结尾
n<Enter>          n为数字,<Enter>为回车键,将光标从当前位置向下移动n行
 
ngg               n为数字,移动到文件的第n行,如11gg可移动到第11行,可配合“:setnu”查看,同nG
H                 光标移动到当前窗口最上方的那一行
M                 光标移动到当前窗口中间的那一行
L                 光标移动到当前窗口最下方的那一行
h或()           光标向左移动一个字符
j或()            光标向下移动一个字符
k或()            光标向上移动一个字符
l或(→)           光标向右移动一个字符

普通模式:搜索与替换操作

/lewen        从光标位置开始,向下寻找名为lewen的字符串
?lewen       从光标位置开始,向上寻找名为lewen的字符串
n             从光标位置开始,向下重复前一个搜索的动作
N             从光标位置开始,向上重复前一个搜索的动作
:%s/A/B/g    把符合A的内容全部替换为B,斜线为分隔符,可以用@、#等替代
:n1,n2s/A/B/g    n1、n2为数字,在第n1行和n2行之间寻找A,用B替换

普通模式:复制、粘贴、删除等操作

yy        复制光标所在的当前行
nyy       n为数字,复制光标开始向下共n行
p/P       p将已复制的数据粘贴到光标的下一行,P则为粘贴到光标的上一行
dd        删除光标所在的当前行
ndd       n为数字,删除从光标开始向下共n行
u         恢复(回滚)前一个执行过的操作
.         点号。重复前一个执行过的动作
x         向后删除字符
X         向前翻除字符
d1G       删除当前行至第一行
dG        删除当前行至最后一行
d0        删除当前光标文本至行首
d$        删除当前光标文本至行尾

进入编辑模式命令

i    在当前光标所在处插入文字
a    在当前光标所在的下一个字符处插入文字
I    在当前所在行行首的第一个非空格符处开始插入文字,和A相反
A    在当前所在行行尾的最后一个字符处开始插入文字,和l相反
O    在当前所在行的上一行处插入新的一行
o    在当前所在行的下一行处插入新的一行
Esc  退出编辑模式,回到命令模式中

命令行模式

:wq        退出并保存
:wq!      退出并强制保存,“!”为强制的意思
:q!       强制退出,不保存
:n1,n2 w filename  n1、n2为数字,将n1行到n2行的内容保存成filename这个文件
:nl,n2 co n3       nl、n2为数字,将nl行到n2行的内容复制到n3位置下
:n1,n2 m n3        nl、n2为数字,将n1行到n2行的内容剪切至n3位置下
:!command          暂时离开vi到命令行模式下执行command的显示结果!例如:!ls /etc
:set nu            显示行号
:set nonu          与setnu相反,取消行号
:vs filename       垂直分屏显示,同时显示当前文件和filename对应文件的内容
:sp filename       水平分屏显示,同时显示当前文件和filename对应文件的内容
I + # + Esc         在可视块模式下(Ctrl+V),一次性注释所选的多行,取消注释可用“:nl,n2s/#//g”,这里的操作是一个通用的方法,#号可以换成别的操作,例如Tab键,这样就是批量缩进
Del                 在可视块模式下(Ctrl+V),一次性删除所选内容
r                   在可视块模式下(Ctrl+V),一次性替换所选内容.输入r,再输入替换成的字符

vim打开文件的方法小结

以下为vim打开文件的几种方法。
vim file:打开/新建文件,光标置于第1行行首,file为任意文件名。
vim file +n:打开文件,光标置于第n行行首,n为自然数。   #eg: vim test.txt +4
vim file +:打开文件,光标置于最后1行行首。
vim file +/pattern:将光标置于第一个与pattern匹配的字符串处,pattern为任意字符串。
 
 
 

转载于:https://www.cnblogs.com/fadewalk/p/10889815.html

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

3.23 vi/vim:纯文本编辑器 的相关文章

  • 100天精通Python(基础篇)——第4天:数据类型

    作者介绍 Python领域优质创作者 数据开发工程师 励志成为Python全栈工程师 关注我发现更多精彩 本文已收录于Python全栈系列专栏 100天精通Python从入门到就业 欢迎订阅 订阅后可私聊进Python全栈VIP交流群 手把

随机推荐

  • Java 流

    Java 流 什么是流 流是一个相对抽象的概念 所谓流就是一个传输数据的通道 这个通道可以传输相应类型的数据 进而完成数据的传输 这个通道被实现为一个具体的对象 字符流和字节流 抽象类 处理字节 InputStream OutputStre
  • 心电图心电轴怎么计算_需要你拿小本本记下的知识点——教你怎么看懂心电图...

    心电图 相信大家都很熟悉 但是你是否能看懂心电图呢 攻略来啦 大家可以拿小本本记下来 推荐有点医学基础的人观看 了解一下心电图怎么看 也能对自己有所帮助 接下来就让我们开始吧 心电图的波形组成 见下图 基本知识 1 拿到一个心电图 先看基本
  • python 环境配置测试,手工照敲线性回归实战

    lesson013 linear regression py import numpy as np error for y wx b def compute error for line given points b w points to
  • nodejs --buffer模块(三) buffer的操作和属性

    全局方法 Buffer byteLength string encoding 返回字符串实际字节的长度 Buffer compare buf1 buf2 比较两个buffer的前后顺序 等价于buffer1 compare buf2 Buf
  • 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面

    使用布局管理器 来设计一个登陆界面 都是操作 没代码没理论 参照 Qt设计一登陆窗口布局 1 新建空工程 双击 ui文件 进入界面设计区 我们新建工程时候 使用的是QMainWindow类 会自动包含菜单栏 状态栏 在右上角对象浏览器中 我
  • TeleGram都有哪些限制?

    账户 用户名 形如 TGgeek 5 32字符 用户名 username 有什么用 一定要设置吗 如何设置 名字长度 1 64字符 姓氏长度 0 64字符 账号自毁时限 如果账号在一定时间内不上线 到时限后会自动删除账号和所有资料 删除后不
  • visual studio:未能加载文件或程序集“xxx.dll”或它的某一个依赖项

    1 没有添加库目录或附加库目录 2 如果dll内部有错误 也会提示这个
  • 内联元素的padding和margin

    内联元素的padding和margin能设置上吗 这是我前段时间面试某中厂被问到的一道面试题 一开始有点懵 但照自己的理解是这样回答的 内联元素不能通过改变宽高来改变元素大小 只能通过内部撑开 padding设置不上 margin left
  • rand()查询效率问题解决

    随机从数据表中取一条数据 我们一般会用到rand 函数 但是如果用不好的话 rand 的效率实在太低 基础使用 SELECT FROM tablename ORDER BY RAND LIMIT 1 这是最基本的rand 用法 实例测试 我
  • 史上最全,Spring Boot入门篇总结,收藏起来慢慢看

    Spring Boot是Spring家族下的一个全新开发框架 其设计目的主要是用来简化Spring应用的创建及开发过程 它提供了自动配置 starter依赖等特性 从而使开发人员从大量的XML配置中解脱出来 Spring Boot致力于在蓬
  • mysql-批量更新

    方法一 用update结合case then实现 原始SQL语句 UPDATE baginfo 2021 09 SET channel id CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5
  • 五分钟9步搞定nginx正向代理配置方法

    nginx在绝大数的场景中我们使用其用于做web中间件或反向代理使用 但是nginx实际上也提供了正向代理的功能 下面我们来进行nginx正向代理配置操作 以便大家能够掌握nginx正向代理配置方法 第一步 获取nginx正向代理模块 gi
  • 微信小程序---点餐小程序左侧滑动菜单实现

    文章目录 前言 一 初识scroll view 二 左侧导航 三 右侧滑动 前言 最近在帮亲戚做一款微信的点餐小程序 以前从没有接触过小程序的我只能现做现卖 一边看文档一边实践尝试 在进行到点菜模块左侧滑动菜单时遇到了小小的阻碍 索性在查找
  • ARM Mbed数字信号处理

    信号处理对于许多应用而言很重要 借助现代计算机的强大功能 许多信号处理功能现在都可以通过数字方式完成 本文 我们将说明如何使用Arm Mbed DSP库进行数字信号处理和控制 低通滤波器 在Arm Mbed 网站上 有关于如何设计和实现低通
  • 基于 LowCodeEngine 的低代码组件体系的建设和实践

    今天在这里和大家聊一聊前端组件 或者现在更流行的说法 物料 的话题 物料本身已经不是一个新鲜的话题了 从 06 年 jQuery 发布 前端物料就开始以各种 jQuery 插件的形式不断涌现 直到今天我们仍然可以在 github 上看到很多
  • spring IOC

    1 主要内容 2 Spring 框架 2 1 Spring 框架概念 Spring 是众多开源java项目中的一员 基于分层的javaEE应用一站式轻量级开源框架 主要核心是 IOC 控制反转 依赖注入 与 AOP 面向切面 两大技术 实现
  • BASE64加密解密问题

    BASE64加密解密问题 问题点 base64解密用base64加密的字符串 没有拿到正确的原字符串 1 原支付链接 https yimafu yeepay com ymf pay qrPay index qr 4AZZPEEO id YM
  • 计算机按键模块,计算器键盘-TM1650/AIP650

    使用TM1650 AIP650作为输入检测芯片 TM1650和AIP650在引脚和功能上完全相同 两个芯片都是可以控制4个8段数码管或者扫描4 7矩阵按键 在读取数据的协议上 两种芯片的读取时序略有不同 但在控制命令上 是大致相同的 制作这
  • JAVA JRE JDK

    JRE Java Runtime Environment JVM 核心库 运行JAVA程序 class文件 所必须的组件 如想开发编译Java程序 java文件 需安装JDK Java Development Kit 安装JDK时默认包含公
  • 3.23 vi/vim:纯文本编辑器

    vi vim 是Linux命令行界面下的文字编辑器 几乎所有的Linux系统都安装了vi 只要学会了vi这个编辑工具 就可以在任何Linux系统上使用它 而vim是vi命令的增强版 Vi IMproved 与vi编辑器完全兼容 此外还有很多