前言
我们在自己的电脑上所用的编译软件,就拿vs2022来说,我们可以在上面写C/C++语言、python、甚至java也可以在上面进行编译,这种既可以用来编辑、运行编译,又可以支持很多种语言的编译器是一种集成式开发环境,集众多于一身。
而我们在Linux中,我们有自己的编辑器vim,也有自己的编译工具gcc/g++,各种功能独立,话说回来,当然是集成开发环境要更为方便,但是我们在初步学习Linux时,我们稳扎稳打比较好。
这篇所主要讲的编辑器vim,是vi的升级版本,vi/vim的区别简单点来说,他们都是多模式编辑器,不同的是vim它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
vi/vim键盘图:
一、vim的基本概念
vim有三种模式,分别是命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
1、命令模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到底行模式。命令模式时在键盘上输入「i」键,即可进入插入模式,输入「 :」键,就会进入底行模式。
2、插入模式
只有在插入模式下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
3、底行模式
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下, 「 :」键 即可进入该模 式。要查看你的所有模式:打开vim,底行模式直接输入。
我们用一张图来表示这三者之间的转换关系:
我们只能从命令模式进入底行模式和插入模式,如果想要从插入模式进入底行模式或者想要从底行模式进入插入模式,那我们必须先回到命令模式,再进入另一个模式。
二、vim的基本操作
-
进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面
vim 文件名
-
退出vim及保存文件
在命令模式下,按一下「:」冒号键进入底行模式
例如: : w (保存当前文件)
: wq (输入「wq」,存盘并退出vim)
: q! (输入q!,不存盘强制退出vim)
三、vim命令模式命令集
1、插入模式
- 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
- 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
- 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
2、移动光标
- vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格
- 按「G」:移动到文章的最后 按「$」:移动到光标所在行的“行尾”
- 按「^」:移动到光标所在行的“行首”
- 按「w」:光标跳到下个字的开头
- 按「e」:光标跳到下个字的字尾
- 按「b」:光标回到上个字的开头
- 按「#l」:光标移到该行的第#个位置,如:5l,56l
- 按[gg]:进入到文本开始
- 按[shift+g]:进入文本末端
- 按「ctrl」+「b」:屏幕往“后”移动一页
- 按「ctrl」+「f」:屏幕往“前”移动一页
- 按「ctrl」+「u」:屏幕往“后”移动半页
- 按「ctrl」+「d」:屏幕往“前”移动半页
3、删除文字
- 「x」:每按一次,删除光标所在位置的一个字符
- [#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
- 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
- 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
- 「dd」:删除光标所在行并且带有剪切功能,可以和p联合使用
- 「#dd」:从光标所在行开始删除#行
4、复制
- 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
- 「#yw」:复制#个字到缓冲区
- 「yy」:复制光标所在行到缓冲区。
- 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
- 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完 成复制与粘贴功能。
5、替换
- 「r」:替换光标所在处的字符
- 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
6、撤销上一次操作
- 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行 多次恢复。
- 「ctrl + r」: 撤销的恢复。
7、更改
- 「cw」:更改光标所在处的字到字尾处
- 「c#w」:例如,「c3w」表示更改3个字
8、跳至指定的行
- 「ctrl」+「g」列出光标所在行的行号。
- 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
四、vim底行模式命令集
在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。
1、列出行号
「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。
2、跳到文件中的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。
3、查找字符
「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。
4、保存文件
「w」: 在冒号输入字母「w」就可以将文件保存起来。
5、vim内执行Xshell命令
「!命令」: 进入底行模式后,输入!后再输入你要执行的命令,就可以直接执行
举例:我们简单的在vim里写下C语言打印Hello World代码,用编译工具gcc编译,我们之前都是退出vim后再对其进行编译,但是我们进入底行模式输入编译命令后按回车:
主屏幕上就会有这段话,我们再按回车
就会又回到vim命令模式
接下来我们./a.out进行编译:
Hello World已经打印在主要屏幕上了,之后再回车也可以再回到vim。
主要作用---查找函数
也有人说这个功能比较鸡肋,在我们在vim里编写代码的时候,我们有时候忘记函数,我们需要查找,之前我们操作是退出vim,再输入指令<man+函数名>去进行查找。
但是我们也可以直接在vim底行模式输入<!man+函数名>去查找,了解后再回车回到vim,更为方便。
6、创建多文件同时编写
我们一般在写代码的时候,一般都会有头文件,源文件,我们在写的时候一般都是同时进行,总不能在源文件写完退出打开头文件再写,这样麻烦了。
在底行模式有这样一个命令:
vs 文件名
我们在text.c文件里创建头文件text.h
创建完成,出现分屏界面,这时候光标在哪里就可以对哪个文件进行编写。
切换光标的方式:CTRL+ww 按住CTRL连续按两次w就可进行光标的转换。
五、其它问题
1、如何批量化注释和批量化去注释
这个操作比较麻烦,但是总比一个一个注释好。
批量化注释步骤:
1、我们先在命令模式下按CTRL+v 进入该模式(VISUAL BLOCK)
2、然后按 j 键选中自己想要注释的行或 #j,#是数字,可以直接选中#行
3、选中之后,再按shift+i
4、输入// ,再按Esc两次
批量化去注释步骤:
1、我们先在命令模式下按CTRL+v 进入该模式(VISUAL BLOCK)
2、选中我们要去注释的行,与注释该步相同,但是需要注意的是,我们选中完之后再L一下,也就是向右移动,这样就会选中我们两列/。
3、按d删除即可。
2、如何解决历史问题,普通用户无法进行sudo提权
当我们想以一个普通用户的身份做一些sudo提权的命令时,通常会有这种情况:
它说我们没有在sudoers文件里,不可以进行sudo提权的操作。
那么我们如何将我们写进sudoers文件里呢?
步骤:
1、切换成root用户
2、打开目录下的sudoers
进入后是这样的:
大概在100行左右,我们找到该设置:
“Allow root to run any commands anywhere”允许root在任何地方运行让任何命令
3、我们直接yy复制root这行后粘贴到下一行,只把名字root改成我们普通用户的名字即可
4、保存退出
wq保存退出之后会有这个提示,不用担心,这个只是担心我们是不是误操作了,所以我们在wq后加!即可。
现在我们切回普通用户,验证我们可以进行sudo提权:
六、简单vim配置
在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
1、创建文件的位置
- 在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下, 通常已经存在一个.vimrc文件,如果不存在,则创建之。
- 切换用户成为自己执行su,进入自己的主工作目录,执行cd~
- 打开自己目录下的.vimrc文件,执行 vim .vimrc
2、简单配置vim
在.virmrc文件里,输入自己想要设置的配置,至于设置什么,那看你自己想要怎么设置,可以去百度搜索vim配置,会出现很多命令,复制粘贴到.vimrc文件里之后,保存打开要编写的文件,就发现已经配置的内容了。