为什么我不能使用向左和向右箭头键(实际上,向上和向下键也是如此)来移动tclsh
交互式外壳中当前所在的行?如果我尝试按任何一个,我都会得到一堆abracadabra,而不是来回移动。例如,当您键入错误时,这并不是很方便,但是您不能向后移动光标来更改它。您必须使用退格键来删除您在键入错误的位置之后键入的所有内容,从而破坏您的所有工作。坦率地说,是否可以解决此问题?
您可以按照 schlenk 的建议使用通用 rlwrap ,也可以使用tclreadline:
安装 tclreadline(例如,对于 debian/ubuntu 使用以下命令):
sudo apt install tclreadline
Run Code Online (Sandbox Code Playgroud)
通过将其添加到您的:来自动加载它~/.tclshrc
:
if {$tcl_interactive} {
package require tclreadline
::tclreadline::Loop
}
Run Code Online (Sandbox Code Playgroud)
使用tclreadline
不仅提供基本的编辑功能,还包括制表符完成,这是rlwrap
由于其通用性质而无法完成的。
该行为不是马车。不方便,是的。
为了在外壳中进行编辑,通常使用GNU readline
库。如果程序不使用该库,则您没有该功能。
由于tclsh
许可证的原因(GPL与BSD风格的Tcl许可证),这给不属于操作系统一部分的tclsh
所有平台readline
(几乎是Linux以外的几乎所有平台)直接添加了readline支持带来了不便。
您可以使用Ubuntu rlwrap软件包来进行所需的编辑。安装rlwrap:
sudo apt-get install rlwrap
Run Code Online (Sandbox Code Playgroud)
并使用它通过命令行编辑来运行tclsh:
rlwrap -c tclsh
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用基于Tk的shell tkcon
,它作为Tcl shell提供了更多选项,它也可以作为ubuntu软件包使用。
扩展我自己的答案:您还可以构建和使用tclreadline作为包.tclshrc
。