首页 > 其他分享 >vi/vim命令详解

vi/vim命令详解

时间:2024-09-14 15:02:19浏览次数:8  
标签:字符 删除 vi 所在 模式 vim 行号 详解 光标

 

原文: Linux—vi/vim命令详解(3000字)

 

目录

vi/vim概念

vi/vim的三种模式

vi/vim常用命令

命令行模式的命令

进入插入模式

从插入模式切换为命令行模式

移动光标

操作文本

其他功能

底行输入模式

保存文件

操作文本

搜索和替换

注释


vi/vim概念

        vi 用来进入 vi 编辑器,vi 编辑器是所有 Unix 及 Linux 系统下标准的文本编辑器,它的强大不逊色于任何最新的文本编辑器

        Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用

vi/vim的三种模式

命令行模式(command mode)

        每次使用命令编辑文件时,默认是命令行模式,可以控制屏幕光标的移动,字符或行的删除,移动复制某区段,

插入模式(Insert mode)

        只有在插入模式下,才可以做文本输入

底行模式(last line mode)

        只能从命令行模式切换到插入模式,可以将文件保存或退出,也可以设置编辑环境,如寻找字符串、列出行号等。

vi/vim常用命令

编辑文件/创建文件

        使用 vi/vim 文件名 可以进行编辑文件或新建文件

切换到插入模式

        在命令模式任意按 a、i 或 o 就能进入到插入模式编辑文件

切换到命令模式

        按 Esc、双击 Esc 或 删除底行内容就能回到命令模式

切换到底行模式

        切换到命令模式之后,输入 : 或者 / 进入底行模式

保存及退出

        : w 文件名 (将文件以指定的文件名保存)

        : wq (保存并退出)

        : q! (不保存强制退出)

命令行模式的命令

进入插入模式

        i,I :i 从光标当前位置开始输入;I 为在目前所在行的第一个非空格符处开始输入

        a,A :a 从目前光标所在位置的下一个位置开始输入;A 为从光标所在行的最后一个字符处开始输入

        o ,O:o 表示在光标所在的下面插入新的一行输入,;O 为在目前光标所在位置的上面插入新的一行开始输入

        取代

        r,R :r 用随后输入的一个字符取代光标所在的字符;R 用随后输入的文本取代从当前光标开始至后面的若干字符,若新输入的字符数超过原有对应字符数,则多出部分就附加在后面,直到按 Esc 退出取代模式 

从插入模式切换为命令行模式

        单击 Esc

        双击 Esc

        删除底行模式内容

移动光标

        h 、j 、k 、l ,分别控制光标的左、下、上、右(也可以使用方向键),想要进行多次移动的话,例如向下移动 20 行,可以使用 20j 或 20↓ 的组合按键

        ctrl  b :屏幕往后移动一页

        ctrl  f :屏幕往前移动一页

        ctrl  u :屏幕往后移动半页

        ctrl  d :屏幕往前移动半页

        0 :移到光标所在行首

        G :光标移动到整个文本的末行,[行号] G:将光标移至指定行的首位

        H :光标移动到当前屏幕的首行,[行号] H:将光标移至指定行的首位

        M :光标移动到当前屏幕中间的首位

        L :光标移动到当前屏幕的末行,[行号] L:光标移动到倒数的指定行首位

        $ :移动到光标所在行的行尾

        ^ :移动到光标所在行的首位

        w / W :光标跳到下段字行的首位

        e / E :光标跳到当前行的行尾或下段字行的行尾

        b / B :光标跳到当前行的首位获上段字行的首位

        gg :光标移动到整个文本的首位

        #| :# 为数字,光标移到该行的第 # 个位置

        #<空格> :# 为数字,光标移动在光标后 # 位

        [行数] + :光标移动到当前行的下一行或指定行的首位

        - :光标移动到当前行的上一行

        ( 、{ :光标移动到整个文本的首位

        ) 、} :光标移动到整个文本的末尾

操作文本

复制 / 粘贴

        yw :复制光标所在位置到行尾的字符

        yy :复制光标所在行

        #yy :# 为数字,复制光标所在向下 # 行

        y1G :复制游标所在行到第一行的所有数据

        yG :复制游标所在行到最后一行的所有数据

        y0 :复制光标所在的那个字符到该行行首的所有数据

        y$ :复制光标所在的那个字符到该行行尾的所有数据

        dd :剪切光标所在行

        #dd :# 为数字,剪切光标所在的向下 # 行

        dG :剪切光标所在到最后一行的所有数据

        d$ :剪切游标所在之后到行尾的字符

        D :剪切光标位置到行尾的所有字符

        d0(数字):剪切游标所在前一位字符到当前行首位

        d1G :剪切光标所在到第一行的所有数据

        dM :剪切从光标所在行至屏幕中间行的全部内容

        p :在光标下一行粘贴

        P :在光标上一行粘贴

删除

        X :删除光标前的一个字符(相当于 backspace 键) 

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

        #x :# 为数字,删除从光标位置所在后 # 个字符

        dd :删除光标所在行

        #dd :# 为数字,删除光标所在的向下 # 行

        dG :删除光标所在到最后一行的所有数据

        d$ :删除游标所在之后到行尾的字符

        D :删除光标位置到行尾的所有字符

        d0(数字):删除游标所在前一位字符到当前行首位

        d1G :删除光标所在到第一行的所有数据

        dM :删除从光标所在行至屏幕中间行的全部内容

        X :删除光标所在位置的前一个字符

        #X :# 为数字,删除光标所在位置的前 # 个字符

        文本功能

        [行数] J :将光标所在行与下一行或设置指定的行数的数据结合成同一行,通过空白隔开

        ctrl  g :显示光标所在行的行号

        u :撤销前一个动作

        Ctrl  r :重做上一个动作

        . :重复前一个动作

其他功能

        状态显示

        Ctrl G :显示文件的状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比

        屏幕调零

        [行号] z [行数] <回车> :将光标所在的行作为屏幕的首行

        [行号] z [行数] . :将光标所在的行作为屏幕的中间行

        [行号] z [行数] - :将光标所在的行作为屏幕的最末行

若给出行号,那么该行号所对应的行就作为当前行显示在屏幕的首行、中间行和最末行,若给出行数,则它规定了在屏幕上显示的行数

例:

10 z 20 <回车> :将文件中的第 10 行作为屏幕显示的首行,并一共显示 20 行

10 z . :将文件中的第 10 行作为屏幕显示的中间行,显示行数为整屏

10 z 5 - :将文件中的第 10 行作为屏幕显示的最末行,显示行数为 5 行

底行输入模式

保存文件

        :w [file-name]:[ 以指定文件名称 ] 保存文件

        :w! :强制保存文件

        :wq [file-name] :[ 以指定文件名称 ] 保存文件并退出

        :wq! :强制保存文件并退出

        :q :退出文件

        :q! :不保存文件并强制退出

        :r [file-name]    在当前文件中读入另一个文件的数据加到光标所在行后面

        :2,3 w [file-name]    将第 2 行 到第 3 行的内容保存成 filename 这个文件

行号

        :set nu(number 缩写):显示行号

        :set nonu :显示行号

        :#(行号):输入 # 回车,就会跳到第 # 行的首位

搜索和替换

        搜索

        / :向下查找,在 / 后输入要查找的内容

        ? :向上查找,在 ? 后输入要查找的内容

        n :重复前一个搜索的动作

        N :反向进行前一个搜索动作

        替换

        [数字] s :表示删除当前光标字符并进入插入模式开始输入,如果在之前加入数字,例如 5,则表示删除从当前光标开始的 5 位字符并进入插入模式开始输入

        [数字] S :表示删除光标所在行的内容并进入插入模式开始输入,如果在之前加入数字,例如 5,则表示删除从当前光标开始往下 5 行内容并进入插入模式开始输入

        :/%s/old/new/g :全文替换指定字符

        c$ :删除从光标开始到该行末行的内容并进入插入模式

        [数字] C :例如数字是 3,删除光标当前位置之后直到下面第 3 行内容并进入插入模式

        [数字] cc :表示删除光标所在整行内容并进入插入模式;如果加上前面的数字,例如 5,则表示删除从光标当前行开始到第 5 行内容并进入插入模式

注释

方法一:块选择(vim)

批量注释

        Ctrl  v 进入块选择模式,然后移动光标选中你要注释的内容,再按 I 进入插入模式输入注释符号如 // 或 #,然后按两下 Esc,系统会自动将你选中的所有行都加上注释

取消注释

        Ctrl  v 进入块选择模式,选中你要删除的行注释符号按 d 即可删除注释

方法二:

        :起始行号,结束行号s/^/注释符/g:在指定的行添加注释

例:

        :10,20s#^#//#g:在 10 到 20 行添加 // 注释

        :10,20s/^/#/g:在 10 到 20 行添加 # 注释

        :起始行号,结束行号s/^注释符//g:取消指定行的注释

例:

        :10,20s#^//##g:在 10 到 20 行删除 // 注释

        :10,20s/#//g:在 10 到 20 行删除 # 注释

 

若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

 

标签:字符,删除,vi,所在,模式,vim,行号,详解,光标
From: https://www.cnblogs.com/zxdplay/p/18414004

相关文章

  • RS485集线器的作用和功能详解
    RS485集线器是一款专为解决复杂通信环境下RS-485大型系统总线形式要求而设计的总线分割集线器。它采用总线挂接式连接方式,不支持星型连接,但可以通过特殊设计提供RS-485/422星型连接方式,从而改变原有总线的单一式结构,为网络结构工程建设带来极大的便利。RS485集线器的主要作用包括:1......
  • Hume AI 推出 EVI 2 情感模型;OpenAI o1 模型问世,模拟人类思考问题 丨 RTE 开发者日报
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个......
  • uniapp - 最新详细实现web-view网页与安卓苹果App端之间互相通信功能,苹果app/安卓app
    前言在uni-app项目开发中,详解实现web-view和App之间的互相通信完整流程及代码教程,Uniappapp端向webview网站传递数据,同时webview又可以向app端传递数据参数,完成二者的数据通信方案,支持嵌入本地移动端H5页面、第三方网站、自定义网页,附带各种常见问题,解决发送数据通信没......
  • 门磁模块详解(防盗感应开关 STM32)
    目录一、介绍二、程序设计main.c文件gate_guard.h文件gate_guard.c文件三、实验效果 四、资料获取项目分享一、介绍        MC-38常闭式门磁开关是作为IO开关输入数字信号的,原理是合在一起信号是导通的,配合有线主机使用不能单独使用。适用于非铁质(如木......
  • 直流电阻和交流电阻区别详解
    直流电阻和交流电阻在电学领域中是两个重要的概念,它们之间存在多个方面的区别。以下是对两者区别的详细阐述:一、直流电阻和交流电阻的定义与特性直流电阻:是指在直流电路中对电流的阻碍作用,表现为元件通上直流电时所呈现的电阻,即元件固有的静态电阻。直流电阻的大小可以通过欧姆......
  • 直流电阻和交流电阻区别详解
    直流电阻和交流电阻在电学领域中是两个重要的概念,它们之间存在多个方面的区别。以下是对两者区别的详细阐述:一、直流电阻和交流电阻的定义与特性直流电阻:是指在直流电路中对电流的阻碍作用,表现为元件通上直流电时所呈现的电阻,即元件固有的静态电阻。直流电阻的大小可以通过欧姆定律......
  • Java HashMap详解:源码分析、hash 原理、扩容机制、加载因子、线程不安全
    这篇文章将会详细透彻地讲清楚Java的HashMap,包括hash方法的原理、HashMap的扩容机制、HashMap的加载因子为什么是0.75而不是0.6、0.8,以及HashMap为什么是线程不安全的,基本上HashMap的常见面试题,都会在这一篇文章里讲明白。HashMap是Java中常用的数据结构之一......
  • 【YashanDB知识库】YAS-02025 no free space in virtual memory pool
    本文转自YashanDB官网,具体内容请见[https://www.yashandb.com/newsinfo/7304719.html?templateId=1718516]【标题】YAS-02025nofreespaceinvirtualmemorypool【问题分类】业务SQL执行【关键字】YAS-02025【问题描述】在崖山环境查询数据提示报错YAS-02025nofreespa......
  • pbootcms模板时间格式调用方法详解
    在PBootCMS中,时间调用主要通过date标签来实现。以下是一些常用的调用方法及其效果示例:列表页时间调用默认格式:[list:date]效果:2021-12-0609:12:30年月日格式:[list:datestyle=Y-m-d]效果:2021-12-06年格式:[list:datestyle=Y]效果:2021月日格式:[list:da......
  • kafka集群架构设计原理详解
    目录从Zookeeper数据理解Kafka集群工作机制Kafka的Zookeeper元数据梳理1、zookeeper整体数据2、ControllerBroker选举机制3、LeaderPartition选举机制4、LeaderPartition自动平衡机制5、Partition故障恢复机制6、HW一致性保障-Epoch更新机制7、总结从Zookeeper......