摘要:獻(xiàn)給所有曾試圖寫而痛苦掙扎的請(qǐng)不要害怕我也是你們的一員序文章源起于論壇中的一個(gè)問(wèn)題由于回答的有點(diǎn)盡性便轉(zhuǎn)為文章題主應(yīng)該是個(gè)初學(xué)者這里不對(duì)題主報(bào)有任何貶義的情感誰(shuí)都是從初學(xué)過(guò)來(lái)的問(wèn)題主要是如何在中編譯運(yùn)行代碼勾起了我痛苦的回憶便借題發(fā)揮了更何
序獻(xiàn)給所有曾試圖寫Java而痛苦掙扎的Vimers, 請(qǐng)不要害怕, 我也是你們的一員
文章源起于segmentfault論壇中的一個(gè)問(wèn)題, 由于回答的有點(diǎn)盡性, 便轉(zhuǎn)為文章.
題主應(yīng)該是個(gè)Vim初學(xué)者, 這里不對(duì)題主報(bào)有任何貶義的情感, 誰(shuí)都是從初學(xué)過(guò)來(lái)的. 問(wèn)題主要是如何在Vim中編譯運(yùn)行Java代碼, 勾起了我痛苦的回憶, 便借題發(fā)揮了.
更何況, 作為Vim教的一員, 自有維護(hù)我Vim臉面的義務(wù), 最不能忍的便是質(zhì)疑Vim的能力, 如xxx能這樣, Vim能嗎, 在我看來(lái), 欺vim太甚.
雖然下面寫的頭頭是道, 但我其實(shí)也寫不出來(lái), 輕拍 o(>﹏<)o
答案按題主的意思, 應(yīng)該是編輯好代碼后, 按一個(gè)快捷鍵直接自動(dòng)編譯并運(yùn)行.
方案
在vim中, 可通過(guò):!cmd來(lái)執(zhí)行外部命令. 對(duì)應(yīng)于題主寫的單文件:
:!javac % #=> 編譯, % 為正在編輯的文件名 :!java %:r #=> 運(yùn)行, %:r 去掉文件名的后綴
原理如此, 只是接下來(lái)設(shè)定鍵映射. 在.vimrc文件中, 添加以下內(nèi)容
autocmd BufNewFile,BufReadPre *.java nmaprn :!javac % :!java %:r
意為, 新建或讀入.java文件前, 自動(dòng)映射快捷釹
當(dāng)然你也可以設(shè)置成兩個(gè)快捷鍵. 這里并不推薦使用Command快捷鍵, 而是使用Leader. 而事實(shí)上, 終端的vim也不能映射Command, 只有MacVim可以.
進(jìn)階一: 多文件
多文件其實(shí)也沒(méi)什么, 只是在javac時(shí), 換%為*.java, 換%:r為真正的main所在文件名.
進(jìn)階二: 項(xiàng)目
如果你的項(xiàng)目有固定的結(jié)構(gòu), 本質(zhì)上是差不多的.
在編譯時(shí), 可能添加-cp選項(xiàng)指定依賴路徑, 添加-d選項(xiàng)指定輸出路徑. 如要打包為jar, 再加快捷鍵.
你可以在項(xiàng)目根目錄定義一個(gè).project屬性文件, 描述項(xiàng)目結(jié)構(gòu)和依賴, 再用VimL語(yǔ)言或python語(yǔ)言, 讀取屬性文件, 分別編譯再輸出. 至于依賴, 去~/.m2/目錄找, 它們的位置非常有規(guī)律.
現(xiàn)在, 你可以將鍵映射到上述操作了, 不就是快捷鍵嗎, vim多的是. 除了Ctrl/Alt/Shift, 還有每個(gè)字母和數(shù)字, 還有leader加任意長(zhǎng)度字母和數(shù)字, leader不夠了, 還是mapleader前綴. 對(duì)了, 你可能更喜歡F1-F12.
進(jìn)階三: 依賴
OK, 你基本上已經(jīng)重新發(fā)明了maven了, 只是差自動(dòng)下載依賴的功能. 但python的網(wǎng)絡(luò)庫(kù)那么多, 我猜測(cè)mvn的倉(cāng)庫(kù)應(yīng)該是對(duì)外開放的, 只要遵循相關(guān)協(xié)議就能下載. 包與包之前有依賴關(guān)系, 你可以用python再寫個(gè)依賴處理算法.
雖然VimL殘的跟渣一樣, 但我們支持python啊, Ruby啊, Lua啊, 總有一款你喜歡的語(yǔ)言接口. 什么你覺(jué)得運(yùn)行慢, 不要緊, 用C++寫, 做成C/S架構(gòu)的, 你看看YCM人家怎么實(shí)現(xiàn)的, 仿照一個(gè)唄.
終極: 補(bǔ)全
好了, 編譯運(yùn)行打包依賴都解決了, 但也撐死算一個(gè)項(xiàng)目管理插件. 寫Java沒(méi)有補(bǔ)全, 那么多API, 那么長(zhǎng)的方法名, 還有各種樣板寫法和各種奇怪的異常拋出, 手寫Java代碼真是力氣活, 還拼腦容量.
這怎么行, 必須搞個(gè)補(bǔ)全插件. Vim界補(bǔ)全的王者YCM是在Clang橫空出世后, 才搞出來(lái)的. 在這之前, GNU的g++是不會(huì)共享語(yǔ)法分析的數(shù)據(jù)的. 你得自己寫一個(gè)語(yǔ)法分析器, 對(duì), 給C++..., 才能進(jìn)行智能補(bǔ)全.
那么, Java這邊究竟什么情況, 我還真不知道, 但就Java95年就搞出來(lái), vim91年就搞出來(lái)了, 它倆共渡的日子少算也有20年了, 在這期間, 各種Java IDE導(dǎo)出不窮, 但也沒(méi)見(jiàn)誰(shuí)搞出個(gè)屎來(lái).
YCM對(duì)Java提供的補(bǔ)全, 使用eclim, 它和YCM沒(méi)有關(guān)系, YCM只是提供接口, eclim沒(méi)有YCM也能正常工作. eclim插件的使用, 需要安裝eclipse, Java界以緩慢開源著稱的IDE. 也就是說(shuō), eclim在底層使用eclipse來(lái)補(bǔ)全. 如果你不介意超緩慢的啟動(dòng)速度和補(bǔ)全速度, 可以一試.
這簡(jiǎn)直不能忍, 題主橫刀立馬, 開始著手用C++寫個(gè)Java的語(yǔ)法分析器, 做成C/S架構(gòu), 在插件中與服務(wù)器溝通來(lái)補(bǔ)全. 你也可以直接給YCM寫個(gè)Java后端.
據(jù)說(shuō), Java語(yǔ)法規(guī)范頁(yè)數(shù)已經(jīng)超過(guò)C++. 但沒(méi)事, 沒(méi)有困難也要?jiǎng)?chuàng)造困難上, 更何況是有困難呢.
至此, 我已經(jīng)給題主指明了一條通神之路, 翻過(guò)荊棘, 你將一躍成為vim和Java兩界永遠(yuǎn)的大神, 徹底終結(jié)Vim不適合寫Java的詛咒. 兩派子弟必將永久膜拜朝奉.
如果你寫出來(lái)時(shí), Java還活著的話..., JVM平臺(tái)的兄弟語(yǔ)言有點(diǎn)多...
為什么不說(shuō)vim啊, 因?yàn)?b>vim教永生!!!
后記
特此聲明, 本文不包含任何對(duì)題主的調(diào)侃或戲謔或嘲諷或質(zhì)疑什么的, 如讓題主不爽, 我也不會(huì)道歉.
說(shuō)這些, 只是說(shuō), 對(duì)于vim真沒(méi)什么不可能的, 只要你有只夠的技能時(shí)間. 這主要因?yàn)?b>vim只是一個(gè)編輯器, 它把該開放的接口都開放了, 你想干什么, 寫插件就OK了. Vim的中文手冊(cè), 拋開一些更新日志, 至少有1500頁(yè). 即便你看完了, 也不見(jiàn)得會(huì)寫插件, 還要看書. 只就Vim的快捷鍵和操作, 我粗略了記了一下前300頁(yè)的用戶指南, 筆記就記了1000多行, 這還是精簡(jiǎn)到估計(jì)只有我自己能看懂.
通常, 在這個(gè)問(wèn)題上, Vim提供了:make接口來(lái)編譯, 和makeprg來(lái)設(shè)置編譯參數(shù). 但也要承認(rèn), Vim設(shè)計(jì)之初, 大部分的設(shè)計(jì)都是為C這樣的編譯語(yǔ)言做的, 像文本對(duì)象a{是選擇{}中的代碼, 但對(duì)于python來(lái)說(shuō), 塊代碼是同縮進(jìn)的代碼, 沒(méi)有{}, 對(duì)Scala來(lái)說(shuō), 塊只有一條語(yǔ)句時(shí), 可以省略{}.
獻(xiàn)給所有曾試圖寫Java而痛苦掙扎的Vimers, 請(qǐng)不要害怕, 我也是你們的一員
Vim并不完美, 但比絕大多數(shù)Vimer相像的要完美.
我相信, 每個(gè)初學(xué)Vim, 并被Vim的強(qiáng)大折服的人, 都曾試圖豪言, Vim在手, 天下我有. 然后, 在工作中碰到了Java, 陷入裝逼痛苦的泥淖中, 然后, 要么決定找一份別的工作, 要么用上了IDE. 待再次回頭, 便看到了Vim的局限.
看到一個(gè)工具的強(qiáng)大并不是了解, 看到它的局限才是真正的了解.
黃色的樹林里分出兩條路 而我選擇了IDE 你呢
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66022.html
摘要:獻(xiàn)給所有曾試圖寫而痛苦掙扎的請(qǐng)不要害怕我也是你們的一員序文章源起于論壇中的一個(gè)問(wèn)題由于回答的有點(diǎn)盡性便轉(zhuǎn)為文章題主應(yīng)該是個(gè)初學(xué)者這里不對(duì)題主報(bào)有任何貶義的情感誰(shuí)都是從初學(xué)過(guò)來(lái)的問(wèn)題主要是如何在中編譯運(yùn)行代碼勾起了我痛苦的回憶便借題發(fā)揮了更何 獻(xiàn)給所有曾試圖寫Java而痛苦掙扎的Vimers, 請(qǐng)不要害怕, 我也是你們的一員 序 文章源起于segmentfault論壇中的一個(gè)問(wèn)題, 由于...
摘要:學(xué)習(xí)使用就是在命令行中輸入第一步我個(gè)人認(rèn)為是最難的一步。依然很水,不會(huì)的配置上網(wǎng)搜索然后到自己的中。走到進(jìn)階就差不多懂得為何物因?yàn)榭赡苁懿涣俗约褐械淖煮w,配色,以及目錄或者括號(hào)匹配等等問(wèn)題。希望本文對(duì)于想要學(xué)習(xí)的你有所幫助。 本文出自Svitter的blog 原文在之前的也曾發(fā)表 Write with Vim (2) 大約在一年前使用vim?這個(gè)也是個(gè)不確定的時(shí)間。具體什么時(shí)間...
摘要:作為程序員的你,平時(shí)使用哪款代碼編輯器呢作為我們工作效率工具,在這篇文章中老蔣準(zhǔn)備整理個(gè)常用且免費(fèi)的代碼編輯器。老蔣也有在個(gè)人喜歡的輕量級(jí)代碼編輯器介紹到。原本老蔣打算整理款編輯器的,但是一般我們估計(jì)也用不上這么多。我們每個(gè)人心目中肯定有自己認(rèn)為值得擁有的代碼編輯器。作為程序員的你,平時(shí)使用哪款代碼編輯器呢?作為我們工作效率工具,在這篇文章中老蔣準(zhǔn)備整理8個(gè)常用且免費(fèi)的代碼編輯器??纯雌渲杏?..
摘要:原文鏈接適合自己的,才是最好的被稱為編輯器之神,是我用過(guò)之后才體會(huì)到的,用之前實(shí)在不敢對(duì)它做出什么評(píng)價(jià)。最初的不適,換來(lái)的是效率的飛升。感悟在學(xué)習(xí)使用的過(guò)程中,我最大的感悟就是適合自己的,才是最好的。 原文鏈接:Vim - 適合自己的,才是最好的 Vim 被稱為編輯器之神,是我用過(guò)之后才體會(huì)到的,用之前實(shí)在不敢對(duì)它做出什么評(píng)價(jià)。在大學(xué)時(shí)代,Vim 的大名就已如雷貫耳,但由于它陡峭的學(xué)...
摘要:再然后,各種原因,我放棄了,放棄了的東西,哎,重新?lián)炱鹆耍攀钦鎼?ài)啊有空我就折騰一下,什么配色補(bǔ)全快捷鍵之類的,參考了很多人的配置。到目前為止,所有的設(shè)置算是比較滿意的。貼一下我的截圖附上我的配置文件地址使用方法安裝刪除安裝目錄安裝目錄下 大學(xué)里剛學(xué)js那會(huì),在網(wǎng)上找別人的視頻看,發(fā)現(xiàn)別人用的編輯器寫代碼速度那叫一個(gè)飛快,從此開始了解到vim,也開始了我的vim使用之路。 工作后團(tuán)隊(duì)要...
閱讀 1394·2021-10-14 09:43
閱讀 4249·2021-09-27 13:57
閱讀 4577·2021-09-22 15:54
閱讀 2574·2021-09-22 10:54
閱讀 2391·2021-09-22 10:02
閱讀 2126·2021-08-27 13:11
閱讀 880·2019-08-29 18:44
閱讀 1656·2019-08-29 15:20