Linux 下vim/gcc/gdb使用

1.编辑器的使用

1.1 vim编辑器

github vim配置

vi/vim 是 linux 下的通用文件编辑器,没有菜单,具有平台通用性,也可以在 windows 下面运行。

vim 具有四种模式:命令模式、插入模式、底行模式、可视模式。

  • 命令模式:也称为普通模式,该模式下主要执行 vim 命令操作,可以移动光标进行浏览,整行删除,但无法编辑文字。刚打开 vim 时默认处于此模式,无论处于什么模式,按下 ESC 键进入此模式。
  • 插入模式:正常的文本编写模式,在命令模式下按下命令快捷键可进入此模式。i、I、a、A、o、O。
  • 底行模式:该模式下,光标位于屏幕底行,我们输入的内容都会出现在最低行。在命令模式下,按冒号(:)进入底行模式。
  • 可视模式:对文本进行选择操作。在命令模式下按 v,可进入可视模式。

vim模式切换

1.2 vim编辑器使用

用 vim 打开一个叫 file1.txt 的文件:执行 vim file1.txt

打开并跳到某一行:vim file1.txt +行号

常用操作(带:表示是底行模式的操作命令;不带:表示命令模式),区分大小写:

文件保存命令------带冒号说明是底行模式下的命令
:w      保存文件
:w file1 另存为 file1
:wq     保存退出 vim
:q      退出 vim(未保存提示不成功)
:q!     强制退出(不保存不提示)
:x      同:wq

光标移动

  1. 方向键操作
  2. 命令模式下,h 表示向左移动光标,j 向下移动光标,k 向上移动光标,l 向右移动光标
  3. 安装了插件之后也可以使用鼠标操作

进入插入模式命令

  • i 进入插入模式,在光标所在位置之前插入内容
  • I 进入插入模式,在光标所在行行首插入内容
  • o 在光标所在行下面新建一行,进入插入模式
  • O 在光标所在行上面新建一行,进入插入模式
  • a 进入插入模式,在光标所在位置之后开始插入内容
  • A 进入插入模式,在光标行行尾开始插入内容

复制粘贴命令(命令模式下):

  • nyy 表示复制光标所在行开始的 n 行内容,省略 n 表示复制光标所在行
  • np 粘贴,n 表示粘贴的次数,可以省略,表示一次
  • nP 粘贴到光标所在行上面
  • y 复制选中的内容
  • “y 复制选中内容,与 y 不同的是可以粘贴到另一个文件中
  • “p 粘贴”y复制到的内容

文本选择:可视模式就是专门来选择文本的,进行插入模式移动光标就可以来选择文本

文本删除命令

  1. d0 删至行首
  2. d$ 或者 D 删至行尾
  3. x 删除光标后的一个字符
  4. X 删除光标前的一个字符
  5. ndd 删除当前行及其后 n-1 行,省略 n 表示删除光标所在行
  6. 最后一次删除掉的内容,执行 p 可粘贴内容
  7. dw 删除至当前单词结尾

文本替换修改命令:移动光标到要修改的字符处,按 r 再按要修改为的字符,即可进行单个字符的替换

1.3 vim编辑器增强版配置

可以参考系统编程书 vim 配置,或者将文档资料里面的压缩包解压到当前用户的家目录。

1.4 图形化编辑器

Linux 下的图形化编辑工具 gedit、kedit。基本配置使用(修改字体大小、tab跳格)。快捷键操作:ctrl+s 保存,ctrl+q 退出。

2.编译器的使用

2.1 gcc编译器介绍

GCC(GNU Compiler Collection,GNU编译器套件),是由GNU开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。

GCC原名为GNU C语言编译器,因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件。

2.2 gcc的使用

  1. gcc 源文件 生成可执行文件 a.out(如果没有指定生成文件名,默认a.out)
  2. 指定生成文件名:gcc -o 生成文件名 源文件
  3. gcc展现程序编译过程:
gcc -E 源.c -o 源.i
gcc -S 源.i -o 源.s
gcc -c 源.s -o 源.o
gcc 源.o -o 可执行程序

2.3 库文件

为了提高程序的编写效率以及模块化编程的思想,我们可以把相应的函数打包成库文件使用。Linux下的库文件分为静态库和动态库文件:

  • lib*.a 静态库 在编译的时候就链接进执行文件
  • lib*.so 动态库 在编译的时候只是调用,在执行生成文件的时候再链接库

2.4 静态库

fun.c main.c,将文件编译生成二进制文件:

gcc -c fun.c
ar -rc libfun.a fun.o        # 将二进制文件打包生成静态库文件
gcc main.c libfun.a -o main  # 利用库编译文件

静态库把库文件和源文件打包生成一个可执行程序。这样导致可执行程序过大。

2.5 动态库

动态库 —— .so 文件:

gcc -c fun.c                          # 生成二进制文件
gcc -fpic -shared fun.o -o libfun.so  # 生成动态库文件
gcc main.c libfun.so -o main
ldd main                              # 发现找不到动态库文件
cp libfun.so /lib

3.gdb调试工具

3.1 gdb介绍

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓”寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

  1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
  2. 可让被调试的程序在你所指定的设置的断点处停住。(断点可以是条件表达式)
  3. 当程序被停住时,可以检查此时你的程序中所发生的事。
  4. 动态的改变你程序的执行环境。

3.2 gdb使用

源程序main.c:

#include <stdio.h>
int main()
{
    int i = 1;
    printf("I am main!!!1\n");
    i = 2;
    printf("I am main!!!2\n");
    i = 4;
    printf("I am main!!!3\n");
    i = 6;
    printf("I am main!!!4\n");
    return 0;
}
  1. gcc main.c -g //编译 main.c 生成可以调试的可执行程序 a.out
  2. gdb a.out
    • l 显示全部代码
    • b n 在第 n 行设置断点
    • r 运行
    • p i 打印变量 i 的值
    • c 运行到最后
    • q 退出

Updated: