Linux相关概念和重要知识点(4)(自举、vim)

1.语言和编译器的发展

(1)汇编语言的出现

计算机只能看懂二进制,但是用二进制实现一个功能就太难了,人们需要发明一种高效的语言。人们抽象出一套编程逻辑,定义了一系列操作 ,接下来就需要实现它。**最初人们用二进制来实现操作到二进制之间的转换,这个过程非常困难,最后终于写出了第一代编译器,即汇编语言的编译器。**此后,人们可以用这套更高效率的语言写代码,写的代码通过编译器来编译形成二进制可执行程序。我们需要注意编译器是可执行程序,是二进制的,但它的作用是翻译。

(2)自举

但是,第一代编译器极难理解和维护 。于是人们在保证第一代编译器没有问题的情况下,用汇编语言写了一个新的汇编编译器,再用第一代的编译器编译形成可执行程序。这个新的编译器也是个二进制程序,但它的好处在于它本质是用汇编语言写的而不是二进制写的,后续维护或者功能拓展比较方便。 之后我们就可以使用第二代编译器来编译汇编语言了。第二代的编译器源码是汇编语言,第一代编译器的源码是二进制。只要第一代编译器没有问题,我们可以对第二代编译器做各种功能上的拓展,最后用第一代编译器编译一下就可以了。这个过程称为自举。

很明显,**我们的C语言就是建立在汇编语言上的,**先用汇编写出第一代C语言编译器,再用C语言自举,写出第二代编译器,我们的第二代编译器可以实现更多的功能,只要第一代编译器没有问题,我们就能不断以较低成本维护和更新语法。

我们可以发现,第一代编译器是基础,它能保证这个语言的存在 ,之后我们;利用第一代编译器进行功能不断迭代保证语言发展,第二代、第三代......每一代都离不开首代编译器的支持 ,但只要保证首代编译器的正常,我们就能以较低的时间和精力来维护编译器。可见,一个语言的发展也是人类智慧的积淀。现在,第一代汇编编译器,第一代C语言编译器都足够完善,我们不需要在写汇编编译器时用二进制写编译器,我们写C语言编译器也无需用汇编语言写编译器。

我们无需担忧怎么用一门语言写自己的编译器,这是语言设计者应当考虑的,设计的语言逻辑必须完备且自洽,是能够对自己的词法语法进行处理的。

(3)C语言->可执行程序过程的理解

C语言->可执行程序就是逆发展的过程,先将C语言翻译成汇编,再将汇编翻译成二进制。对于C语言编译器来说,它只需要把C语言翻译成汇编就行,之后交给汇编的编译器。因为前人已经把汇编->二进制的坑都帮我们踩了,我们无需再走一遍同样的路

2.vim

(1)vim是什么?

vim是一款多模式的编辑器(类似Windows里面的记事本,不是IDE)。 我们可以使用vim写代码,退出之后自己编译运行。向文件里写东西有很多方式,如nano、echo等,它们都不如vim功能完备,并且vim有个很大的优势就是Linux自带这个工具,在作为辅助工具时是不错的选择。

(2)模式切换

vim模式较多,适当降低自己的学习成本,提高效率更重要。常用的模式有命令模式、插入模式、底行模式、替换模式、视图模式。

我们需要遵循一个中心的原则,即命令模式是中心(初进入vim时就是命令模式)在任何模式任何状态下,按ESC都能回到命令模式(默认模式),在切换模式前我们需要先ESC回到默认模式再说。

命令模式->插入模式:a、i、o,这三个按键有细微区别,i是进入插入模式后什么都不做,a是如果后面有一个字符光标就会向后跳一位(不能创建空格,后面没有字符时什么都不做),o就是进入后光标换行(可创建空格,后面没有字符时也可以提行)。一般来说i就够用了,其余两个知道即可。

命令模式->底行模式:shift + ;(输入冒号)

命令模式->替换模式:shift + r(大写R)

命令模式->视图模式:ctrl + v(大写V)

(3)各个模式功能

注意任何模式下输入数字不能使用数字键盘,vim识别不了

①命令模式(默认模式)

删除:x 从光标位置开始向后删1个,(num) x 从光标位置开始向后删num个,shift + x(大写X) 从光标位置开始向前删1个,**(num) shift + x(大写X)**从光标位置向前删n个

光标如果是一个方块,以左边为线,带入Windows操作经验理解

复制:yy 复制光标所在行,(num) yy一次性复制num行

剪切:dd 剪切光标所在行,(num) dd一次性剪切num行

粘贴:p 在该光标所在行换行粘贴**(新开一行,原来的下一行会被移至下下行)** ,(num) p在该光标所在行换行开始粘贴,粘贴所选内容num次

撤销:u按照修改历史向前回溯,撤销本身不视作修改,注意理清修改的逻辑线

重做:ctrl + r按照修改历史向后回溯,重做本身不视作修改,注意理清修改的逻辑线

替换:r + (要替换字符) 替换光标开始向后1个字符,(num) r + (要替换字符) 替换光标开始向后num个字符**(num超出该行字符数就不做处理)**

**保存退出:shift + zz(连按两下大写Z)**保存文件并退出

大小写切换:shift + ·(输入~) 从光标位置开始向后切换1个字母的大小写,**(num) shift + ·(输入~)**从光标位置开始向后切换num个字母的大小写

定位行:gg 光标回到第一行,shift + g(大写G) 光标定位到最后一行,**(num) shift + g(大写G)**光标定位到第num行

锚点:shift + 4(输入$) 定位到该行行尾,**shift + 6(输入^)**定位到该行行首

光标移动:h 左,j 下,k 上,l 右,在非视图模式下可用方向键代替

按单词前进或后退:w 按单词前行,b按单词回退(判断是不是单词是根据有没有空格、有没有非字母来决定的,不是真正意义上的单词)

②插入模式(命令模式->插入模式:a、i、o)、替换模式 shift + r(大写R)

除了ESC所有输入都会当作字符处理,注意如果输入数字不能使用数字键盘,vim识别不了

替换模式下会从当前光标开始覆盖,但覆盖不是删除,删除覆盖字符时原来的字符会再显示出来

③底行模式(命令模式->底行模式:shift + ;(输入冒号))

行号显示与关闭:set nu 行号显示,set nonu关闭行号显示

查找:/ + (查找内容) 可查找含指定内容的行,输入n切换下一行,最后一行之后返回第一行

保存和退出:w 保存,q 直接退出,wq 保存并退出;w! 强制写入,q! 强制退出,**wq!**强制保存退出

强制修改退出在某些场景有必要,如root修改/etc/sudoers里面的内容时就只能使用wq!强制保存,普通用户则根本无法操作

**不退出执行操作:! (指令)**会在不退出vim的情况下在当前工作目录下执行指令,如!pwd,!ls -al。执行完指令后按任意键就可返回vim继续操作

多开窗口(最多3个):vs + (文件名) 可同时打开并显示多个文件,光标只能在一个窗口,ctrl + ww 可切换窗口

④视图模式(命令模式->视图模式:ctrl + v(大写V))

光标移动:h 左,j 下,k 上,l 右选中行,可使用插入模式的定位行来批量选中

批量编辑: 光标选中后shift + i(大写I) 进入编辑(此时显示插入模式),输入完毕后再按ESC,选中行都会在光标选中区域最前面(同样以最左侧为线,按照Windows操作逻辑理解)加上编辑内容

批量删除: 光标选中后d删除光标选中所有内容

(4)配置vim

①版本查看

命令行输入vim查看vim的版本

②配置

每个用户的家目录中都有一些隐藏文件,.vimrc就是其中之一。每个用户都可以单独有一份.vimrc,里面有一些vim基本的设置,我们可以在.vimrc里配置加命令,这些设置都只会影响单个用户,包括root都不会被影响**。**当打开vim时,它会先读取家目录下的配置文件.vimrc,vim就可以展示出默认状态没有的视觉效果和代码帮助。

每个人都能配置自己的vim,尽量在普通用户下安装自己的。root安装会使全局的vim默认设置改变,需要每个用户自己的.vimrc覆盖

相关推荐
Run_Snails几秒前
hcia-openEuler V1.0师资题库-试卷3
运维·服务器·网络
翔云API2 分钟前
身份证识别接口的应用场景和作用
运维·服务器·开发语言·自动化·ocr
zhaowangji3 分钟前
ubuntu虚拟机装载共享文件夹导致的诡异错误
linux·运维·ubuntu
张望远-长风万里5 分钟前
运维监控专项学习笔记-id:0-需求场景、监控作用、监控能力
运维·笔记·学习
小崔爱读书6 分钟前
普元DWS - Linux下安装DWS标准版
linux·运维·服务器
&星辰入梦来&19 分钟前
Nginx从入门到入土(三): 静态资源管理与代理服务
运维·nginx·负载均衡
PerfMan23 分钟前
基于eBPF的procstat软件追踪程序垃圾回收(GC)事件
linux·开发语言·gc·ebpf·垃圾回收·procstat
小安运维日记1 小时前
Linux云计算 |【第三阶段】PROJECT1-DAY1
linux·运维·云计算·apache
pyliumy1 小时前
rsync 全网备份
linux·运维·服务器
苹果醋31 小时前
SpringCloud系列之一---搭建高可用的Eureka注册中心
运维·nginx