vim-ide,
用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返回
四.樣本
注意:比如括弧這種成對的,成對的打出,按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
安裝的程式:addr2line, ar, as, c++filt, elfedit, gprof, ld, ld.bfd, nm, objcopy, objdump, ranlib, readelf, size, strings, 和 strip
安裝的庫:libbfd.{a,so} 和 libopcodes.{a,so}
安裝目錄:/usr/lib/ldscripts簡要介紹
addr2line |
轉換程式地址為檔案名稱和行號;給定一個地址和可執行檔的名稱,它使用可執行檔中的調試資訊來判斷與該地址關聯的源檔案以及行號。 |
ar |
建立、更改以及抽取歸檔檔案。 |
as |
一個將 gcc 的輸出彙編到目標檔案的彙編器。 |
c++filt |
連結器用來過濾 C++ 和 Java 符號以及防止重載函數衝突。 |
elfedit |
更新 ELF 檔案的 ELF 檔案頭 |
gprof |
顯示呼叫歷程圖配置資料 |
ld |
一個將多個目標檔案和歸檔檔案合并為單一檔案,重定位元據及綁定符號引用的連結器。 |
ld.bfd |
到 ld 的永久連結。 |
nm |
列出指定目標檔案中出現的符號 |
objcopy |
轉換某種類型的目標檔案到另一種類型 |
objdump |
顯示給定目標檔案的資訊,用選項可以控制顯示特定資訊;顯示的資訊對於使用編譯工具的程式員非常有用。有機器碼,彙編碼,還有c碼 objdump -dSsx a.out >file |
ranlib |
產生歸檔檔案內容的索引並儲存到歸檔檔案;索引列出了所有歸檔檔案成員——可重定位的目標檔案定義的符號。 |
readelf |
顯示 ELF 類型的二進位檔案的資訊 |
size |
列出所給目標檔案各部分大小和總的大小 |
strings |
對每個給定檔案,輸出不低於指定長度(預設是4)的可列印字元序列;對於目標檔案,它預設只列印初始化和引導部分的字串,而對於其它類型的檔案掃描整個檔案。 |
strip |
從目標檔案中去除符號 |
libbfd
|
二進位檔案描述庫 |
libopcodes
|
用於處理作業碼—處理器指令的“可讀文本”版本 的庫;用於構建類似 objdump 的工具 |