如何在vim中快速编译和运行scala代码?

时间:2010-12-19 15:28:06

标签: vim scala

我正在使用vim来学习scala。我在vim中写了一些scala代码,然后:

:!scalac xxx.scala
:!scala Xxx

有没有办法让代码更容易运行?

7 个答案:

答案 0 :(得分:31)

我建议您尝试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中的replay将加载这些更改并再次运行所有输入的命令。

此设置适用于与Scalatra一起进行快速Web开发。从sbt开始,您可以使用'jetty-run'直接部署和运行您的webapp,然后使用~prepare-webapp自动检测,重新编译和部署更改。然后,您只需打开浏览器并查看更改即可。这里有一个很好的入门指南:http://blog.everythings-beta.com/?p=430您可以在5分钟左右的时间内运行一个Web应用程序。

答案 1 :(得分:8)

我建议你使用sbt在一个shell中运行东西。在vim中修改scala文件。 您需要在项目文件中指定mainClass方法。详情here

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

当您在vim会话中保存scala文件时,sbt将尝试调用您的mainClass。

答案 2 :(得分:7)

您可能更擅长使用构建管理器。但是,有些情况下这很有用,特别是如果您只想使用scala解释器运行单个文件。在vim中,%匹配当前文件。如果要使用Scala解释器中的当前文件运行文件,可以运行:

:!scala %

如果您打算这么做,可以考虑将命令映射到此。

map <F5> :!scala %<CR>

如果您希望此绑定仅在scala文件中可用,请尝试以下操作。这可能需要您拥有scala vim syntax files

au FileType scala map <F5> :!scala %

同样,要编译文件,您可以运行以下命令。

:!scalac %

如果要运行已编译的类,则更难,因为您需要知道类路径。 %:r可能是一个开头 - 它是当前文件减去扩展名。

比上面更高级的解决方案是使用scala解释器/编译器作为使用:make的vim的构建系统。这样您就可以使用quickfix在vim中导航错误。你会找到一个couple of compiler files I wrote helpful。您可以将这些复制到~/.vim/compiler/,然后使用vim(:compiler scalai)设置编译器。

您可能会发现a blog post of mine很有用,因为它涵盖了使用vim在scala中进行开发。它涵盖了在构建管理器中将scala与连续编译相结合的好方法。

答案 3 :(得分:3)

地图在这里很有帮助。我对scala一无所知,但是命令

  

:nmap&lt; F6&gt; :!echo test&lt; CR&gt;

在正常模式下按F6时,将调用shell命令echo test

我相信你可以根据自己的需要调整它。如果你想要它永久存在(你可能会这样做),请输入.vimrc。如果您正在编写整个编辑器脚本,可以在此处找到更多信息:http://www.ibm.com/developerworks/linux/library/l-vim-script-1/index.html

P.S。忘了提到%字符在shell命令中扩展为当前文件。你可能想要:! 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>

答案 4 :(得分:1)

我自己从未离开make,所以我可以使用:make °target°编译程序 干净简单。

答案 5 :(得分:0)

您可以通过编写脚本将其缩短为一行吗?

所以在同一目录中,您可以执行类似

的操作

scalac xxx.scala scala xxx

他们来自你做的vim

:./ SCRIPTNAME

确保首先使用chmod

使其可执行

答案 6 :(得分:0)

已经按照建议安装了SBT,请在Vim编辑器会话中考虑这一点,

:!sbt run

此外,对于编译或打包,

:!sbt compile
:!sbt package