簡體   English   中英

如何在vim中快速編譯和運行scala代碼?

[英]How to compile and run scala code quickly in vim?

我正在使用vim來學習scala。 我在vim中編寫了一些scala代碼,然后:

:!scalac xxx.scala
:!scala Xxx

有沒有辦法讓代碼更容易運行?

我建議你試試SBT - http://code.google.com/p/simple-build-tool/

您可能希望打開一些shell,並且您必須在vim和SBT會話之間進行反彈,但通常SBT會將Scala開發簡化為感覺像解釋語言的點。 一些方便的SBT提示:

在項目目錄中的shell上運行sbt以自動創建項目結構。 要快速入門,請編輯名為src / main / scala / MyFile.scala的項目中的文件

在一個sbt shell中,運行~compile以在進行更改時不斷檢測和編譯更改。

在另一個sbt shell中,運行'console'。 這為您提供了一個正常的Scala REPL,您的項目及其依賴項已經存在於CLASSPATH中。

從那個scala shell中你可以運行:load來加載你的Scala文件並運行它。 或者,您可以簡單地導入和實例化類和調用Scala代碼中定義的函數來測試功能。 當您對文件進行更改時,REPL中的重播將加載這些更改並再次運行所有輸入的命令。

此設置非常適合與Scalatra一起進行快速Web開發。 從sbt開始,您可以使用'jetty-run'直接部署和運行您的webapp,然后使用~prepare-webapp自動檢測,重新編譯和部署更改。 然后,您只需打開瀏覽器並查看更改即可。 這里有一個很好的入門指南: http//blog.everythings-beta.com/?p = 430您可以在5分鍾左右的時間內運行一個Web應用程序。

我建議您使用sbt在一個shell中運行並修改vim中的scala文件。 您需要在項目文件中指定mainClass方法。 細節在這里

$ sbt
> ~ run
1. Waiting for source changes... (press enter to interrupt)

在vim會話中保存scala文件時,sbt將嘗試調用mainClass。

您可能更擅長使用構建管理器。 但是,有些情況下這很有用,特別是如果您只想使用scala解釋器運行單個文件。 在vim中, %匹配當前文件。 如果要使用Scala解釋器中的當前文件運行文件,可以運行:

:!scala %

如果您打算這么做,可以考慮將命令映射到此。

map <F5> :!scala %<CR>

如果您希望此綁定僅在scala文件中可用,請嘗試以下操作。 這可能需要您擁有scala vim語法文件

au FileType scala map <F5> :!scala %

同樣,要編譯文件,您可以運行以下命令。

:!scalac %

如果要運行已編譯的類,則更難,因為您需要知道類路徑。 %:r可能是一個開頭 - 它是當前文件減去擴展名。

比上面更高級的解決方案是使用scala解釋器/編譯器作為vim的構建系統使用:make 這樣,您可以使用quickfix在vim中導航錯誤。 你會發現我寫幾個編譯器文件很有幫助 您可以將這些復制到~/.vim/compiler/ ,然后使用vim( :compiler scalai )設置編譯:compiler scalai

您可能會發現我的博客文章很有用,因為它涵蓋了使用vim在scala中進行開發。 它涵蓋了在構建管理器中將scala與連續編譯相結合的好方法。

地圖在這里很有幫助。 我對scala一無所知,但是例如命令

:nmap <F6>:!echo test <CR>

無論何時在正常模式下按F6,都會調用shell命令echo test

我相信你可以根據自己的需要進行調整。 如果你想要它永久存在(你可能會這樣做),請輸入.vimrc。 如果您正在編寫整個編輯器腳本,可以在此處找到更多信息: http//www.ibm.com/developerworks/linux/library/l-vim-script-1/index.html

PS忘了提到%字符擴展到shell命令中的當前文件。 你可能想要這樣的東西:! scala %<CR> :! scala %<CR>


編輯

這是一個比我初看起來更復雜的問題(我習慣使用解釋語言,其中compile-run是單個命令)。 無論如何,如果你真的還想要單鍵編譯和運行功能,試試這個快速腳本(將它粘貼在你的.vimrc文件中並重新啟動vim):

function! CompileAndRunScala()
    w "save current file
    let l:compiler_output = system('scalac ' . expand('%:p'))
    " Runs scalac on current filename (absolute path)
    if v:shell_error "Gets last shell error code (0 means okay, anything else is error)
        echo 'Compile errors!'
        echo l:compiler_output
    else
        echo system('scala ' . expand('%:r'))
        " Runs scala on current file name with extension stripped (also absolute path)
    endif
endfunction
nmap <F6> :call CompileAndRunScala()<CR>

我自己從來沒有離開過make所以我可以編譯程序:make °target°干凈簡單。

已經按照建議安裝了SBT ,請在Vim編輯器會話中考慮這一點,

:!sbt run

此外,對於編譯或包裝,

:!sbt compile
:!sbt package

您可以通過編寫腳本將其縮短為一行嗎?

所以在同一個目錄中,你可以做類似的事情

scalac xxx.scala scala xxx

他們來自vim你做的

:./腳本名

確保首先使用chmod使其可執行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM