Clojure стандартного REPL с буфером редактирования? - PullRequest
6 голосов
/ 12 января 2012

Я не ищу IDE или встроенный REPL. Я просто хотел спросить, знает ли кто-нибудь, возможно ли иметь редактор буфера в REPL, как известно из 'psql' или некоторых * nix-оболочек.

В psql, например, вы просто вводите "\ e", и вы получаете последнюю команду в вашем редакторе и после выхода из нее она выполняется.

Это было бы замечательно для repl clojure.

$ java -cp jline.jar:clojure-1.3.0.jar jline.ConsoleRunner clojure.main

Итак, есть ли такая функция? Где это должно быть реализовано, в jline?

Решение:

rlwrap делает свое дело.

Мне пришлось скомпилировать readline ftp: //ftp.gnu.org/gnu/readline/, а затем rlwrap http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap.

После этого я мог бы использовать следующий ярлык для запуска редактора.

Ctrl + ^

rlwrap -m -- java -cp clojure-1.3.0.jar clojure.main

Для использования с leiningen на Mac OSX мне пришлось изменить следующее:

lein 1.6.2
*** 226,233 ****
              rlwrap -m -q '"' echo "hi" > /dev/null 2>&1
              if [ $? -eq 0 ]; then
                  RLWRAP="$RLWRAP -r -m -q '\"'"
-             else
-                 RLWRAP="$RLWRAP -m --"
              fi
          fi
      fi
--- 226,231 ----

и экспорт RLWRAP_EDITOR

export RLWRAP_EDITOR="vim +%L"

Ответы [ 2 ]

8 голосов
/ 12 января 2012

rlwrap

Существует несколько способов добиться того, чего вы хотите, но двоичный файл rlwrap делает то, что вам нужно.У меня также были некоторые проблемы с версией jline в Mac OS X, поэтому я перестал ее использовать.

Когда я набираю 'clj' в моем терминале, он действительно выполняет REPL, завернутый в rlwrap, с помощью следующегоbash script в /usr/local/bin/clj:

#!/bin/sh
# Runs clojure.
# With no arguments, runs Clojure's REPL.

CLOJURE=$CLASSPATH:/usr/local/clojure/1.3.0/clojure-1.3.0.jar

rlwrap java -cp $CLOJURE clojure.main "$@"

Поместите скрипт в любое место на вашем пути, чтобы использовать.

Наконец, вам не нужен скрипт, я просто для удобства,Если rlwrap находится в вашей системе, а clj находится на вашем пути, вы можете просто набрать:

rlwrap clj

Дальнейшее чтение из вики-книги Clojure: Расширение REPL Clojure с помощью rlwrap

6 голосов
/ 12 января 2012

Смотрите мои ответы на вопросы Один REPL, чтобы связать их всех? и Как установить Clojure на Ubuntu 10.04 из репозитория Github без clojure.jar .Основные моменты:

  • Не устанавливайте clojure вообще.Установите Leiningen и предоставьте ему возможность управлять версиями clojure, которые у вас есть, а также настройкой правильных путей к классам для repl или другого использования.
  • Если вам нужно запускать clojure вручную, используйте rlwrap или другую программу readline.
...