欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

更好的 repl

程序员文章站 2022-05-13 07:58:38
...
在习惯使用动态语言之后,很是热衷于在 repl 下做各种尝试验证一些简单的想法。多数动态语言都内置提供了 repl,比如 python 的 python ,ruby 的 irb ,php 的 php -a ,nodejs 的 node ,甚至 haskell 这样的静态语言也有 repl: ghci 。 只是这些自带的 repl 都比较简单,所以会有一些替代工具,提供 更好 的体验:语法高亮,即时输出,简单的代码补全和提示。

php

php 默认的是 php -a ,功能很差,要输出内容还必须 echo。 boris 是更好的替代,不需输入 echo 直接输出,也有基本的语法高亮(只对输出有高亮,输入没有)。boris 没有代码补全。

MAC 自带的 php 缺乏一些必要的组件,使得 boris 无法使用,建议使用 brew 下的 php: brew install php 。

[1] boris> class A {[1]     *> function t(){[1]     *> return "test";[1]     *> }[1]     *> }// NULL[2] boris> $a = new A;// object(A)(//// )[3] boris> $a->t();// 'test'

python

python 自带的也很难用,但是 python 的替代工具要比 php 多,而且极其强大,强大到可以独立作为一个工具使用,而不仅仅是 python 的 repl。

bpython 是一个相当优秀的替代,不仅提供了很好的高亮,也可以 tab 键智能补全和提示。建议当只是想做一些简单的试验的时候,用 bpython 代替 python。

bpython

ipython 的 terminal 看起来似乎没有 bpython 好,不仅没有语法高亮,代码提示也很一般 1 。但是 ipython 是完全不同的一个工具,详情看 官网 ,这是一个套件,支持交互式的数据可视化,ipython notebook 是一个强大的 python IDE,功能很类似 matlab(不妨参考之前的文章)。毕竟,一个可以招博士后的项目,绝非池中之物 2 。

ipython notebook 基于 jupyter ,功能丰富。jupyter 目前已支持 bash, haskell, julia, python, r, ruby, scala。 Try

jupyter

最近的 4.1 更新 中,更是提供了一些现代编辑器如 sublime text 和 atom 的功能,比如 Command palette,以及更强大的查找和替换。详情请查看上面博文。

ruby

ruby 自带的 irb 默认功能是挺简单的,但是配置好 irbrc 后,也是可以实现常见的高亮和提示功能的。然而在 ruby 世界用 pry 的更多,pry 默认配置已经足够好,还可以配置 pryrc,完全定制 pry 的样式和功能。pry 提供了一些实用 插件 。甚至有 pry-theme 这样的项目。ruby 世界对颜值的追求一向不落人后。

pry-rails-console

nodejs

nodejs 除了自带的 node,也有一些第三方 repl 增强。 nesh 就是其中很优秀的一个。不得不说,node 世界最近发展迅速,开发者热情高涨,插件、库层出不穷。 nesh plugins

npm install -g nesh# Run neshnesh# Run nesh with CoffeeScriptnesh -c# Run nesh with ES6 through Babelnesh -b

i.js 是一个受 ipython 启发而开发的项目,但不是基于 jupyter。有兴趣的不妨尝试一下。

i.js screenshot

others

然而在 Linux 世界,还有很多命令行工具极其简陋,比如 sqlite3,比如 ftp,连基本的向上方向键查看命令历史的功能都没有提供,一时也没有好的替代,应该怎么办呢?

rlwrap 正是解决这一问题的工具。

[0] % sqlite3 production.sqlite3SQLite version 3.8.4.1 2014-03-11 15:27:36Enter ".help" for usage hints.sqlite> .tablesalbums             images             usersarticles           schema_migrationssqlite> ^[[A^[[A^[[A^[[A
[1] % rlwrap sqlite3 production.sqlite3SQLite version 3.8.4.1 2014-03-11 15:27:36Enter ".help" for usage hints.sqlite> .tablesalbums             images             usersarticles           schema_migrationssqlite> .tables

使用 rlwrap,方向键可用了。

相关标签: 更好的 repl