我正在使用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中输入:replay将重新加载这些更改并重新运行所有输入的命令。
这种设置在与Scalatra一起进行快速Web开发方面非常出色。通过sbt,您可以直接使用“jetty-run”部署和运行您的webapp,然后使用~prepare-webapp自动检测、重新编译和部署更改。然后,您只需保持浏览器打开,并在进行更改时查看更改。这里有一个不错的入门指南:http://blog.everythings-beta.com/?p=430,您可以在大约5分钟内运行Web应用程序。
$ 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
可能是一个起点--它是当前文件名减去扩展名。:make
。这样你可以通过快速修复功能在vim中导航错误。你会发现我写的一些编译器文件很有帮助。你可以将其复制到~/.vim/compiler/
中,然后在vim中设置编译器(:compiler scalai
)。地图在这里很有帮助。 我对scala一无所知,但例如命令
:nmap <F6> :!echo test<CR>
每当您在正常模式下按下F6时,将调用shell命令echo test
我相信您可以根据自己的需求进行调整。 如果您希望它是永久性的,请放入.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>
我自己从来没有离开过make
,所以我可以用:make °target°
编译程序。简单明了。
你可以通过编写脚本将其缩短为一行代码?
因此,在相同的目录下,你可以执行以下操作:
scalac xxx.scala scala xxx
然后在vim中执行:
:!./scriptName
请确保先使用 chmod 命令将其变为可执行文件
F6
,当前文件的代码被编译并运行。无论文件名是什么。 - Freewind
:make
命令集成时,这会更容易且更强大-请参阅我的帖子。 - schmmd