Autocomplete 在gnuplot中自动完成历史记录
在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> 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