Search code examples
scalaread-eval-print-loop

Execute a line of history in scala REPL


The

:history

and

:h?

e.g. view and search the REPL history:

scala> :h? req

19 :require /git/BIDMach/BIDMach.jar
20 :require /git/BIDMat/BIDMat.jar
21 :require /git/BIDMach_Spark/BIDMach_Spark.jar
27 :require /git/BIDMach_Spark/BIDMatHDFS.jar
28 :require /git/BIDMach_Spark/BIDMach_Spark.jar

Show last K entries:

:history 10

 26  :load /git/BIDMach_Spark/scripts/KMeansLearner.ssc
 27  :require /git/BIDMach_Spark/BIDMatHDFS.jar
 28  :require /git/BIDMach_Spark/BIDMach_Spark.jar
 29  :require /git/BIDMach/BIDMach.jar
 30  :load /git/BIDMach_Spark/scripts/KMeansLearner.ssc
 31  :q
 32  :require /git/BIDMat/BIDMat.jar
 33  :?
 34  :help
 35  :h?

How do we execute the numbered history entry?

Following has been tried

 :!29

 :history 29

 :29

Does this support exist? Or just supposed to cut and paste?


Solution

  • scala> :help
    All commands can be abbreviated, e.g., :he instead of :help.
    :edit <id>|<line>        edit history //<-- hmm, this looks interesting
    :help [command]          print this summary or command-specific help
    :history [num]           show the history (optional num is commands to show)
    :h? <string>             search the history
    .....//etc.
    
    scala> :hi 6
    2524  val predicate: Int => Boolean = _ > 3
    2525  import scala.annotation._
    2526  List(3,5,7,9,11).filter(_ %3 == 0)
    2527  Vector('a','b','c').length
    2528  :help
    2529  :hi 6
    
    scala> :e 2526
    Placing text in recent history.  // follow this with a single up-arrow
    
    scala> List(3,5,7,9,11).filter(_ %3 == 1) // now this can be edited/executed
    res6: List[Int] = List(7)
    
    scala> :e predicate
    Placing text in recent history.  // up-arrow again
    
    scala> val predicate: Int => Boolean = _ > 4  // edit and execute
    predicate: Int => Boolean = <function1>