2012-01-20 6 views
10

Мне нравится делать свою разработку Scala в Emacs, и время от времени я использую REPL для тестирования фрагментов кода или загрузки и тестирования кода, который я только что написал. Я использую Scala 2.9.1, и я заметил, что когда я открываю REPL в терминальном буфере, ситуация существенно нарушается. В частности, я не могу удалить символы из текущей строки и не могу переместить курсор назад в текущей строке. Это очень расстраивает, так как когда-либо я что-то ошибаюсь, мне нужно начать команду заново. Мне было интересно, есть ли у кого-нибудь еще эта проблема, используя Scala REPL под Emacs, и если у кого-то есть потенциальное решение.Scala REPL in Emacs

+0

Как вы начинаете REPL в Emacs? – leedm777

+0

Я открываю новый буфер с ansi-term. Затем в этом терминальном буфере я запускаю REPL, вызывая непосредственно «scala» или используя консоль sbt. В любом случае эта проблема возникает. – nomad

+1

Возможно, вам удастся открыть новый буфер с оболочкой и запустить scala или sbt из оболочки. – leedm777

ответ

8

Я нахожу, что rlwrap (обломок readline) хорошо играет с анси-терминами emacs и scala. Просто назовите «rlwrap scala», и у вас будет обычное редактирование строки bash, а также история, работающая исправно. В качестве бонуса ваша история будет охватывать несколько вызовов scala, поэтому вы не потеряете все, что вы набрали после выхода из Scala REPL.

Если rlwrap не работает для вас, просто переключение в линейный режим в ansi-term (Cx Cj по умолчанию) позволит вам использовать редактирование в стиле emacs на линии, но без тонкостей оболочки, таких как история и завершение.

Ensime уже упоминалось, поэтому я просто запомню это как отличный вариант, если вы не против установки.

+0

Спасибо за подсказку. Кажется, это работает очень хорошо для меня. На самом деле мне нравится подход rlwrap к подходу Ensime, потому что он дает мне историю команд. В настоящее время единственным оставшимся ограничением для вызова REPL через Emacs с использованием подхода rlwrap является невозможность использования табуляции. – nomad

+0

Как вы получили завершение табуляции в REPL через emacs? – CodeKingPlusPlus

7

Вы можете установить ENSIME и follow instructions. Я не знаю, как вы ссылаетесь на REPL, но REPL вызывается из ENSIME (он позволяет перемещать курсор назад и удалять символы, которые я проверил).

+2

Спасибо за подсказку. Похоже, что вызов REPL из Ensime разрешает эту проблему, но он вводит несколько других. В частности, REPL, вызванный с помощью Ensime, не имеет истории команд и, похоже, не способен выполнить табуляцию. – nomad

+1

+1 для ENSIME, ENSIME классно –

Смежные вопросы