从第一次接触vi/vim到现在已经十几年了,在这个过程中,来来回回,反反复复,学习vi很多次了。

虽然关于vi的使用,我还远未达到“专家”的水平,但对于vi的使用,我有话说。

1.缘起

vi是一个编辑器,起源于unix,在linux中非常常用。关于vi的使用,网上有大量的教程,但质量良莠不齐,很容易误导“新手”。本文的价值在于,我走了十几年的弯路,你可以少走弯路。

每个人学习vi的目的不一样,学习过程和学习方法也比如不同。一般学习者分如下3种情况:

  • 新手级

    新手要求不高,会用基本操作即可。本文通过10分钟的学习,就可以达到这个目标。

  • 进阶级

    大部分人目前处于这个阶段,在本文的最后,将介绍如何从进阶级步入专家级。

  • 专家级

    到这个阶段,基本上可以做到“信手拈来”,出神入化了。

2.新手学习vi

对于新手入门vi,只要掌握打开文件,编辑,保存。

  • 打开文件

    在命令行中 vi filename,就可以打开文件进行查看和编辑。

  • 编辑

    打开文件后进行编辑的操作,主要包括“增、删、改、查”。

    和其他编辑器不同,vi 有Normal模式Insert模式

    在Normal模式下输入i进入Insert模式,输入Esc返回Normal模式。(当然有非常多的方法进入编辑模式,如输入ao等,此处不过多说明)。

    1)增

    确保是在Insert模式下,通过键盘输入内容即可。

    [注意] 如何识别当前是在什么模式下?状态栏可以看的,或者键盘输入看。

    2)删

    删除,跟其他编辑器的操作不同(其他编辑器是先选定,然后Delete、或者Backspace)。

    在vi中的删除是在Normal模式下,通过 x 删除一个字符,通过 dd 删除光标所在行。

    3)改

    所谓“改”,无外乎先删除,再输入。我们通过1)和2)组合实现。

    好吧,这里还是学一点吧: 在Normal模式下输入cw,可以替换一个“单词”。

    4)查

    vi打开的文件,如果内容非常多,需要查询,替换的时候,需要用到“查”。

    在Normal模式下,输入/,后跟需要查询的内容,然后回车即可。

  • 保存

    保存是在命令模式下输入 :w 即可,退出时命令模式下输入 :q

3.进阶学习vi

新手通过步骤2,初步掌握了vi的使用。进阶学习,需要掌握(切记下面所有的都是在Normal模式):

  • 初级光标的移动

    你可能会有疑问,新手不需要移动光标?当然需要了,只不过默认通过“上、下、左、右”箭头移动即可。其实vi中,为了更加高效,是通过 h j k l来移动光标的。

  • 高级光标的移动

    比如数字0移动到行的开头,$移动到当前行的行尾,^移动到本行第一个非空字符,

  • 各种进入Insert模式的方法

    比如在光标后插入a,在当前行下面新增一行的o,在当前行上面新增一行的shift + o,或者输入cw替换一个word

  • 查找和替换

  • 复制、粘贴

    复制通过yy,粘贴是p

    灵活掌握,比如我们知道dd是删除当前行,光标定位到目标位置后,接着按键p是可以粘贴的。

    比如3dd是重复执行dd三次,不一而足。

  • 光标的定位

    :N,比如:100,表示光标定位到第100行。在此,需要思考,总共只有10行,会怎么样?

    gg相当于是:1

    G定位到最后一行

  • 区域选择、块操作、可视化选择

    ......

4.总结

对于新手来说10分钟入门vi不吃亏,对于已经入门需要进阶,请自行学习:

  • Learn Vim Progressively 个人认为这个是有史以来最好的vi教程,没有之一。

  • 对于新手,也可以通过vimtutor来学习

我的方法就是,“用”起来就会了。虽然我用的是windows 10系统,我开发中,vs code和IntelliJ IDEA、visual studio都启用了vi的。

有图有真相:

加油,我相信你也可以入门,并成为vi专家的!

史上最简单的vi教程,10分钟包教会的更多相关文章

  1. 史上最简单的 GitHub 教程

    史上最简单的 GitHub 教程 温馨提示:本系列博文已经同步到 GitHub,如有需要的话,欢迎大家到「github-tutorial」进行Star和Fork操作! 1 简介 GitHub 是一个面 ...

  2. 整理:史上最简单的 MySQL 教程

    1 前言 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成 ...

  3. 史上最简约的vi教程,复制和粘贴

    上一篇博客,讲了"新手"如何"入门"vi,解决了"两眼一抹黑"的情况.知道在vi下如何进行基本的操作,如部署在Linux下的项目,修改配置文 ...

  4. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  5. 史上最简单的 SpringCloud 教程

    史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)史上最简单的Spri ...

  6. 史上最简单的 SpringCloud 教程 | 终章

    https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...

  7. (转) 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  8. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)

    转载请标明出处: 原文首发于 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f10-eureka/ 本文出自方志朋的博客 文章 史上最简单 ...

  9. 史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」

    自动增长 自动增长:auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值. 自增 ...

随机推荐

  1. 整理了一下react16.7.0的webpack模板

    基本上react需要方法和依赖的库都引配好了.github地址:https://github.com/qianxiaoning/demo-react16.7.0 欢迎大家star或者fork呀~ te ...

  2. P1060 梦中的统计

    题目描述 Bessie 处于半梦半醒的状态.过了一会儿,她意识到她在数数,不能入睡. Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数.她开始注意每一个数码(0..9):每一个数码在计 ...

  3. 前端小白-----ES6之字符串模板

    前言:只要坚持就会胜利--Coldfront-小白菜 既是总结也是一种分享 分享内容:ES6 字符串模板 案例1:var Musics=[{music:"六月的雨",singer: ...

  4. asp dotnet core 支持客户端上传文件

    本文告诉大家如何在 asp dotnet core 支持客户端上传文件 新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息 public class Kanaj ...

  5. javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法

    * offsetWidth 水平方向 width + 左右padding + 左右border-width * offsetHeight 垂直方向 height + 上下padding + 上下bor ...

  6. centos7 创建sftp

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的网络的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为  ...

  7. python实现单词本功能

    #实现简单的单词本:# 可以添加单词和词义,当所添加的单词已经存在 让用户知道:# 查找单词,单词不存在时,让用户知道# 删除单词,当删除的单词不存在时,让用户知道# 以上功能无限制操作,直到用户输入 ...

  8. 0018 CSS注释(简单)

    CSS注释规则: /* 需要注释的内容 */ 进行注释的,即在需要注释的内容前使用 "/*" 标记开始注释,在内容的结尾使用 "*/"结束. 例如: p { / ...

  9. DEVOPS技术实践_20:串联多个job执行

    在jenkins可能会有战役中场景,就是在一个job执行完之后,把这个执行结果作为另一个job的执行条件 比如A执行完,如果A执行成功,则执行B,如果失败则执行C 1 前期准备 A任务 import ...

  10. 021 Ceph关于too few PGs per OSD的问题

    在一个ceph集群中,操作创建一个池后,发现ceph的集群状态处于warn状态,信息如下 检查集群的信息 查看看池 [root@serverc ~]# ceph osd pool ls images ...