赞
踩
目录
在这之前,我们大多数人都是使用的vs系列来写代码的,包括调试、编译、运行等操作都可以在vs上完成。这是因为vs是一个集成开发环境,我们可以在里面完成几乎所有与程序相关的工作。但在linux上,完成这些功能的软件是分离的,需要我们自行调用。
vim就是linux上的一个功能强大、模式众多的编译器,用来写代码的软件。
要进入vim,输入“vim 文件名”即可
在vim中,为了适配不同的情况,一共有12种模式可以用。不同的版本的vim可能会有所差别。但是在实际中,我们常用的模式就3种,即“命令模式”、“插入模式”和“底行模式”
在vim下我们首先要学会常用的三种模式的切换。(以下操作都需要使用英文输入法)
命令模式就是我们打开vim时所处的模式。
1.进入插入模式
打开vim后要进入插入模式,直接按键盘上的“i”键即可。
2.返回命令模式
要从插入模式中退回命令模式,按下键盘左上角的“esc键”即可
(2)命令模式与底行模式
1.进入底行模式
要从命令模式进入插入模式,按下键盘上的“shift ;”组合即可
2.返回命令模式
要从底行模式退回命令模式,按下键盘左上角的“esc键”即可
注意:插入模式和底行模式是无法互相切换的。必须返回命令模式才可以切换为其他模式,关系如上图所示
要区分不同的模式一般是根据vim的左下角来区分的
在进入vim时,我们所处的模式就是命令模式。当我们从其他模式回退到命令模式时,左下角什么都不显示
在插入模式下,左下角会显示"INSERT"字样。有这个单词时就说明我们在插入模式
在底行模式中,左下角会显示“:”,表示可以在这里输入命令
命令模式就是我们打开vim时所处的模式。简单来讲,命令模式就是以命令的方式操作vim
在命令模式下,我们键盘上输入的部分字符会被认为是命令。输入的其他大部分字符是没有反应的
注意:以下的命令中虽然带有空格,但在使用时不要输入空格,这里带上空格只是为了方便看
1.光标定位到当前行最右边
如果我们在某一行时,想将光标直接定位到当前行的最右侧,可以按下“shift 4”组合键,即“$”
2.标定位到当前行最左侧
如果我们在某一行时,想将光标直接定位到当前行的最左侧,可以按下“shift 6”组合键,即“^”
3.光标定位到当前文本的最后一行开头
无论我们处在哪一行,如果我们想将光标定位到当前文本的最后一行开头,按下“shift g”组合键,即"G"
4.光标定位到当前文本的第一行开头
无论我们处在哪一行,如果我们想将光标定位到当前文本的第一行开头,按下“gg”组合键,即按两下g
5.光标定位到任意行开头
如果我们想将光标定位到任意行,可以使用“行号 shift g”命令。即“行号 G”。如“4 shift g”。如果没有显示行号,可以在底行模式下输入“set nu”命令调出行号
6.光标移动
(1)按字符移动
在vim下,我们一般使用“h j k l”四个键来实现“上下左右”移动。但是这四个键的对应的移动比较奇怪。“h”键是向左移动;“l”键是向右移动;“j”键是向下移动;“k”键是向上移动
当然,我们键盘右边的上下左右移动键也是可以用的,就是在某些情况下可能出现不适配无法使用的情况。因此,在使用vim时最好还是用“h j k l”键来移动
(2)按单词移动
逐字符移动在长文本的情况下太慢了,因此,在命令模式下也可以按“w”和“b”键来实现按“单词”移动。“w”是向前移动,“b”则是向后移动
1.复制黏贴
(1)单行复制
为了方便演示命令的作用,我们就先用以下一个简单的“hello linux”程序进行演示:
在命令模式下,在想要复制的行上输入"yy p"就可以完成一次复制黏贴:
如果我们想对某一行进行多次复制,那么就输入“yy 复制行数 p”即可。如“yy 3 p”:
可以认为,“yy”是复制,“p”是黏贴。因此在“yy”复制某一行后,需要复制是直接输入“p”即可,无需重复yy。一行多次复制同理
(2)多行复制
如果我们想对某段代码进行多行复制,那么我们只需输入“复制行数 yy p”即可。该命令会从当前光标处向下数对应行数进行复制。如“2 yy p”:
多次复制和单行复制一样,在“p”前带上次数即可
2.撤销
如果我们想进行撤销操作,直接按下“u”键即可
如果撤销后反悔了,不想撤销刚才的内容,想恢复回来,按下“ctrl r”组合键即可
3.行删除
(1)单行删除
在vim中如果我们想删除某一行,我们只需将光标放在对应行按下“dd”即可,即按下两次“d”键
(2)多行删除
如果我们想删除连续的多行代码,只需将光标放在需删除的第一行,输入“删除行数 dd”即可。如“3 dd”
4.单字符删除
(1)向右删除
如果我们不想删除一整行,只是想删除行内的某些字符,就可以按下“x”键。该命令会从光标处向右删除
(2)向左删除
如果想向左删除,按下“shift x”组合键,即“X”即可
(3)批量单字符删除
如果想删除几个连续的单字符,就可以输入“删除个数 x”或者“删除个数 shift x”命令,使用哪个命令取决于你是想向右还是向左删除
(4)按单词删除
如果既不想删除整行,又觉得单字符删除太慢的话,就可以按下“c w”组合键,这样就会删除一个单词。但是要注意,删除后会进入“插入模式”,因此如果想删除并写入其他内容,直接写就行。如果想继续删除,就需要退回命令模式
当然,如果想批量删除几个连续单词,就可以使用“c 单词数 w”。这样就可以指定删除连续的几个单词了。例如“c 2 w”就是指定删除两个单词
要注意,单词计算是从光标处开始的。如果你的光标放在单词中间,就会从单词中间开始计算,不会将光标前的内容纳入删除范围
5.剪切
想要剪切对应行,将光标放在对应行并输入“dd p”即可。如果想要剪切多行,就输入“剪切函数 dd p”即可。可以认为“dd”操作就是剪切行,只是如果不输入“p”就是删除,输入“p”就是剪切
1.文本大小写转换
如果我们想对某些字符进行字母大小写转换,就可以按下“shift `”组合键,即“~”键。该命令会自动将大写转小写或者小写转大写
2.文本替换
(1)连续替换
如果我们想修改文本中的某些内容又不想整行删除,就可以按下“shift r”组合键,即“R”来进行文本替换。此时我们直接输入想要替换的文本即可完成字符替换,无需删除
其实这个命令是进入了替换模式:
当需要退出该模式时,按下“esc”键即可
(2)单字符替换
如果我们仅仅只是想修改某个字符,并不想进入替换模式,那么按下“r”键即可。此时只会进行一次替换。
如果我们想将几个连续字符替换成同一个字符,就可以用“替换字符数 r 替换字符”命令。如“5 r a”
插入模式,简单来讲就是进入编辑模式。在这个模式下我们可以随意编写文本。就和我们在记事本、word之类的软件下一样。我们写代码时也是在这个模式下写
插入模式的进入方法有很多种,最常用的是按“i”键进入。但还有其他几种。这里不一一讲解,只讲最常用的几种方法
1.原地进入插入模式
按下“i”键,就是原地进入插入模式。即光标在哪,就从哪里进入插入模式
2.从下一个字符进入插入模式
按下“a”键,就是从下一个字符进入插入模式。即光标从当前位置向后移动一位,并从移动后的位置进入插入模式
3.从下一行进入插入模式
按下“o”键,就是从下一行进入插入模式。即从光标所在行向下新起一行,并从新起行的头位置进入插入模式
进入底行模式后,可以在vim的最下面输入对应的命令来进行操作。可以看做该模式就是一个另类的命令模式。不同于命令模式主要是对文本内容和进入其他模式的操作,底行模式更多是对整个程序的操作
在底行模式下,以下带了空格的命令都必须输入对应的空格
底行模式必须从命令模式进入。按下“shift ;”组合键,即“:”即可。
1.调出行号
要调出行号,输入“set nu”命令即可
2.取消行号
要取消行号显示,输入“set nonu”命令即可
1.保存并退出
在vim中,保存并退出命令是“wq”。如果vim不让你保存并退出,可以使用“wq!”执行强制保存并退出命令
2.保存
如果只想保存不想退出,就使用“w”命令即可。如果在某些情况下,vim不让你保存,使用“w!”命令,可以强制保存
3.退出
如果不想保存只想退出,就使用“q”命令。同样的,如果vim不让你退出,可以使用“q!”执行强制退出命令
1.分屏
在vim中,如果你存在多个文件想要同时浏览并修改,可以执行“vs 文件名”命令。该命令用分屏的方式在同一个界面展示不同文件的内容
注意,如果你使用该命令时指定的是一个不存在的文件,系统就会自动创建一个同名文件
2.屏幕切换
因为我们只有一个光标,所以我们在同一时间只能对一个文件进行操作。如果我们想对分屏模式下的另一个文件做操作,就可以按下“ctrl w w”组合键,即按住“ctrl”后连续按两下“w”键。该命令就会使光标在不同文件之间跳转。
3.文件退出
要退出文件,就在对应的文件下进入底行模式并执行退出命令即可。要注意,光标在哪个文件下就是退出哪个文件
在打开vim编写代码时,假如我们不想退出vim就执行一些linux下才能执行的命令,如编译代码,查看手册等。这时我们就可以用“!对应命令”的命令。该命令可以在底行模式下执行linux中的命令。如“!gcc test.c”、"!man"
注意,在该模式下有些缩写命令,如“ls -l”的缩写“ll”命令就可能无法执行,要输入完整的命令
如果我们想对某份代码中的某些字符或单词全部替换,就可以执行“%s/文本中的字符/替换字符/g”命令。如“%s/printf/cout/g”就是将文本中的所有printf替换为“cout”
如果不写替换字符,就是删除文本中所有的对应的字符。如“%s/printf//g"就是删除文本中的所有printf
在使用vim时,想必很多人刚刚使用vim时都会感觉vim非常难用。比如在vim中我们没有字符的自动补全,没有文本提示符这类在vs系列等编译器中很常见的功能。这是因为此时的vim还没有经过配置,可以看做一个记事本,没有任何多余的功能。而要实现如自动补齐等编译器基本功能,就需要我们自行修改vim的配置文件
注意,vim的配置是按照用户来的,即你的vim配置只能只会影响自己的vim。如你的linux机器下有A和B两个用户,那么A的vim配置只会修改自己账户下的配置,而B的vim配置不会被修改。原因就在于虽然每个用户都是用的同一个vim,但vim使用时的配置文件是不同的
在每个用户的家目录下,都存在一个“.vimrc”文件,这个文件就是打开时使用的配置文件。
当我们想查看该文件时,会发现没有这个文件。但是没有关系,此时我们可以自行在家目录下创建一个“.vimrc”文件。这样我们就有了对应的“.vimrc”文件
要修改vim的配置文件,只需使用“vim .vimrc”命令进入vim文件,将对应的指令输入即可。
如此时我们的vim打开后是没有行号的:
那么现在我们进入.vimrc文件,并输入行号的命令“set nu”后保存并退出:
此时我们再进入vim:
可以看到,此时我们的vim打开后就自动带上行号了
所以要配置vim非常简单,就是将你需要 的功能的命令输入“.vimrc”文件即可。简单来讲,vim的基本配置就是修改自己的“.vimrc”文件
vim如果想配置的很好用,需要非常多的配置命令。如果想要自己配,可以自行在网上搜索vim配置相关的命令。如果不想自己配置,就可以去csdn、gitee或者github上搜索vim配置文件,直接复制下来即可。这里就不一一讲解。
在使用vs等编译器时,我们直接就有图形化界面供我们使用。如果需要调试程序,直接选择调试选项即可。但在linux这种没有图形化界面的系统上,如果我们想进行调试就需要使用对应的命令。
要记住,无论是windows还是linux下的代码调试,其思路都是一样的。当然,使用的操作方式肯定是不一样的。
gdb其实就是linux下的命令行调试器。对于gdb工具,我们不需要用的非常熟练,只需要掌握在使用gdb进行调试的基本命令即可。
一是因为在未来的实际中我们很少会用纯linux环境写程序,多为linux与windows的协同开发。在协同开发的环境下一般是在vscode等编译器上进行调试,很少用到gdb。二则是因为gdb很难用,而且用起来也比较麻烦,调试起来没有windows下那么方便与直观
为了方便测试,在以下的测试中,都是统一使用的以下程序:
如有改动,会在改动处说明
如果我们用的linux下没有gdb程序,直接执行“yum install -y gdb”即可。如果是普通账户,在命令前带上“sudo”即可
在vs中我们的程序有两个版本,一个是release版本,另一个是debug版本。想必都很清楚,我们如果要调试,都是在debug下调试的。因为debug版本的程序中有许多关于调试的信息,而release版本中则没有调试信息并对原程序进行了部分优化
为了便于区分,此处我们在debug版本的程序用“test_g”,而release版本则用“test”:
然后我们分别输入“readelf -S test | grep debug”和“readelf -S test_g | grep debug”命令:
这两条命令是显示对应程序的二进制信息并筛选出带有debug字样的信息
可以看见,release版本的test什么都没有显示,而debug版本中则有不同的内容。这些其实就是debug版本包含的调试相关信息
在linux下,我们用“gcc 文件名”生成的文件默认是release版本的。要生成debug版本的文件,就需要在原命令的末尾加上“-g”:
gdb的使用是非常简单的,直接输入“gdb 程序名”即可:
如果出现以上界面,就说明我们已经进入gdb调试界面了。我们想进行调试时在(gdb)后面输入对应的指令即可
要退出gdb,直接输入“q”即可:
要查看你的程序的代码,直接输入“l”命令即可。“l”命令的全称是“list”:
要注意的是,“l”命令不是从0行开始显示的,如果想从0行开始显示,就输入“l 0”命令:
如果内容没有显示完,按下"Enter"也就是回车键即可:
1.添加断点
在windows中调试时,我们经常会使用断点,让程序运行到某个位置就停止。linux也也有对应的功能,直接输入“b 行号”即可,“b”的全称是“break”:
2.查看断点
在vs中,在对应行的左边就有红点来显示断点,但linux下没有。如果想查看断点,则需输入“info b”命令:
在这里的“What”下面其实就是对应断点所处的函数、文件和行号
如果我们想删除某个断点,则直接输入“d 序列号”即可。这里的序列号是指在“info b”命令显示的内容中的“Num”下的序列,而不是对应断点的行数:
在linux下,断点是可以禁用的。断点是否可用是由“info b”命令下的“Enb”来确认的。“y”就是可用,“n”则是不可用:
如果我们既不想删除某个断点,但又不想让某个断点生效,就可以使用“disable breakpoints 序列号”命令来禁用断点:
当我们禁用断点后,如果想重新让该断点生效,使用“enable 序列号”命令即可:
在windows下,我们通常会按下“ctrl F5”来执行程序,而有断点时,则是用“F5”。这是因为“ctrl F5”是“开始执行不调试”,直接执行程序无视断点。而“F5”则是“开始调试”,运行到断点处或程序结束时停止
1.到断点停止
在linux中,如果想运行到断点处,直接输入“r”命令即可,“r”的全称是“run”:
这里我们已经在第8行提前打了断点,所以此处运行到第8行就停止了
在vs中我们调试时有“逐过程”和“逐语句”的概念,区别就是要不要进到函数的内部去。
(1)逐过程调试
在此处如果我们想逐过程不进入函数调试,输入“n”命令就会运行到下一行,“n”的全称是“next”:
这里从第8行到第6行是因为这是一个循环
(2)逐语句调试
我们先在Add()函数的上一行打上断点:
然后直接执行“r”运行到断点处。如果我们想逐语句进入函数调试,在此时直接执行“s”,“s”的全称是“step”。该命令碰到函数时就会进入对应的函数:
(3)从某位置运行到下一个断点
当存在多个断点,我们想从我们当前所处的代码位置直接运行到下一个断点处,执行“c”命令即可。全称是“continue”
(4)直接运行到函数结束
当我们在某个函数里面,想直接运行到该函数结束时,就输入“finish”命令。
注意,该命令只用用于出了主函数main以外的函数
如果想查看调用堆栈,输入“bt”命令即可:
1.临时显示变量
如果我们想查看在某个函数中的特定变量,可以使用“p 变量名”命令:
但是这种方式只能查看变量的临时值,如果我们接着执行程序,想查看这些值就必须重新输入一遍对应命令:
(2)跟随显示变量
那我们知道,vs中的监视窗口可以随着代码的执行而改变,无需自己重新输入。在linux下想跟随显示对应变量的变化,就要使用“display 变量名”:
(3)取消跟随显示变量
如果我们不想一直显示某个变量的变化,输入“undisplay 序列号”即可取消跟随显示:
这里的序列号指的是跟随的变量的最前面的序列号码
如果我们在调试代码时觉得调试处已经没问题了,想跳到该函数后面的代码去,就可以输入“until 代码行号”命令:
如果我们在执行程序时,想将某个特定变量的值设置为特定的值,就可以使用“set var 变量=特定值”命令:
要显示特定区域中存在的临时变量,使用“info locals”命令即可:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。