2010-12-19 151 views

回答

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外壳,运行 '控制台'。这为您提供了正常的Scala REPL,并且您的项目及其依赖项已经位于CLASSPATH上。

从这个阶外壳可以运行:负荷加载您的斯卡拉文件并运行它。或者您可以简单地导入和实例化类,并调用Scala代码中定义的函数来测试功能。在对文件进行更改时,:REPL中的重放将加载这些更改并再次运行所有输入的命令。

这种设置的伟大工程与Scalatra的结合快速的Web开发。从sbt开始,您可以直接使用'jetty-run'部署和运行webapp,然后使用〜prepare-webapp自动检测,重新编译和部署更改。然后,您只需让浏览器保持打开状态并在制作时看到更改。一个很好的入门指南在这里:http://blog.everythings-beta.com/?p=430您可以在5分钟左右运行一个Web应用程序。

+0

谢谢。SBT听起来真棒:) – Freewind 2010-12-25 05:38:20

+1

+1对于console :-) – 2013-03-09 15:47:35

0

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

所以在同一个目录,你可以不喜欢

scalac xxx.scala 斯卡拉XXX

和他们VIM你做

:./脚本名称

制作一定要使它可执行第一次与chmod

+0

我希望它可以更容易,例如我按'F6',当前文件的代码正在编译并运行。不管文件名是什么。 – Freewind 2010-12-19 15:38:36

+1

我一直认为这是IDE的用途。我确定你可以找到一个IDE并配置“编译和运行”按钮来启动scalac和scala。 – Realn0whereman 2010-12-19 15:43:32

+0

Eclipse有一个scala插件,但是它太慢了。但是如果我使用Eclipse运行没有scala插件的scala,那让我感觉很奇怪:( – Freewind 2010-12-25 05:42:10

8

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

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

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

3

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

:NMAP < F6>:echo测试< CR>

将调用shell命令echo test每当你在正常模式下打到F6

我相信你能适应它符合你的需求。放入.vimrc如果你想永久(你可能会这样做)。更多信息可以在这里找到,如果你是整个编辑器脚本的东西:http://www.ibm.com/developerworks/linux/library/l-vim-script-1/index.html

P.S.忘了提及%字符扩展到shell命令中的当前文件。你可能想是这样:! scala %<CR>


编辑

这是比我想象的第一眼(我已经习惯了有解释性语言,在编译运行的工作更复杂的问题单个命令)。无论如何,如果你真的还需要一个键编译和运行功能,试试这个快速脚本(地方把它贴在你的.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> 
+0

非常感谢你! – Freewind 2010-12-25 05:39:57

+0

@Freewind,在与vim的':make'命令集成时,它更容易和更强大 - 请参阅我的 – schmmd 2011-10-27 22:06:26

1

我自己从来没有离开过make,所以我可以编译程序:make °target° 干净,简单。

7

您可能更适合使用构建管理器。但是,有些情况下这很有用,特别是如果你只是想用scala解释器运行一个文件。在vim中,01​​与当前文件匹配。如果你想运行你的文件使用Scala的解释当前的文件,你可以运行:

:!scala % 

如果你打算做这个有很多,你可以考虑映射命令这一点。

map <F5> :!scala %<CR> 

如果你想这种结合是只在斯卡拉的文件,请尝试以下。这可能需要你有scala vim syntax files

​​

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

:!scalac % 

如果你想运行你编译的类,这很困难,因为你需要知道类路径。 %:r可能是一个开始 - 它是当前文件减去扩展名。

比上述

的更先进的解决方案将是使用阶解释/编译器如使用:make为VIM构建系统。这样,您可以使用quickfix浏览vim中的错误。你会发现一个couple of compiler files I wrote helpful。您可以将它们复制到~/.vim/compiler/,然后使用vim设置编译器(:compiler scalai)。

您可能会发现a blog post of mine有用,因为它涵盖了使用vim在斯卡拉发展。它涵盖了在构建管理器中将scala与持续编译相结合的一种好方法。

0

已经安装SBT作为已经建议,从Vim编辑器会话中考虑这一点,

:!sbt run 

此外,编译或包装,

:!sbt compile 
:!sbt package 
相关问题