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