震惊!教你正确使用vim和gcc!!!

简介: 正常模式插入模式底行模式vim操作:打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。

 image.gif编辑

一、Linux编辑器-vim使用

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。

image.gif编辑

1.1 vim的基本概念

命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

    • 正常/普通/命令模式(Normal mode)

    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

      • 插入模式(Insert mode)

      只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

        • 末行模式(last line mode)

        文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes

        1.2 vim的基本操作

        进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:

         

        $ vim test.c
        不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文
        字。

        image.gif

          • [正常模式]切换至[插入模式]
            • 输入a
            • 输入i
            • 输入o
              • [插入模式]切换至[正常模式]

              目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。

                • [正常模式]切换至[末行模式]
                「shift + ;」, 其实就是输入「:」

                image.gif

                  • 退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
                    • : w (保存当前文件)
                    • : wq (输入「wq」,存盘并退出vim)
                    • : q! (输入q!,不存盘强制退出vim)

                    1.3vim正常模式命令集

                    image.gif编辑

                    image.gif编辑image.gif编辑

                    1.4vim末行模式命令集

                    在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。

                    image.gif编辑

                    image.gif编辑 1.5vim操作总结

                    三种模式:

                      • 正常模式
                      • 插入模式
                      • 底行模式

                      image.gif编辑

                      vim操作:

                      打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。

                      1.6简单vim配置

                      1.6.1自动配置(推荐):

                      GitHub - askunix/VimForCpp: VIM一键配置C/C++开发环境,可自动下载各类插件。

                      curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh &&
                      bash ./install.sh

                      image.gif

                      1.6.2配置文件的位置

                        • 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
                        • 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。
                        • 切换用户成为自己执行su ,进入自己的主工作目录,执行 cd ~
                        • 打开自己目录下的.vimrc文件,执行 vim .vimrc

                        1.6.3常用配置选项,用来测试

                          • 设置语法高亮: syntax on
                          • 显示行号: set nu
                          • 设置缩进的空格数为4: set shiftwidth=4

                          二、Linux编译器-gcc/g++使用

                          2.1背景知识

                          1. 预处理(进行宏替换)
                          2. 编译(生成汇编)
                          3. 汇编(生成机器可识别代码)
                          4. 连接(生成可执行文件或库文件)

                          2.2gcc如何完成

                          格式 gcc [选项] 要编译的文件 [选项] [目标文件]

                          2.3预处理(进行宏替换)

                            • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
                            • 预处理指令是以#号开头的代码行。
                            • 实例: gcc –E hello.c –o hello.i
                            • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
                            • 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

                            2.4编译(生成汇编)

                              • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
                              • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
                              • 实例: gcc –S hello.i –o hello.s

                              2.5汇编(生成机器可识别代码)

                                • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
                                • 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
                                • 实例: gcc –c hello.s –o hello.o

                                2.6链接(生成可执行文件或库文件)

                                  • 在成功编译之后,就进入了链接阶段。
                                  • 实例: gcc hello.o –o hello

                                  image.gif编辑

                                  2.7函数库

                                    • 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
                                    • 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

                                    2.8函数库一般分为静态库和动态库

                                      • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
                                      • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。gcc hello.o –ohello
                                      • gcc默认生成的二进制程序,是动态链接的,这点可以通过file 命令验证。

                                      2.9 gcc选项

                                        • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
                                        • -S 编译到汇编语言不进行汇编和链接
                                        • -c 编译到目标代码
                                        • -o 文件输出到 文件
                                        • -static 此选项对生成的文件采用静态链接
                                        • -g 生成调试信息。GNU 调试器可利用该信息。
                                        • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
                                        • -O0
                                        • -O1
                                        • -O2
                                        • -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
                                        • -w 不生成任何警告信息。
                                        • -Wall 生成所有警告信息。
                                        目录
                                        相关文章
                                        |
                                        3月前
                                        |
                                        存储 Linux 编译器
                                        vim编辑器和gcc/g++编辑器的使用讲解
                                        vim编辑器和gcc/g++编辑器的使用讲解
                                        103 2
                                        |
                                        3月前
                                        |
                                        Linux 编译器 开发工具
                                        Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
                                        Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
                                        161 1
                                        |
                                        3月前
                                        |
                                        NoSQL Linux Shell
                                        Linux下的系统编程——vim/gcc编辑(二)
                                        Linux下的系统编程——vim/gcc编辑(二)
                                        54 0
                                        Linux下的系统编程——vim/gcc编辑(二)
                                        |
                                        3月前
                                        |
                                        Linux 编译器 开发工具
                                        Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)
                                        Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)
                                        |
                                        8月前
                                        |
                                        Linux 编译器 开发工具
                                        Linux---(五)三大工具yum、vim、gcc/g++
                                        Linux---(五)三大工具yum、vim、gcc/g++
                                        94 1
                                        |
                                        10月前
                                        |
                                        Linux 编译器 持续交付
                                        Linux:基础开发工具之yum,vim,gcc的使用
                                        Linux:基础开发工具之yum,vim,gcc的使用
                                        |
                                        3月前
                                        |
                                        小程序 Linux 开发工具
                                        【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
                                        【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
                                        |
                                        IDE Unix Linux
                                        Linux环境基础开发工具使用(yum软件安装工具的使用、vim编辑器使用及握gcc/g++编译器的使用等上)
                                        在之前我配置环境那篇博客我写到的换国内的阿里源,就是指的yum源,如果我们使用默认国外的源,可能会出现连不上,或者网速极慢的情况
                                        |
                                        NoSQL IDE Unix
                                        Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具(2)
                                        Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具(2)
                                        163 0
                                        |
                                        3月前
                                        |
                                        编译器 Linux 开发工具
                                        编辑器vim和编译器gcc/g++
                                        编辑器vim和编译器gcc/g++
                                        71 0