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 的主菜单。要的
- 2. “可视模式” 子窗口 - Insert Mode :相当于 >> 网站中不可编辑的、只能浏览的子网页。
- 3. “编辑模式” 子窗口 / Visual Mode):相当于 >> 网站中,用户可以向网页中输入信息的、可交互的子网页。
- 4. “末行模式” 子窗口 / Command-Line Mode :相当于 >> 网站中,用户在完成网页信息的填写之后、还要勾选几个的选项,比如:勾选同意条款 1 , 2,3 之类的,然后,才能按“提交”按钮。
- 回车键,4 个箭头的方向建,这些不需要用脑来记忆了吧?
附加说明
- “回车“按键 / Enter:相当于 >> 网站中的“提交“按钮。
- Esc :相当于 >> 在网站中,所有的子网页,都有只有一个直接“返回到主页“的菜单导航按钮(以下简称:按钮)。
- 只有主页 home( “命令模式” )才有直接跳转到各个子网页的按钮。
- 跳转的导航规则:没有从一个子网页 可以直接转到 其他子网页 的按钮。要想从一个子网页跳转到另一个子网页,必须返回到主网页 home ,然后,再从主页上、去选择到底要点击哪一个子菜单的按钮。
- 开始,进入到文件:在 OS 的终端里,输入如下命令
vi 文件名 :表示用 vi 这种应用软件来编辑 / 或新建一个文件,这个文件的名字,就是 vi 命令后面用“文件名”所代表、称谓的文件。- 即将完成,收尾阶段:“末行模式” 子窗口在底部的末行位置,当冒号出现时,输入的命令才有效。
:wq!
what is :wq!
- : 冒号是必须的,只有这样,其后的字母,才会被解释为是命令。
- w : write 表示写入文件命令。只有 :w 时,表示只写入,但不退出。
- q : quit 表示退出。只有 :q 时,表示退出,但不写入。
- ! : 感叹号表示强制。为什么需要感叹号?但文件被改动了,是不允许直接退出的,否则,所有的工作就白费了。
- 结束,退出的条件:正在运行中的 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 作为日常工作编辑器的古董级、或黑客级的程序员使用的。
可能大多数的程序员并不会去使用它,因为从总的用时来看,一般使用图形界面的编辑器,并不见的会比使用单纯的命令行编辑器,效率会低?
3. 当我们只想要简单地使用 vo /vim 时,v i Esc : "鱼爱返说"这 4 个精华按键,被淹没在命令字符的海洋里。
4. 为什么要学习 vi / vim ?当需要使用容器时,在容器里是可以安装一个大型的编辑器的,但是,这可能需要浪费不少的流量、磁盘空间、精力、时间(寿命)等等。
5. 为什么要使用容器?在 Linux 的世界里,App 的跨发行部,跨大版本号的使用,实在是困难的。
6. 那,为什么要 App 软件进行跨平台使用呢?因为需要使用,所以就要采用。自己造轮子吗?这可能会浪费更多的人生寿命阿。
7. 需要掌握,但又不想浪费过多的时间,于是,就有了 7 字真言:"鱼爱返 说 温泉哦" == v i Esc : wq !"
8. 它别注意:在有些官方仓库里,可能只有 vim,而没有 vi,但它们的大部分,甚至是绝大部分的命令,都是相同的。
App 窗口图的说明
vim 运行开始界面
工作及窗口切换框架 示例 2
刚刚打开文件时的界面: vim 文件名
子窗口 == 子网页:注意看左下角的提示。
按错了按键,一般没有关系,看准左下角的提示,就行。
问题记录
当打开没有权限、或只读型的文件时,出现警告:
此时,如果处在中文输入状态,则会出现无法进入菜单窗口的问题。