改进的终端自动完成功能(类似于Matlab的)


18

如果您曾经使用过Matlab,则可能已经注意到该程序中的命令窗口功能。我想知道是否可以在Mac Terminal中启用相同的功能。

它的工作方式如下:假设您之前在此Terminal会话中使用了两个命令。首先,您使用cd ~,然后使用ls -la

在每个* nix终端机(包括Mac终端机)中,如果您按下Up Arrow,它将首先显示ls -la命令,如果您两次按下,则将显示cd ~命令。这很棒。但是,在Matlab中,如果您先键入字母c然后点击Up Arrow,它将不会显示给您ls,而是直接转到cd ~。当您有大命令和一长串以前使用的命令时,这可以节省大量时间。

可能吗?

Answers:


27

在Bash Shell中,您可以按Control+ R在历史记录中进行反向智能搜索。开始键入命令,shell将使用先前输入的命令自动完成。

然后,您可以按Enter再次执行命令,使用向左或向右箭头键编辑命令,或者按住Control+ R循环选择其他可能的完成。

反向智能搜索


9

将其另存为〜/ .inputrc:

# make the up and down arrows cycle through commands that match the start of a line
"\e[A": history-search-backward
"\e[B": history-search-forward

选择选项将是\e\e[Aand control -p \C-p。您可以通过按Ctrl-v查看其他组合键的转义序列。


1
对于还没有的用户~/.inputrc,只需创建一个。
西伯斯赌博

应该是公认的答案
ripper234 '18

1
“ \ e [A”:找不到命令
路易(Louis)

2

您可以做的另一件事是键入!,然后输入第一个字母,它将找到最新的字母。IE:cd ~可以使用!c


1

这是外壳程序的功能。Control-R会做您描述的事情,但是更改为更现代的外壳将为您带来更多收益。看一下Z-shell(zsh),虽然有一些学习曲线,但是它非常强大。


我想你是说Control-R。
2013年

1

zsh将完全像您的示例一样完成命令。除了将其用于shell外,您甚至不需要做任何其他事情。


0

将它们添加到您的.cshrc中(如果使用的是tcsh)-

  bindkey -k up history-search-backward
  bindkey -k down history-search-forward

然后执行源〜/ .cshrc来获得您描述的功能。

我不知道是否有一个.profile等效项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.