Как быстро скомпилировать и запустить код scala в vim?

Я использую vim для изучения scala. Я пишу код scala в vim, а затем:

:!scalac xxx.scala
:!scala Xxx

есть ли способ запустить код проще?

7 ответов


Я предлагаю вам попробовать SBT -http://code.google.com/p/simple-build-tool/

вы, вероятно, захотите открыть несколько оболочек, и вам придется прыгать между vim и вашим сеансом SBT, но в целом SBT упрощает разработку Scala до такой степени, что она кажется интерпретируемым языком. Несколько удобных советов SBT:

запустите sbt в оболочке в каталоге проекта, чтобы автоматически создать структуру проекта. Чтобы быстро начать работу, отредактируйте файл в этом проект под названием src / main/scala / MyFile.скала!--3-->

в одной оболочке sbt запустите ~compile для непрерывного обнаружения и компиляции изменений по мере их внесения.

в другой оболочке sbt запустите "консоль". Это дает вам обычный Scala REPL с вашим проектом и его зависимостями уже на пути к классам.

из этой оболочки scala вы можете запустить: load, чтобы загрузить файл Scala и запустить его. Или вы можете просто импортировать и создать экземпляр класса и вызывать функции, определенные в коде на Scala функциональность теста. При внесении изменений в файл: replay в REPL загрузит эти изменения и снова запустит все введенные команды.

Эта настройка отлично подходит для быстрой веб-разработки в сочетании с Scalatra. Из sbt вы можете напрямую развернуть и запустить веб-приложение с помощью "jetty-run", а затем автоматически обнаруживать, перекомпилировать и развертывать изменения с помощью ~prepare-webapp. Затем вы просто держите браузер открытым и видите изменения по мере их внесения. Хорошее начало руководство для этого здесь: http://blog.everythings-beta.com/?p=430 Вы можете иметь веб-приложение работает в течение 5 минут или около того.


Я бы предложил вам использовать sbt для запуска вещей в одной оболочке и изменения файла scala в vim. Вам нужно указать метод mainClass в файле проекта. Подробности здесь.

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

при сохранении файла scala в сеансе vim sbt попытается вызвать ваш mainClass.


вы, вероятно, лучше использовать диспетчер сборки. Однако есть случаи, когда это полезно, особенно если вы просто хотите запустить один файл с интерпретатором scala. In vim,% соответствует текущему файлу. Если вы хотите запустить файл с помощью текущего файла в интерпретаторе Scala, вы можете запустить:

:!scala %

если бы вы собирались делать это много, вы могли бы рассмотреть возможность сопоставления команды с этим.

map <F5> :!scala %<CR>

если ты хотел этой привязки доступно только в файлах scala, попробуйте следующее. Это может потребовать от вас иметь синтаксические файлы scala vim.

au FileType scala map <F5> :!scala %

аналогично, для компиляции файлов вы можете запустить следующее.

:!scalac %

если вы хотите запустить скомпилированный класс, это сложнее, потому что нужно знать на пути к классу. %:r может быть началом-это текущий файл минус расширение.

более продвинутым решением, чем выше, было бы использование scala интерпретатор / компилятор как система сборки для vim с использованием :make. Таким образом, вы можете перемещаться по ошибкам в vim, используя quickfix. Вы найдете пару файлов компилятора я написал полезно. Вы можете скопировать их в ~/.vim/compiler/ а затем установите компилятор с vim (:compiler scalai).

вы можете найти мой пост в блоге полезно, поскольку он охватывает разработку в scala с использованием vim. Он охватывает хороший способ объединения scala с непрерывным компиляция в диспетчере сборки.


карты полезны здесь. Я ничего не знаю о Scala, но, например, команда

: nmap :!Эхо-тест

вызовет команду оболочки echo test всякий раз, когда вы нажмете F6 в обычном режиме

Я уверен, что вы можете адаптировать его к вашим потребностям. Ставить.vimrc, если вы хотите, чтобы он был постоянным (что вы, вероятно, делаете). Более подробную информацию можно найти здесь, Если вы в целом редактор сценариев, что: http://www.ibm.com/developerworks/linux/library/l-vim-script-1/index.html

P. S. забыла упомянуть о том, что % символ расширяется до текущего файла в командную строку. Вы, вероятно, хотите что-то вроде :! 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° Чисто и просто.


вы можете сократить его до одной строки, написав сценарий?

таким образом, в том же каталоге вы можете сделать что-то вроде

scalac xxx.scala scala xxx

и их из Vim ты

:!./ scriptName

обязательно сделайте его исполняемым сначала с помощью chmod


установки SBT как уже предлагалось, рассмотрим это из сеанса редактора Vim,

:!sbt run

кроме того, для компиляции или упаковке

:!sbt compile
:!sbt package