我正在使用vim来学习scala。我在vim中写了一些scala代码,然后:
:!scalac xxx.scala
:!scala Xxx
有没有办法让代码更容易运行?
答案 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)