用vim打造适合自己的编辑器
一、vimrc是vim的配置文件,可以修改两个位置
1.etc/vim/vimrc //一般配置文件都带有rc的后缀
2.~/.vimrc //在用户目录下存在的,/home/用户名
~/.vimrc优先级高
进入etc/vim/vimrc
vimrc配置 http://www.cnblogs.com/wangj08/archive/2013/03/13/2957309.html
二、vim --v 查看自己的vim版本并下载相应的vim-ide的软件包
1.tar zxvf vim-ide.tar.gz -C ~/ //解压;
2.解包到当前用户目录下,得到.vim隐藏文件
3.将里边的vimrc拷贝到用户当前的配置文件中
ln -s .vim/vimrc .vimrc
4.拷贝出.vim/.ycm_extra_conf.py到用户目录
cp ~/.vim/.ycm_extra_conf.py~/
//注意:tags文件记录每个函数装在什么位置
三、vim-ide的快捷方式
,dd 在函数开头生成函数说明
,da 在文件开头生成文件说明
,dl 生成采用发布协议
,jd 跳转到函数定义或头文件所在地
,f 在头文件和源文件之间跳转,创建对应名字的头文件
,ta 打开函数列表,在右侧
,o 关闭多窗台,只保存当前窗口
,bf 显示已经打开的文件列表
,nn打开或关闭文件列表
,nl 取消搜索后的高亮显示
backspace 关闭tab buffer
,tab 在tab标签移动
C-t 创建新标签tab
:ta fun 跳到指定函数定义
V 选中函数
,zc折叠当前函数
,zr打开当前函数
,8在当前目录下生成tags文件
C-] 跳转到函数定义,利用Ctags
C-o返回
四.示例
int main(void) { printf("helloworld ") while(1) { if(5>3) printf("aaaaaa "); else printf("bbbbbb "); } return 0; }
注意:比如括号这种成对的,成对的打出,按esc键,再进入插入模式进行插入操作。
编辑好后运行程序
gcc test.c -o test;
五.gcc
GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Compiler Collection 也即是 GNU 编译器家族的意思了。另一方面,说到 GCC 对于操作系统平台及硬件平台支持,概括起来就是一句话:无所不在。
gcc test.c -o test
实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和链接(Linking)。
gcc选项概述
man gcc 查看更多选项信息
gcc [options] [filename]
-x language
-c 只对文件进行编译和汇编,不链接
-S 只对文件进行编译,不汇编和链接
-E 只对文件进行预处理
-o [file] file2
-lname (小写L)用来指定所使用的库文件 例:-lm 使用libm.a (m就是库的名称)
-Idirname 将dirname所指出的目录加入到程序头文件目录列表中
例:gcc foo.c -I /home/include -o foo
-Ldirname 将dirname所指出的目录加到库文件的目录列表中。
例:gcc foo.c -L /home/lib -lfoo -o foo
-static 静态链接(将库的内容加入程序中,形成完整的可执行程序)
-w 禁止生成警告信息
-Wall 显示附加的警告信息
-Dmacro 定义MACRO宏,等效于在程序中使用#define MACRO
例:gcc -DDEBUG hello.c -o hello
gcc -DNUM=2 hello.c -o hello
-pedantic 严格要求符合ANSI标准
-g 添加调试信息
-p 产生prof所需的信息
-pg 产生gpof所使用的信息
-O(-O1) 对编译出的代码进行优化
-O2 进行比-O高一级的优化
-O3 产生更高级别的优化
-v 查看gcc版本信息
-m*** 根据不同的微处理器进行优化
-I 指定头文件目录,注意-I和之前没有空格,<>和“”
-g 包好调试信息,可以用哪个gdb list 单步调试
-On n=0~3 编译优化,n越大优化越好
-Wall 提示更多警告信息
-D编译时定义宏,注意-D和之间没有空格(可以用来在编译阶段指定一个宏,再程序里用)
-E生成预处理文件
-M生成.c文件与头文件依赖关系以用于Makefile,包含系统库的头文件
-MM生成.c文件与头文件依赖关系以用于Makefile,不包括系统库的头文件
六.toolchain
binutils一组用于编译、链接、汇编和其他调试目的的程序,包括ar,as,ld,nm,objcopy,objdump等
https://linux.cn/lfs/LFS-BOOK-7.7-systemd/chapter06/binutils.html
简要介绍
转换程序地址为文件名称和行号;给定一个地址和可执行文件的名称,它使用可执行文件中的调试信息来判断与该地址关联的源文件以及行号。 |
|
创建、更改以及抽取归档文件。 |
|
一个将 gcc 的输出汇编到目标文件的汇编器。 |
|
链接器用来过滤 C++ 和 Java 符号以及防止重载函数冲突。 |
|
更新 ELF 文件的 ELF 文件头 |
|
显示调用关系图配置数据 |
|
一个将多个目标文件和归档文件合并为单一文件,重定位数据及绑定符号引用的链接器。 |
|
到 ld 的硬链接。 |
|
列出指定目标文件中出现的符号 |
|
转换某种类型的目标文件到另一种类型 |
|
显示给定目标文件的信息,用选项可以控制显示特定信息;显示的信息对于使用编译工具的程序员非常有用。有机器码,汇编码,还有c码 objdump -dSsx a.out >file |
|
生成归档文件内容的索引并保存到归档文件;索引列出了所有归档文件成员——可重定位的目标文件定义的符号。 |
|
显示 ELF 类型的二进制文件的信息 |
|
列出所给目标文件各部分大小和总的大小 |
|
对每个给定文件,输出不低于指定长度(默认是4)的可打印字符序列;对于目标文件,它默认只打印初始化和引导部分的字符串,而对于其它类型的文件扫描整个文件。 |
|
从目标文件中去除符号 |
|
二进制文件描述库 |
|
用于处理操作码—处理器指令的“可读文本”版本 的库;用于构建类似 objdump 的工具 |