Autocomplete 在gnuplot中自动完成历史记录

Autocomplete 在gnuplot中自动完成历史记录,autocomplete,gnuplot,readline,Autocomplete,Gnuplot,Readline,在gnuplot中,我输入 gnuplot> set style data lines 然后,我运行其他几行: gnuplot> plot "./data/traj1.dat" u 1:4, "" u 1:6, "" u 1:9, "" u 1:11, "" u 1:13, "" u 1:15 gnuplot> plot "./data/traj2.dat" u 1:4, "" u 1:6, "" u 1:9, "" u 1:11, "" u 1:13, "" u 1:15

在gnuplot中,我输入

gnuplot> set style data lines
然后,我运行其他几行:

gnuplot> plot "./data/traj1.dat" u 1:4, "" u 1:6, "" u 1:9, "" u 1:11, "" u 1:13, "" u 1:15
gnuplot> plot "./data/traj2.dat" u 1:4, "" u 1:6, "" u 1:9, "" u 1:11, "" u 1:13, "" u 1:15
gnuplot> plot "./data/traj3.dat" u 1:4, "" u 1:6, "" u 1:9, "" u 1:11, "" u 1:13, "" u 1:15
现在我想改变风格。我从

gnuplot> set
例如,我想按ctrl-r()并完成命令以

gnuplot> set style data lines
然后我可以将
更改为


如何实现自动完成

部分解决方案确实是使用readline支持编译gnuplot。您提到这是您在评论中的最后一个选项,但我认为如果您不想自己编写gnuplot前端,这是您唯一的选项。也许知道从ubuntu源代码编译gnuplot真的很容易会有所帮助。我只是在中自己做的,您可以使用它来获得此功能(使用CTRL+R、文件名和关键字完成的历史搜索),而无需编译任何内容。如果您使用Ubuntu,请通过运行以下命令从universe存储库安装它:

sudo apt-get install rlwrap
使用以下命令运行gnuplot:

rlwrap -a -N -c -b \' -D 2 -s 1000 gnuplot
-a-N
覆盖gnuplot内置的readline支持时,
-c
为您提供文件名完成,
-b\
允许您完成诸如
绘图“未完成[选项卡]删除”
-d2
删除历史记录中的重复项,
-s1000
从默认值300增加历史记录大小

或者将这一行添加到启动脚本中(即,
.bashrc
.zshrc
),这样您就可以使用gnuplot而无需任何其他键入:

alias gnuplot="rlwrap -a -N -c -b \' -D 2 -s 1000 gnuplot"
此外,还可以通过在文件
$RLWRAP\u HOME/gnuplot\u completions
中列出所有关键字来完成关键字。但是,使用rlwrap不可能完成上下文相关的操作

您可能希望将gnuplot命令历史导出到rlwrap(这样就不必从头开始),如下所示:

tail -n +2 ~/.gnuplot_history | while read -r; do print $REPLY; done > $RLWRAP_HOME/gnuplot_history

tail
去掉gnuplot的头并
print
转换转义字符(我想知道为什么gnuplot的历史是这样存储的)。

您是否尝试过使用configure脚本的“---with readline”选项从源代码构建gnuplot。在google上搜索readline和gnuplot以获取更多信息。@psibar这将是我最后的选择。我更喜欢使用ubuntu的packageSure,如果你愿意,你可以用
checkinstall
替换最后一个命令。而且,从我到目前为止看到的情况来看,内置的文件名完成比rlwrap更好。根据您的说法,
rlwrap
的文件名完整性如何改进?(我是rlwrap的作者/维护者)@HansLub感谢您的回答,似乎rlwrap在处理文件名中的连字符时遇到了问题,我刚刚提交了一份申请。另外,当您编写
plot'impul[TAB]
时,它不会完成文件名,可能是因为这会使它对上下文敏感,所以我没有将其包含在报告中,但这是gnuplot中非常典型的用法,因此我认为值得一提。有关扩展响应,请参阅。简短回答:将
rlwrap
--break chars=“”
(或更短的:
-b'
)一起使用。这将使它把空白看成是字的破译,而不是<代码> ->代码>和<代码> <代码>汉斯鲁布谢谢,我已经编辑了我的答案来反映这一点。
tail -n +2 ~/.gnuplot_history | while read -r; do print $REPLY; done > $RLWRAP_HOME/gnuplot_history