【问题标题】:History auto complete in gnuplot在 gnuplot 中自动完成历史记录
【发布时间】:2013-05-11 00:27:00
【问题描述】:

在 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 (http://www.bigsmoke.us/readline/shortcuts) 并完成命令到

gnuplot> set style data lines

例如,我可以将lines 更改为points

如何实现这种自动完成?

【问题讨论】:

  • 您是否尝试过使用配置脚本的 `--with-readline` 选项从源代码构建 gnuplot。在谷歌上搜索 readline 和 gnuplot 以获取更多信息。
  • @psib​​ar 那将是我的最后选择。我更喜欢使用 ubuntu 的包

标签: autocomplete gnuplot readline


【解决方案1】:

部分解决方案确实是编译带有 readline 支持的 gnuplot。您提到这是您在 cmets 中的最后一个选择,但我认为如果您不想自己编写 gnuplot 前端,这是您唯一的选择。也许知道从 ubuntu 源代码编译 gnuplot 真的很容易会有所帮助。我自己在

sudo apt-get purge gnuplot
sudo apt-get build-dep gnuplot
cd `mktemp -d`
apt-get source gnuplot
cd gnuplot*
./configure --with-readline=gnu
make
sudo make install

在写完前几个字母后按 Tab 键将完成当前单词,如果按两次 Tab 键,它将打印您从 gnu-shell 中知道的建议列表。不幸的是,并非所有的 readline 功能似乎都适用于当前的 gnuplot(我知道他们曾经这样做过)。例如。用于反向搜索的 Ctrl+r(对 gnuplot 非常有用)对我不起作用。希望这会有所帮助,但诚然,这可能只是您的部分解决方案。

【讨论】:

  • 当然,如果您愿意,可以将最后一个命令替换为checkinstall
【解决方案2】:

您可以使用rlwrap 获得此功能(使用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 \' 让您完成类似plot 'incomp[TAB]lete'-D 2 删除历史记录中的重复项和-s 1000 增加历史记录大小从默认的 300 开始。

或者将此行添加到您的启动脚本(即.bashrc.zshrc),这样您就可以使用 gnuplot 而无需任何额外的输入:

alias gnuplot="rlwrap -a -N -c -b \' -D 2 -s 1000 gnuplot"

此外,可以通过在文件$RLWRAP_HOME/gnuplot_completions 中列出所有关键字来完成关键字。但是,使用 rlwrap 无法实现上下文相关的补全。

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

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

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

【讨论】:

  • 此外,就我目前所见,内置文件名完成比 rlwrap 更好。 根据你的说法,rlwrap 的文件名完成如何改进? (我是 rlwrap 的作者/维护者)
  • @HansLub 感谢您的回答,似乎 rlwrap 在处理文件名中的连字符时遇到了问题,我刚刚提交了issue on github。另外写plot 'incompl[TAB]的时候文件名不完整,可能是因为这会使其与上下文相关,所以我没有将它包含在报告中,但它在gnuplot中是非常典型的用法,所以我认为值得一提.
  • 如需扩展回复,请参阅issue on github。简短的回答:使用rlwrap--break-chars=""(或更短:-b '')。这将使其将空格视为分词,但不会将 -'
  • @HansLub 谢谢,我已经编辑了我的答案以反映这一点
猜你喜欢
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多