思考:linux Vi Vim 编辑器的简明原理,与快速用法之《 7 字真言 》@ “鱼爱返 说 温泉哦“ (**)

Linux vi/vim | 菜鸟教程

https://zhuanlan.zhihu.com/p/602675406

Linux Vim编辑器的基本使用_vim文本编辑器-CSDN博客

思考

1. 记忆公式:

按键操作的 7 字真言 1:

"鱼爱返 说 温泉哦" = = v i Esc : wq !


一般的简单用途,只需记住 7 字真言中说的 7 个按键的作用和用法,就行了:v i Esc : wq !

======

按键操作的两种 7 字真言对比:

  • 分读型 7 字真言 1:"鱼爱返 说 温泉哦" == v i Esc : wq !
  • 拼读型 7 字真言 2:"维奥 说 温泉哦" == vi ao Esc : wq !
    维 == vi , 奥 == ao

    v : 以可视模式进入浏览编辑主窗口。可以执行复制、粘贴之类的编辑操作,但不能输入用户的内容。

    进入到数据输入子窗口,通常有 3 种命令:
    i : 插入光标前一个字符。
    a:插入光标后一个字符。
    o:向下新开一行,插入行首。
    注:以 i a o 进入数据输入子窗口,可以输入用户的内容,但不可编辑。

注 1:a o : 其实也可以不需要记忆,在进入编辑子窗口之后,通过 4 个方向键就可以实现这两个操作了,只是稍微多按了一次方向键而已。因此,分读型 7 字真言 1,才是主要的。

.

注 2:数据输入子窗口 与 浏览编辑主窗口 窗口的区别

a. 一般现在的图形界面编辑器,比如:office, gedit 等等,用户的数据输入和编辑排版,都是在同一个窗口下完成的。

但是,在命令行菜单界面,实现起来是困难的,或者说就算实现了,在使用上也是困难的;因为如果这样的话,普通字母就不能简单地作为编辑排版的功能字母来使用了,势必要增加许多功能字母与普通字母的组合,才能完成 vi 那么多的按键功能。

b. 因此,数据输入子窗口就是给专门给用户输入数据的。末行子窗口嵌入在该窗口的底部,平时是隐藏的。

c. 浏览编辑主窗口除了浏览功能之外,还具有编辑的功能,比如复制粘贴,删除行块等等的诸多功能。

按键操作的补充说明:

  • 鱼 爱 返 == v i Esc # v 表示同中语拼音"鱼",i表音"爱",Esc 表示"返回 /退出"。
  • 冒号 ( : ) == :# 表示"说"。
  • 温 泉 == w q # w 表音"温",q 表音"泉"。
  • 感叹号 ( ! ) == ! # 感叹号 ( ! ) 表示""。

  • 回车键,4 个方向键:记住它们,不需要用脑的?

其实,可以再归纳为:

vi /vim 编辑器包括 3 种终端窗口:

  • 数据输入子窗口 :以 i \a \o 方式进入,用户的数据在这里只能输入数据。不能对文本进行编辑,如:不能进行复制、粘贴之类的操作。
  • 浏览编辑主窗口 :以 v 方式进入,用于浏览,以及对文本进行编辑。用户可以对文本进行复制、粘贴之类的编辑操作。
  • 帮助提示主窗口 :用于提示,以及执行有效的命令,进入到其他子窗口。
    ---- 这个窗口,相当于在打开网站的真正主页之前,跳出来的一个警告页面。只在第一次单纯的 vi / vim 软件启动时,才会、且只会出现一次。
  • 末行子窗口 : 西文冒号。主要用于结束退出;设置等等。对应于底行命令模式,存在于主窗口底部的末行位置。虽然末行子窗口平时是隐藏的,但是,和其他窗口一样,它也是一个具有独立个性的。

说明:

  1. 浏览编辑主窗口和帮助提示主窗口,以下简称为 主窗口。

  2. 可以忽略不计的帮助提示主窗口:只有一次实际寿命的、只在第一次单纯启动 app 时才会有菜单提示帮助。

  3. Esc 是返回主窗口的万能按键。所有进入到子窗口的命令,在任意一个子窗口下按 Esc 都会返回到主窗口,包括在该窗口下按的 Esc。因此,多按 Esc 按键是没有问题的。

  4. 只有在主窗口下输入有效的命令,才会进入到子窗口。一般只要懂得 v i 即可,就是软件的名字。

特别注意:在中文输入状态,造成了命令输入的无效。

  • 末行窗口被内嵌在主窗口的底部末行的位置,平时是隐藏起来的。
    输入冒号可以调出的末行子窗口。末行子窗口,总是嵌在其他窗口的底部,从而造成了在理解上的困难;其实就是 UI 设计中的 bottom bar,平时隐藏,使用冒号来叫出。
  • 主窗口相当于网站的主页,只有在主页状态下,才有通向子网页的链接。因此,只有 Esc 回退到主页场景,才能使用快捷键命令、进入到其他子窗口。
    就像是公交车,从 A 到 B 没有公交,从 A 到 B ,必须要回到总站转车才行。
  • wq! 属于在末行窗口里的菜单,通过按键输入符号来调用。

一些常用命令

在浏览编辑主窗口下,可以进行的文本编辑操作:

注:数据输入子窗口,主要就是用来输入用户数据的吧?


Ctr-d:向下翻半屏

Ctr-u:向上翻半屏

gg:光标移动文件开头

G:光标移动文件末尾


dd 删除光标所在行

ndd 删除指定的行数

:n1,n2d 删除n1到n2行


撤销命令

u:一步一步撤销

ctr-r:反撤销


yy 复制当前行

粘贴已剪切的内容:

-- 进入命令行模式,按 "p" 将剪切的内容粘贴到光标所在行的下一行。

-- 进入命令行模式,按 "P" 将剪切的内容粘贴到光标所在行的上一行。

【:set nu】 显示行号

【:set nonu】 取消显示行号

注:nu == number


/string 向光标之下寻找一个名称为string字符串

?string 向光标之上寻找一个名称为string字符串

2. 区别

省略说明:这里所有的窗口,都是指终端窗口,所以可以将"终端"这 2 个字省略掉了。

终端窗口:终端型菜单与内容显示的界面。

"鱼爱返":v i Esc,v i 分别对应于 可视、插入 这 2 个窗口。Esc 表示从子窗口返回;由于所有的返回,都是返回到主窗口,包括在主窗口场景下所按下的 Esc 按键,所以 Esc 按键也可以看作就是主窗口。

冒号 ( : ):末行命令窗口。在插入模式下,无法调出末行命令窗口;因为这时它表示的是所输入的冒号字符。末行命令窗口只内嵌在可视窗口和主窗口的末行位置,因此,只有在这两个窗口模式下,输入才能有效地切换到末行命令窗口。

"温泉哦" :w q ! 表示 vi 结束退出的 3 种主要方法:写入文件,退出,强制退出。

抓住主干,不拘小节

终端命令行菜单显示窗口与 GUI 图形窗口的类比:4 个终端窗口,对应于 4 个不同GUI 图形窗口,或者说是 4 个不同的网页。

只有一个主(网)页,在主页中,有通往所有 子网页 的导航按钮。

在子网页里,只有返回到主页的导航按钮。这个导航按钮是相同的,都是 Esc 按键。

要想从一个子网页跳转到另一个子网页,必须回到主页,因为只有在主页中,才有通往子网页的导航按钮。

终端窗口的好处

黑客之间的相互对抗,需要速度快。同样水准的黑客,速度慢时,就会沦为失败者。但是,大多数,甚至是绝大多数的编程场合,真的也需要这么快的速度吗?

就像打字那样,大多数的人使用拼音输入法,就可以了。但是,作为专门依靠打字赚钱的人来说,就需要用五笔字形之类的输入法了,因为输入快,就是赚钱多。

用得到的命令,才是生产力。用不到的命令,就是浪费时间的垃圾。

vi / vim 的命令,是=实在是太多了。在需要时再看,也不迟吧?

在网络上,有太多的网文,金子淹没在一大堆的沙石里。今天看了,明天忘了,为了自己的记忆,所以就写了这篇文章,以备忘。

在容器中,使用 vi / vim 是一种好的选择

如果不是为了使用容器,那么,估计我也不会太在意 vi ,毕竟它学了、很快就又忘记了,因为我不是依靠打字来生存的。

哪怕在容器中安装像 gedit 这种轻量的图形界面编辑器,都要下载一大堆依赖。当有些依赖没有被下载到时,App 在使用中就会出现一些莫名其妙的问题,甚至是无法启动。

容器的一个特征之一

就是类似于将原生的 Linux 发行版,在删除了绝大部分的依赖,改变了原生 OS 的运行方式,以及配置之后,得到的一个类似于可以在 VirtualBox 虚拟机上运行的 Livecd ISO;但是,容器是可读写的,类似与 linux slan os 发行版;但它不能在 VirtualBox 中运行,而是在所谓的容器引擎中运行。

在运行的容器,就相当于是电脑运行中的一个进程,一个普通的 App,所以它很轻量,在底速配置的电脑上也能飞快地运行。

3. 通过对简单网站的网页导航进行类比,说明原理

主窗口 <<== 相当于 ==>> 主网页
  • 一个简单的网站,只有 1 个主页,3 个子网面;外加一些杂七杂八的东西。
    1. "命令模式" 子窗口 - Insert Mode :相当于 >> 网站的主页 home。网页的总入口 == App 的主菜单。要的
    1. "可视模式" 子窗口 - Insert Mode :相当于 >> 网站中不可编辑的、只能浏览的子网页。
    1. "编辑模式" 子窗口 / Visual Mode):相当于 >> 网站中,用户可以向网页中输入信息的、可交互的子网页。
    1. "末行模式" 子窗口 / Command-Line Mode :相当于 >> 网站中,用户在完成网页信息的填写之后、还要勾选几个的选项,比如:勾选同意条款 1 , 2,3 之类的,然后,才能按"提交"按钮。
  • 回车键,4 个箭头的方向建,这些不需要用脑来记忆了吧?
附加说明
  • "回车"按键 / Enter:相当于 >> 网站中的"提交"按钮。
  • Esc :相当于 >> 在网站中,所有的子网页,都有只有一个直接"返回到主页"的菜单导航按钮(以下简称:按钮)。
  • 只有主页 home( "命令模式" )才有直接跳转到各个子网页的按钮。
  • 跳转的导航规则:没有从一个子网页 可以直接转到 其他子网页 的按钮。要想从一个子网页跳转到另一个子网页,必须返回到主网页 home ,然后,再从主页上、去选择到底要点击哪一个子菜单的按钮。
  • 开始,进入到文件: 在 OS 的终端里,输入如下命令
    vi 文件名 :表示用 vi 这种应用软件来编辑 / 或新建一个文件,这个文件的名字,就是 vi 命令后面用"文件名"所代表、称谓的文件。
  • 即将完成,收尾阶段:" 末行模式" 子窗口在底部的末行位置,当冒号出现时,输入的命令才有效。
    :wq!

what is :wq!

  1. : 冒号是必须的,只有这样,其后的字母,才会被解释为是命令。
  2. w : write 表示写入文件命令。只有 :w 时,表示只写入,但不退出。
  3. q : quit 表示退出。只有 :q 时,表示退出,但不写入。
  4. ! : 感叹号表示强制。为什么需要感叹号?但文件被改动了,是不允许直接退出的,否则,所有的工作就白费了。
  • 结束,退出的条件: 正在运行中的 vi / vim 编辑器,想要退出,是有条件的:
    1. 要么是文件没有被改变 :q。
    2. 要么是存盘之后,再退出 :wq
    3. 想要退出,但又不想存盘时,就要采用"强制" :wq!:q! 表示:存盘后强制退出,或 不存盘强制退出。
      x. :q退出,退不出?!
      :q! 强制退出,成功了。啊!啊!啊!黄了、黄了,没有存盘!!白干了。
  • vi / vim 的命令,全部都是 ASCII 编码的拉丁字母与符号。26 个字母就是 26 进制的数学计数系统而已,拉丁语单词,本质上就是一个可变长度的优选数值而已,根据单词的造型和发音来作为其选择的主要依据之一。

备注

  1. 入门、或者个人简单运维的用途,只需要记住:鱼 爱 返 ==>> v i Esc 。

  2. vi / vim 编辑器的命令,是非常多的,那是给专门使用 vi 作为日常工作编辑器的古董级、或黑客级的程序员使用的。

可能大多数的程序员并不会去使用它,因为从总的用时来看,一般使用图形界面的编辑器,并不见的会比使用单纯的命令行编辑器,效率会低?

  1. 当我们只想要简单地使用 vo /vim 时,v i Esc : "鱼爱返说"这 4 个精华按键,被淹没在命令字符的海洋里。

  2. 为什么要学习 vi / vim ?当需要使用容器时,在容器里是可以安装一个大型的编辑器的,但是,这可能需要浪费不少的流量、磁盘空间、精力、时间(寿命)等等。

  3. 为什么要使用容器?在 Linux 的世界里,App 的跨发行部,跨大版本号的使用,实在是困难的。

  4. 那,为什么要 App 软件进行跨平台使用呢?因为需要使用,所以就要采用。自己造轮子吗?这可能会浪费更多的人生寿命阿。

  5. 需要掌握,但又不想浪费过多的时间,于是,就有了 7 字真言:"鱼爱返 说 温泉哦" = = v i Esc : wq !"

  6. 它别注意:在有些官方仓库里,可能只有 vim,而没有 vi,但它们的大部分,甚至是绝大部分的命令,都是相同的。

App 窗口图的说明

vim 运行开始界面

工作及窗口切换框架 示例 2

刚刚打开文件时的界面: vim 文件名

子窗口 == 子网页:注意看左下角的提示。

按错了按键,一般没有关系,看准左下角的提示,就行。

问题记录

当打开没有权限、或只读型的文件时,出现警告:

此时,如果处在中文输入状态,则会出现无法进入菜单窗口的问题。

相关推荐
IT果果日记18 分钟前
ubuntu 安装 conda
linux·ubuntu·conda
一棵开花的树,枝芽无限靠近你20 分钟前
【PPTist】添加PPT模版
前端·学习·编辑器·html
Python私教21 分钟前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特34 分钟前
环境变量简介
linux
热爱生活的五柒1 小时前
vscode利用ofExtensions插件可以调试单进程Openfoam,但是不能调试mpi多进程案例
ide·vscode·编辑器
小陈phd1 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
是阿建吖!1 小时前
【Linux】进程状态
linux·运维
明明跟你说过2 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Komorebi.py3 小时前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh3 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法