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