在VS2022上一并达成的,这种从代码编写,编译到调试,运行,将所有功能都集成在一款器具上的工具称之为IDE(集成开发工具)。就是之前我们编写,编译,调试,运行代码都
Linux中的开发工具不是 IDE,而是一个个独立的应用:
写代码的器具为:编辑器 vim,vi(vi 是很老的编辑器)
编译代码的工具为:gcc,g++
调试的工具为:gdb,cgdb
构建工具为:makefile,make,cmake,git
本篇博客主导关于编辑器 vim 的运用,vim 是一个只用来写代码的软件。vim 是一个在终端下编写代码的工具,作为程序员必须掌握一种能够在 linux 后端编写代码的文本编辑器,而 vim是应用最为广泛的后端文本编辑器。要想采用好vim,相关的指令必须掌握。
vim 的三种模式
我们先以 vim 的三种模式为切入点,后面会逐渐扩展其它模式。这三个模式分别是:命令模式,底行模式,插入模式。
说,在编辑的时候,命令越多,效率也就越高。为什么命令越多,效率越高呢?基于就是平常我们利用键盘按 123acd 键,屏幕上就呈现123acd;按 ctrl c 和 ctrl v,就是复制粘贴,是快捷操作。实际上我们允许将快捷键理解为指令。显然命令许可增加编辑效率,也就自动化和批量化,越熟悉这些命令,编辑时效率就越高就是命令背后围绕命令来展开的就是。vim 的核心就。
1. 模式之间的切换
使用 vim 编写 C 语言的 “hello world” 程序。vim 代码文档,打开文件,编写代码。打开资料之后,默认处在命令模式下,这也是为什么一开始无论我们怎么按动键盘,vim 都不会有反应,基于它将我们输入的东西识别成了非法命令。
插入模式。进入到插入模式后,怎么回到命令模式?按 Esc 键(最左上角)就是当按 i 键,此时就进入了插入模式,并且左下角会显现 -- INSERT -- ,表明此时。
故而从命令模式进入插入模式按 i 键,从插入模式回退到命令模式按 Esc 键。
怎么退出命令模式呢?一般情况下,需要从命令模式进入到底层模式,然后输入对应的指令才能退出。如何进入底行模式呢?按 shift ;(一起按),然后再按 q 键,就退出 vim 了。若现在位于底行模式,想进入命令模式,按 Esc 键即可。
所以从命令模式进入底行模式按 : 键,从底行模式回退到命令模式按 Esc 键。
通过应该注意的是插入模式和底行模式不能够直接切换,必须由命令模式作为中介。如此,三种模式之间的切换方式如下图所示:
接下来讲解三种模式用到的指令。
2. 命令模式
在将命令模式的相关指令功能时,先介绍底行模式下的一个命令 ---set nu,其功能为显示代码行数,set nonu 机制与 set nu 相反:
复制粘贴功能
yy 功能为:复制光标所在行的所有内容。
p 功能为:粘贴 yy 所复制的内容到当前所在行的下一行。
功能演示:
n + yy功能为:复制光标所处位置的 n 行的内容。
n + p 功能为:粘贴 n 行复制的内容。
光标移动功能
shift+g(G) 功能为:进入文本末端。功能演示:
gg 功能为:进入文本开始。功能演示:
n shift+g(G) 功能为:定位到第 n 行。功能演示:输入 10 G
shift+4($) 功能为:定位到当前光标所在行的结尾。作用演示:
shift+6(^) 功能为:定位到当前光标所在行的开始。功能演示:
之前介绍的指令都是大范围移动的,有没有局部范围移动的指令?有,按键盘的上下左右键,或者按 hjkl 这四个相邻的键,这四个键的功能分别为:h(左)j(下)k(上)l(右)。推荐使用 hjkl 键来控制光标的局部移动。
可能有人会想,既然有了方向键来控制光标的移动,为什么还要设置 hjkl ?源于在使用键盘时,hjkl 这四个键就在右手所在处,用起来更加的快捷;并且在电脑诞生之初,没有方向键,故而选择hjkl 这四个键来充当方向键。若想问为什么不是 wasd 这四个键,那应该思考它是什么时候作为游戏移动方向键的。
通过按 hjkl 这四个键,光标每次只能移动一个字符,若目标行的代码很长,想要移动到改行的某一处,岂不是要移很久?我们能够按其它键,实现快速移动的效果。
w 功能为:按照“单词”为单位,向右移动;b 功能为:按照”单词“为单位,向左移动。
一个单词。在利用 w 和 b 键时,特殊字符只能一个个跳过,数字和字母组成的串可以一并跳过。机制演示:就是这里的“单词“是什么意思?由字母和数字组成的串是一个单词,单独的特殊字符
n w/b 功能为:以“单词”为单位,向右/左移动n个单词。
删除和撤销功能
dd 功能为:删除光标所在行的内容。功能演示:
n dd 功能为:删除从光标所在行开始的 n 行的内容。功能演示:5 dd
若后悔之前所执行的操作,按 u键,功能为:撤销之前执行的操作;若对刚刚的撤销操控又后悔了,按ctrl r键,特性为:撤销 u 的操作。
将文本的某些内容撤销后,再保存文本内容,这时 ctrl r 键仍热允许达成撤销 u 的执行的机制。只要没有退出 vim,随时都可以撤销,一旦退出 vim ,就无法撤销了。
若不想删除整行内容,只想删除某个字符,按 x 键,功能为:删除光标所在的字符(持续按x键,持续删除)。 x 删除字符时是从左向右删除,若想要从右向左删除,按shift+x(X)键,能力为:从右向左删除光标所在的字符。机制演示:
n x 功能为:从光标所在位置开始,从左向右连续删除n个字符;n shift + x(X) 功能为:从光标所在位置开始,从右向左连续删除 n 个字符。
替换和注释功能
shift+`(~)功能为:大小写迅速转换。功能演示:
若在编写代码时,某个字符写错了,想要将它修正,应该怎么办?将光标移动到要修改的字符位置处,按 r 键,进入单词的替换模式,再输入替换字符,这样错误字符就修正完毕了。r 功能为:替换光标所在位置的一个字符。功能演示:
n r 功能为:将光标所在位置的一个字符替换成 n 个替换字符。功能演示:2 r e
若想要修改光标所在行的内容,按 shift+r(R)键,进入替换模式,之后会在文本的左下角显示 --REPLACE-- 表示当前处于替换模式。shift+r(R) 功能为:让 vim 进入替换模式,进行批量化的内容替换。若想要退出替换模式,回到命令模式,按 Esc 键。
ctrl v功能为:进入视图模式,进入之后文本的左下角会表明 -- VISUAL BLOCK --,表示当前处于替换模式。进入视图模式后,按 hjkl 键选中区域,之后按shift+i(I)键快速进入到插入模式,再输入 // ,再按 Esc 键,便就做完了批量化注释。功能演示:
位于视图模式下,使用 hjkl 键选择区域,再按 d 键,便完成了批量化去注释。功能演示:
若想要将从第 m 行到第 n 行的内容注释掉,输入 (m-n) j选中区域,shift+i ,//,Esc,完成大区域的注释。ctrl v 进入视图模式,按 hjkl 键选择区域,按 d 键,完成大区域的去注释。
通过在视图模式下,既然能够批量化的注释,自然也就许可批量化的增加文本中的内容,选中区域,输入内容,将选中的区域都增加新增内容。功能演示:
3. 底行模式
w 功能为:保存文本文件;q 功能为:退出文本文件;wq 功能为:保存并退出文本文件。当在退出前,修改了文本文件中的内容且没有保存,此时按 q 键,会显示:
w! 功能为:强制保存;q! 功能为:强制退出;wq! 功能为:强制保存并退出。这三个指令都是用来处理没有文本的权限时,怎么保存和退出文本。
对于普通用户,若去掉了对 code.c 文件的 r 权限,然后使用 vim 打开 code.c 文件,会发现文档里面什么都没有,这是因为没有文件的 r 权限。
若往档案中写入内容,然后再保存,会显示:就是加上对 code.c 的 r 权限,去掉对 code.c 的 w 权限,然后运用 vim 打开 code.c 文件,会发现能够查看到资料中的内容,只
显示仅有只读权限。若想要退出输入 q! ,强制退出。
若在使用 vim 编写程序时,不小心退出了 XShell 软件,且文本文件中的内容没有保存,此时再重新登陆 XShell ,用 vim 打开文本文件,会出现以下内容:
Found a swap file by the name ".test.c.swp" 发现了一个 swp 资料,vim 在关闭的时候,将我们刚刚写的临时文件保存了起来。最下面几个单词的意思分别为:
1. Open Read-Only:以只读的方式打开
2. Edit anyway:强制编辑
3. Recover:恢复之前未保存的修改
4. Delete it:删除swap文档
5. Quit:退出
6. Abort:终止
以 . 开头,若想要查看输入 ls -al 指令:就是输入 r/R 之后,打开文本文件,接着保存并退出;当再次打开时,它仍然会出现相同的内容,这是为什么?因为当 vim 闪退时,会默认在当前目录下生成一个临时文件。但是输入 ll 指令查看时,为什么看不见呀?由于这个临时文件
.test.c.swp 就是 vim 生成的临时文件,若不想再显示那些内容,删除 swp 文件即可。
/key 功能为:匹配搜索,按 n 键自动跳到包含 key 内容所在的行处。功能演示:
!cmd(任意指令) 功能为:不退出vim,直接执行cmd命令。效果演示:
%s/dst/src/g 功能为:将文本文件中所有的 dst 都替换成 src。功能演示:%s/hello/666/g
vim 文件名,打开该文件,不往里面写入内容。直接 !q 退出,若该资料本身不存在,则该路径下不会新建同名文件;!wq 强制保存并退出,若该档案本身不存在,则会在该路径下新建同名文件。所以在使用 vim 编写代码时,不应该先 touch 一个档案,然后再 vim 打开该文件,可以直接vim 文件名。
vs文件名 功能为:分屏,建立多文件编写代码。将屏幕分成两个屏:
光标位于哪个分屏,此时就在操作哪个分屏。若想将光标从一个分屏移动到另一个分屏,按ctrl ww ,功能为:选中分屏通过。再输入 vs 文件名,分成三个屏,还能够分成4个屏甚至更多,退出并保存这些文件后,会发现在当前路径下生成了3个文档:
当退出 vim 后,光标在第 n 行,退出之后再次打开,光标还在原来的位置。若想要打开文本文件时光标就位于某行位置,可以输入vim 文件名 +n,使光标定位到 n 行。功能演示:
4. 插入模式
插入模式不必多说,该模式就是写模式。之前曾介绍过由命令模式进入插入模式的一种方法,再来介绍两种方法 a 和 o,aio这三种方法可以由命令模式进入到插入模式。位于命令模式下时,每次退出都需要进入底行模式才行,有更简便的方法的shift+z(Z),等同于shift+; q,直接退出 vim 。
5. 五种模式之间的转化方式
在介绍命令模式中的指令的能力时,提到过另外两种模式替换模式和视图模式。下图展示了这五种模式之间的替换方式:
vim 的便捷配置
什么难事。就是为什么是简单配置,基于 vim 的配置一件非常复杂的事,但如果只是便捷的配置,那不
配置文件的位置:在目录 /etc/ 下,有个名为 vimrc 的文件,这是框架中公共的 vim 配置⽂件,对所有用户都管用;而在每个用户的主目录下,都允许自己建立私有的配置文件,命名为:“.vimrc”。例如,/root 目录下,通常已经存在⼀个.vimrc 资料,如果不存在,则自己创建。
在 zs 普通账户下配置 vim:
用 vim 打开某文本文件,里面什么都没有:
演示 vim 的简单的配置:
一般在用户的家目录下,会保存着一个隐藏的临时目录,当前 zs 的家目录下并没有想要看到的:
如果没有,自己创建 touch .vimrc。打开 .vimrc ,向里面写入配置项 set nu,显示代码行号。再打开文本文件,编写代码时就自动显示行号了:
可以运用 which 指令查看到 vim 所在的目录:
这也就说明了vim实际上就是一个指令。
当我们以普通用户的身份打开 vim 时,vim 命令就会去当前用户的家目录下去查找配置文件 .vimrc。
当 vim 启动时,会将 .vimrc 文件中的调整项作为 vim 启动的原始配置文件。因此将配置项写入.vimrc配置文件中就是对vim做基础配置,本质就。
可以使用 AI 来搜索你想要添加的配置项。
但是实际上大家自己做的 vim 的配置,基本上很难用,因为没有我们最需要的作用,如语法提醒,自动补齐。在实际上使用 vim 时,用到的都是强大的功能,这些都需要 vim 插件,想要什么插件可以通过 AI 获取。再安装这些插件时,不建议直接安装到系统里,可以在当前目录下,创建一个.vim 目录,将下载的插件安装到 .vim 目录中,然后再配置 .vimrc 中的配置项,再在 .vim 目录中引用 .vimrc 。
在学习权限时,提到过普通用户 sudo 进行权限提升时,是默认提升失败的,倘若想要成功,得让 root 用户将普通用户添加到信用用户列表中。怎么添加呢?找到 /etc/sudoers ,打开/etc/sudoers目录,找到下示内容:
按照 100 行所示的格式,添加要添加的用户账号:
添加完毕后,输入wq,保存并退出,会发现退出不了,需要 !wq ,强制保存并退出。
否添加成功:就是来验证
为什么我一个超级用户,在退出 /etc/sudoers 文件时,还要强制退出呢?这与文件的权限有关,root 对该资料只有 r 权限:
如果我们以普通用户的身份,去打开 /etc/sudoers 文件,会发现什么都没有,因为普通用户没有权限。