Terminal 一次滚动整个多行命令的Readline类型包装器
我正在使用增强的Terminal 一次滚动整个多行命令的Readline类型包装器,terminal,readline,read-eval-print-loop,Terminal,Readline,Read Eval Print Loop,我正在使用增强的kotlinREPL,并输入了多行代码片段: $rlwrap bin/ki.sh ki-shell 0.3/1.4.21 type :h for help [0] fun reformat( str: String, normalizeCase: Boolean = true, upperCaseFirstLetter: Boolean = true, divideByCamelHumps: Boolean = false, wordSep
kotlin
REPL,并输入了多行代码片段:
$rlwrap bin/ki.sh
ki-shell 0.3/1.4.21
type :h for help
[0] fun reformat(
str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ',
)
{
println("In reformat")
}
如果您观察得很仔细,您可能已经注意到kotlin外壳已经用rlwrap
进行了“包装”。我曾希望它能提供一次按键来滚动通过多行命令。但是,正如在下面的屏幕截图中所看到的,向上箭头键(同样,shift-或option-或command-或control-向上箭头)一次只向上移动一行
那么,有没有类似REPL的实用程序的包装器可以支持多行滚动呢
请注意,scala
REPL与ipython
在某些情况下一样具有多行滚动功能(在我的情况下,仅在iTerm
下,而不是在终端下)
我使用的是macOS Catalina,但我希望答案同样适用于大多数*NIX变体。来自rlwrap
手册:
-m, --multi-line [newline_substitute]
Enable multi-line input using a "newline substitute" character
sequence (" \ ", [space-backslash-space] by default). Newline sub‐
stitutes are translated to newlines before sending the input to
command. With this option, you can call an external editor
$RLWRAP_EDITOR on the (expanded) current input with the
rlwrap_call_editor key (CTRL-^ by default)
使用rlwrap-m
时,按CTRL+^将使您进入一个编辑器,您可以在其中编辑多行代码段。退出编辑器后,代码段将被发送到rlwrap
ped命令,并作为一行(换行符替换为“换行符”)在历史记录中以↑ 及↓ 仍将这些代码段显示为一行,但您可以随时在编辑器中通过再次按CTRL+^将其扩展为多行文本
这并不完全是您想要的,但它确实可以一次滚动整个多行命令,我更喜欢这种方式,例如,ipython
,在这种情况下,您仍然(至少在我使用的终端上)必须按↑ 经过一个大函数定义几次
当然,与任何readline包装器一样,也存在一些不足之处:您将看到CLI可能具有的任何上下文相关的完成,甚至微不足道的rlwrap
完成机制也无法在多行编辑器中工作
设置:
它应该是“开箱即用”的,只需发布
$rlwrap-m-a#-a因为您的cli可能
#已经有行编辑了吗
一些调整:
- 如果您喜欢不同的编辑器,请添加一行
export-RLWRAP\u EDITOR='[-opts]
在.bashrc
中。默认值为vi+%L
<RLWRAP\u编辑器中的code>%F
、%L
和%C
将分别替换为文件名、行和列,以便将您放入编辑器中光标所在的位置RLWRAP
- 要使用不同的编辑热键,请将类似于
“\C-b”:rlwrap call editor
的行添加到~/.inputrc
(默认为CTRL+^)
- 要使用不同的“换行符替换”(例如“| |”),请向
-m
添加一个参数,如rlwrap-m'| |'
(默认值为'\'
)
- 如果您选择的
编辑器根据文件扩展名进行语法着色,请添加一个参数-M.ext
(默认值:无扩展名)
例如:
export-RLWRAP\u EDITOR='my\u edit--在退出%F时自动保存:%L'
# ... 或者把上面的东西放进去
rlwrap-a-m':'-m_bas ql superbasic#。。。那些日子
这看起来很有希望。我想有必要找到一个.kt
语法文件?我正在调查,这取决于你的编辑。我是一个emacs
的家伙,因此肯定存在一个kotlin-“模式”。如果您指定.kt
文件扩展名需要kotlin模式,Bob的叔叔..您能拼凑出这里的命令行吗?这似乎是朝着/包含正确答案的方向发展,但要获得有效的结果是相当具有挑战性的。我正在考虑另外问一个问题,关于如何将rlwrap
与kotlinI一起使用,因为kotlinI在安装kotlin shell方面运气不好,所以我将尝试给出一个总体路线图。请注意,使用任何readline包装器也会丢失一些功能,例如上下文感知完成。