Editor 板


LINE

建議是寫一個 Makefile,因為當你在 vim :make 的時候, vim 會根據 make 的結果,parse 程式有錯的地方,存入 quicklist, 且會預設直接跳到第一個錯誤點,你就可以馬上修正那個編譯錯誤。 這邊列出常用的、跟 make 有關的幾個指令: :make 在目前路徑下執行 make[1], 並且會根據 make 的結果[2]產生 quicklist。 而編輯位置會自動跳到第一個編譯錯誤的點,方便馬上修改。 敝人用 map <F7> :make<CR> 直接編譯。 且用 map <F5> :make<CR>:!./a.out<CR> 編譯加執行[3]:cn 跳到下一個 quicklist 的位置。 敝人用 map <C-N> :cn<CR> 就可以按住 <C-N> 快速巡覽錯誤。 :cp 跳到前一個 quicklist 的位置。 敝人用 map <C-P> :cp<CR> 配合 <C-N> 跑來跑去 XD :make! 很類似 :make,但是不會自動跳到第一個錯誤點。 :cl 列出所有的編譯錯誤,這些被列出來的是經過過濾的[2], 一般的訊息會被過濾掉,只有編譯錯誤或是警告會被列出。 :cl! 類似 :cl,但是不會過濾編譯的結果, 有的時候你的編譯錯誤發生到好幾層 #include 底下, 你希望可以看到 include 的 back-trace, 這種時候 :cl! 就很好用了。 這樣在 vim 裡面就是「編輯 → <F5>編譯、執行 → 編輯」的快速 loop, 也不用再跳到外面了,基本上在裡面就可以做完大部分的事情, vim 已經提供了編譯程式的良好支援,可以讓人作起事來像是用 IDE 一樣, 唯一缺少的就是 debugger 整合,這部分可以使用 vimgdb/clewn[4]! 透過 vimgdb/clewn 跟 gdb 的整合,就可以在 vim 裡面直接 debug 了。 [1] 其實不一定是執行 make,預設是 make,但是可以設定, 透過 :set makeprg xxx 設定你真正想要呼叫的指令, 比方說我用的 build system 是 scons,我就 :set makeprg scons 前面也有板友分享設定成使用 gcc 編譯目前檔案,當然也是一種用法! 但是你在 vim 裡面一律都是 :make 這樣去執行建置的。 [2] vim 是怎麼判定編譯有沒有錯誤的呢? 他是用一個 regex 去核對編譯器的輸出,如果有符合的話,就會被抓出來, 預設的格式是 gcc 的錯誤訊息,如果你使用別的編譯器, 請使用 :set errorformat 設定你的 regex。 [3] 細心的人可能已經發現「編譯→執行」這中間不一定順利, 因為編譯有可能有錯誤,這個時候,我就不希望 !./a.out 被執行。 所以實際上我不是這樣 map,而是 :map <F5> :call BuildAndRun()<CR>。 BuildAndRun() 是我自己寫的一個函數, 他會先 make,然後檢查 quicklist,如果沒錯,就 !./a.out, 如果有錯,他就停住了。 後來我覺得好像可以用 make && ./a.out 還是啥之類的作掉這件事, 但是我沒試過,有人有心得的話請分享給我知道 XD 收到來信問這個函數要怎麼寫,於是來補充一下... function! HasError(qflist) for i in a:qflist if i.valid == 1 return 1 endif endfor return 0 endfunction function! MakeAndRun() make if HasError( getqflist() ) cl else !a.out endif endfunction map <F5> :call MakeAndRun()<CR> [4] 官方網站 http://clewn.sourceforge.net/ 別人的 blog 教學 http://tinyurl.com/y9p3wwc -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.107.136 ※ 編輯: yoco315 來自: 203.160.254.105 (11/05 14:34)
1F:→ tingyun60426:遞迴跟迴圈不是一樣? 02/07 16:02
2F:→ benqm300:遞迴用的讓人家看得懂的話,程式倒是蠻簡潔有力的 03/25 21:05
3F:→ yoco315:補充一下有人寄信問我的問題 <C-N> 就是 Ctrl + N 的意思 07/14 17:35
4F:→ firejox:map 裡有說明:D 07/14 17:44
5F:→ angleevil:其實我有猜到C就是ctrl.只是我笨笨的用n.才會去發問 07/14 17:46
6F:→ angleevil:sorry 07/14 17:46







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP