当前位置:   article > 正文

初识linux之vim工具与bdb调试工具_vim左下角不显示模式

vim左下角不显示模式

目录

一、vim的概念

二、vim常用模式切换

1.三种常用模式切换

(1)命令模式与插入模式

2.模式区分

(1)命令模式

(2)插入模式

(3)底行模式

三、三种模式的使用

1.命令模式

(1)光标定位

(2)文本复制黏贴命令

(3)文本编辑命令

2.插入模式

(1)插入模式的进入

3.底行模式常用命令

(1)进入底行模式

(2)行号

(3)写入及退出

(4)分屏及相关操作

(5)底行模式执行linux命令

(6)全局文本替换

4.vim基本配置

(1)创建vim配置文件

(2)修改配置文件

(3)vim配置命令

四、gbd调试

1.gdb

2.gdb中进行调试的基本命令操作

(1)gdb的安装

(2)生成debug版本的程序

(3)gdb的使用

(4)退出gdb

(5)查看程序代码

(6)添加断点

(7)删除断点

 (8)禁用断点

 (9)开启断点

(10)gdb下的程序运行到断点

(11)调用堆栈

(12)监控变量

(13)跳到指定代码行

(14)设置变量值

(15)显示特定区域的临时变量


一、vim的概念

在这之前,我们大多数人都是使用的vs系列来写代码的,包括调试、编译、运行等操作都可以在vs上完成。这是因为vs是一个集成开发环境,我们可以在里面完成几乎所有与程序相关的工作。但在linux上,完成这些功能的软件是分离的,需要我们自行调用

vim就是linux上的一个功能强大模式众多的编译器,用来写代码的软件。

进入vim,输入“vim 文件名”即可

二、vim常用模式切换

在vim中,为了适配不同的情况,一共有12种模式可以用。不同的版本的vim可能会有所差别。但是在实际中,我们常用的模式就3种,即“命令模式”“插入模式”“底行模式”

1.三种常用模式切换

在vim下我们首先要学会常用的三种模式的切换。(以下操作都需要使用英文输入法

(1)命令模式与插入模式

命令模式就是我们打开vim时所处的模式

1.进入插入模式

打开vim后要进入插入模式,直接按键盘上的“i”键即可。

2.返回命令模式

要从插入模式中退回命令模式,按下键盘左上角的“esc键”即可

(2)命令模式与底行模式

1.进入底行模式

要从命令模式进入插入模式,按下键盘上的“shift  ;”组合即可

2.返回命令模式

要从底行模式退回命令模式,按下键盘左上角的“esc键”即可

注意:插入模式和底行模式是无法互相切换的。必须返回命令模式才可以切换为其他模式,关系如上图所示

2.模式区分

要区分不同的模式一般是根据vim的左下角来区分的

(1)命令模式

在进入vim时,我们所处的模式就是命令模式。当我们从其他模式回退到命令模式时,左下角什么都不显示

(2)插入模式

在插入模式下,左下角会显示"INSERT"字样。有这个单词时就说明我们在插入模式

(3)底行模式

 在底行模式中,左下角会显示“:”,表示可以在这里输入命令

三、三种模式的使用

1.命令模式

命令模式就是我们打开vim时所处的模式。简单来讲,命令模式就是以命令的方式操作vim

在命令模式下,我们键盘上输入的部分字符会被认为是命令。输入的其他大部分字符是没有反应的

注意:以下的命令中虽然带有空格,但在使用时不要输入空格,这里带上空格只是为了方便看

(1)光标定位

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”则是向后移动

(2)文本复制黏贴命令

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”就是剪切

(3)文本编辑命令

1.文本大小写转换

如果我们想对某些字符进行字母大小写转换,就可以按下“shift `”组合键,即“~”键。该命令会自动将大写转小写或者小写转大写

2.文本替换

(1)连续替换

如果我们想修改文本中的某些内容又不想整行删除,就可以按下“shift r”组合键,即“R”来进行文本替换。此时我们直接输入想要替换的文本即可完成字符替换,无需删除

其实这个命令是进入了替换模式:

当需要退出该模式时,按下“esc”键即可

(2)单字符替换

如果我们仅仅只是想修改某个字符,并不想进入替换模式,那么按下“r”键即可。此时只会进行一次替换

如果我们想将几个连续字符替换成同一个字符,就可以用“替换字符数 r 替换字符”命令。如“5 r a”

2.插入模式

插入模式,简单来讲就是进入编辑模式。在这个模式下我们可以随意编写文本。就和我们在记事本、word之类的软件下一样。我们写代码时也是在这个模式下写

(1)插入模式的进入

插入模式的进入方法有很多种,最常用的是按“i”键进入。但还有其他几种。这里不一一讲解,只讲最常用的几种方法

1.原地进入插入模式

按下“i”键,就是原地进入插入模式。即光标在哪,就从哪里进入插入模式

2.从下一个字符进入插入模式

按下“a”键,就是从下一个字符进入插入模式。即光标从当前位置向后移动一位,并从移动后的位置进入插入模式

3.从下一行进入插入模式

按下“o”键,就是从下一行进入插入模式。即从光标所在行向下新起一行,并从新起行的头位置进入插入模式

3.底行模式常用命令

进入底行模式后,可以在vim的最下面输入对应的命令来进行操作。可以看做该模式就是一个另类的命令模式。不同于命令模式主要是对文本内容进入其他模式的操作,底行模式更多是对整个程序的操作 

底行模式下,以带了空格的命令都必须输入对应的空格

(1)进入底行模式

底行模式必须从命令模式进入。按下“shift ;”组合键,即“:”即可。

(2)行号

1.调出行号

要调出行号,输入“set nu”命令即可

2.取消行号

 要取消行号显示,输入“set nonu”命令即可

(3)写入及退出

1.保存并退出

在vim中,保存并退出命令是“wq”。如果vim不让你保存并退出,可以使用“wq!”执行强制保存并退出命令

2.保存

如果只想保存不想退出,就使用“w”命令即可。如果在某些情况下,vim不让你保存,使用“w!”命令,可以强制保存

3.退出

如果不想保存只想退出,就使用“q”命令。同样的,如果vim不让你退出,可以使用“q!”执行强制退出命令

(4)分屏及相关操作

1.分屏

在vim中,如果你存在多个文件想要同时浏览并修改,可以执行“vs 文件名”命令。该命令用分屏的方式在同一个界面展示不同文件的内容

注意,如果你使用该命令时指定的是一个不存在的文件,系统就会自动创建一个同名文件

2.屏幕切换

因为我们只有一个光标,所以我们在同一时间只能对一个文件进行操作。如果我们想对分屏模式下的另一个文件做操作,就可以按下“ctrl w w”组合键,即按住“ctrl”后连续按两下“w”键。该命令就会使光标在不同文件之间跳转。

3.文件退出

要退出文件,就在对应的文件下进入底行模式并执行退出命令即可。要注意,光标在哪个文件下就是退出哪个文件

(5)底行模式执行linux命令

在打开vim编写代码时,假如我们不想退出vim执行一些linux下才能执行的命令,如编译代码,查看手册等。这时我们就可以用“!对应命令”的命令。该命令可以在底行模式下执行linux中的命令。如“!gcc test.c”"!man"

注意,在该模式下有些缩写命令,如“ls -l”的缩写“ll”命令就可能无法执行,要输入完整的命令

(6)全局文本替换

如果我们想对某份代码中的某些字符或单词全部替换,就可以执行“%s/文本中的字符/替换字符/g”命令。如“%s/printf/cout/g”就是将文本中的所有printf替换为“cout”

如果不写替换字符,就是删除文本中所有的对应的字符。如“%s/printf//g"就是删除文本中的所有printf

4.vim基本配置

在使用vim时,想必很多人刚刚使用vim时都会感觉vim非常难用。比如在vim中我们没有字符的自动补全没有文本提示符这类在vs系列等编译器中很常见的功能。这是因为此时的vim还没有经过配置,可以看做一个记事本,没有任何多余的功能。而要实现如自动补齐等编译器基本功能,就需要我们自行修改vim的配置文件

注意,vim的配置是按照用户来的,即你的vim配置只能只会影响自己的vim。如你的linux机器下有A和B两个用户,那么A的vim配置只会修改自己账户下的配置,而B的vim配置不会被修改。原因就在于虽然每个用户都是用的同一个vim,但vim使用时的配置文件是不同的

(1)创建vim配置文件

在每个用户的家目录下,都存在一个“.vimrc”文件,这个文件就是打开时使用的配置文件。

 当我们想查看该文件时,会发现没有这个文件。但是没有关系,此时我们可以自行在家目录下创建一个“.vimrc”文件。这样我们就有了对应的“.vimrc”文件

(2)修改配置文件

要修改vim的配置文件,只需使用“vim .vimrc”命令进入vim文件,将对应的指令输入即可。

如此时我们的vim打开后是没有行号的:

那么现在我们进入.vimrc文件,并输入行号的命令“set nu”保存并退出

此时我们再进入vim:

可以看到,此时我们的vim打开后就自动带上行号

所以要配置vim非常简单,就是将你需要        的功能的命令输入“.vimrc”文件即可。简单来讲,vim的基本配置就是修改自己的“.vimrc”文件

(3)vim配置命令

vim如果想配置的很好用,需要非常多的配置命令。如果想要自己配,可以自行在网上搜索vim配置相关的命令。如果不想自己配置,就可以去csdngitee或者github上搜索vim配置文件,直接复制下来即可。这里就不一一讲解。

四、gbd调试

在使用vs等编译器时,我们直接就有图形化界面供我们使用。如果需要调试程序,直接选择调试选项即可。但在linux这种没有图形化界面的系统上,如果我们想进行调试就需要使用对应的命令。

要记住,无论是windows还是linux下的代码调试,其思路都是一样的。当然,使用的操作方式肯定是不一样的。

1.gdb

gdb其实就是linux下的命令行调试器。对于gdb工具,我们不需要用的非常熟练,只需要掌握在使用gdb进行调试的基本命令即可。

一是因为在未来的实际中我们很少会用纯linux环境写程序,多为linux与windows的协同开发。在协同开发的环境下一般是在vscode等编译器上进行调试,很少用到gdb。二则是因为gdb很难用,而且用起来也比较麻烦,调试起来没有windows下那么方便与直观

2.gdb中进行调试的基本命令操作

为了方便测试,在以下的测试中,都是统一使用的以下程序:

 如有改动,会在改动处说明

(1)gdb的安装

如果我们用的linux下没有gdb程序,直接执行“yum install -y gdb”即可。如果是普通账户,在命令前带上“sudo”即可

(2)生成debug版本的程序

在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”

(3)gdb的使用

gdb的使用是非常简单的,直接输入“gdb 程序名”即可:

如果出现以上界面,就说明我们已经进入gdb调试界面了。我们想进行调试时在(gdb)后面输入对应的指令即可

(4)退出gdb

要退出gdb,直接输入“q”即可:

(5)查看程序代码

要查看你的程序的代码,直接输入“l”命令即可。“l”命令的全称是“list”:

要注意的是,“l”命令不是从0行开始显示的,如果想从0行开始显示,就输入“l 0”命令:

如果内容没有显示完,按下"Enter"也就是回车键即可:

(6)添加断点

1.添加断点

在windows中调试时,我们经常会使用断点让程序运行到某个位置就停止。linux也也有对应的功能,直接输入“b 行号”即可,“b”的全称是“break”:

2.查看断点

在vs中,在对应行的左边就有红点来显示断点,但linux下没有。如果想查看断点,则需输入“info b”命令:

 在这里的“What”下面其实就是对应断点所处的函数文件行号

(7)删除断点

如果我们想删除某个断点,则直接输入“d 序列号”即可。这里的序列号是指在“info b”命令显示的内容中的“Num”下的序列,而不是对应断点的行数

 (8)禁用断点

在linux下,断点是可以禁用的。断点是否可用是由“info b”命令下的“Enb”来确认的。“y”就是可用,“n”则是不可用:

如果我们既不想删除某个断点,但又不想让某个断点生效,就可以使用“disable breakpoints 序列号”命令来禁用断点

 (9)开启断点

当我们禁用断点后,如果想重新让该断点生效,使用“enable 序列号”命令即可:

(10)gdb下的程序运行到断点

在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以外的函数

(11)调用堆栈

如果想查看调用堆栈,输入“bt”命令即可:

(12)监控变量

1.临时显示变量

如果我们想查看在某个函数中的特定变量,可以使用“p 变量名”命令:

但是这种方式只能查看变量的临时值,如果我们接着执行程序,想查看这些值就必须重新输入一遍对应命令

(2)跟随显示变量

那我们知道,vs中的监视窗口可以随着代码的执行而改变,无需自己重新输入。在linux下想跟随显示对应变量的变化,就要使用“display 变量名”

(3)取消跟随显示变量

如果我们不想一直显示某个变量的变化,输入“undisplay 序列号”即可取消跟随显示

这里的序列号指的是跟随的变量最前面的序列号码

(13)跳到指定代码行

如果我们在调试代码时觉得调试处已经没问题了,想跳到该函数后面的代码去,就可以输入“until 代码行号”命令:

(14)设置变量值

如果我们在执行程序时,想将某个特定变量的值设置为特定的值,就可以使用“set var 变量=特定值”命令:

(15)显示特定区域的临时变量

 要显示特定区域中存在的临时变量,使用“info locals”命令即可:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/812046
推荐阅读
相关标签
  

闽ICP备14008679号