Как быстро скомпилировать и запустить scala-код в vim? - PullRequest
9 голосов
/ 19 декабря 2010

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

:!scalac xxx.scala
:!scala Xxx

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

Ответы [ 7 ]

31 голосов
/ 19 декабря 2010

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

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

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

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

В другой оболочке sbt запустите 'console'.Это дает вам обычный Scala REPL с вашим проектом и его зависимостями, уже имеющимися в CLASSPATH.

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

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

8 голосов
/ 19 декабря 2010

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

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

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

7 голосов
/ 27 октября 2011

Возможно, вам лучше использовать менеджер сборки.Однако в некоторых случаях это полезно, особенно если вы просто хотите запустить один файл с интерпретатором scala.В 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 с непрерывной компиляцией в менеджере сборки.

3 голосов
/ 19 декабря 2010

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

: nmap :! Echo test

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

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

P.S. Забыл упомянуть, что символ % расширяется до текущего файла в команде оболочки. Вы, вероятно, хотите что-то вроде :! scala %<CR>


EDIT

Это более сложная проблема, чем я думал на первый взгляд (я привык работать с интерпретированными языками, где 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>
1 голос
/ 19 декабря 2010

Я сам никогда не отходил от make, поэтому могу скомпилировать программу с помощью :make °target° Чисто и просто.

0 голосов
/ 08 июня 2015

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

:!sbt run

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

:!sbt compile
:!sbt package
0 голосов
/ 19 декабря 2010

Вы могли бы сократить его до одной строки, написав скрипт?

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

scalac xxx.scala scala xxx

а их из vim вы делаете

: ./ SCRIPTNAME

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...