Bash选项卡完成更改了行为

时间:2011-09-23 18:26:22

标签: linux bash bash-completion

很长一段时间以来,我习惯于输入类似的东西:

$ opt / foo / m

等在不同环境中导航我的项目。这非常有用:只需设置$ opt(例如,/ home / $ USER / projects / opt - 并从您的开发用户转到qa,生活,$ opt是$ opt。

自bash4.2发布以来,此行为已发生变化。现在标签完成导致转义$符号。

$ opt / foo => \ $ opt / foo< =根本不是我的意思!

虽然维护者正在讨论这应该如何运作,但我想找到一套新的习惯,我可以用来回到我的舒适区。什么是好招?我的手指可以学习的东西,有一些根配置并从那里去,而不用担心我在哪里。

4 个答案:

答案 0 :(得分:1)

它并不完美,但解决方法是使用ESC ctrl-e强制扩展变量然后点击标签(至少在emacs模式下......不确定vi模式)

答案 1 :(得分:0)

以frankc的回答为基础:尝试将以下内容放入~/.inputrc

"TAB": "\M-\C-e\M-\C-t"
"\M-\C-t": complete
然后启动一个新的shell。这是做什么的:

  • 更改TAB键以插入两个字符:ESC-Ctrl-e ESC-Ctrl-t。
  • 将ESC-Ctrl-t映射到complete函数,这是按TAB时通常调用的函数。 (您可以使用任何其他组合键而不是ESC-Ctrl-t,但通常不使用它。)

由于ESC-Ctrl-e已经映射到shell-expand-line函数,现在按TAB键时,bash首先展开变量($opt),然后照常自动填充。

答案 2 :(得分:0)

此处和其他地方建议的变通方法对我来说完全失败,或者输入过于繁琐。

最终,一位朋友建议使用zshell(zsh)。有用!我没有进行自定义,将.zshrc留空。

现在我按顺序完成了标签的完成。它与我以前的工作方式略有不同:旧的bash风格和vi风格的混合。按下选项卡显示可能的多个选项列表,然后再次选项卡将开始从该列表中选择并交替显示,如vi。

我很开心。

答案 3 :(得分:0)

zsh解决方案对我有用。转换我的.bashrc =>这是微不足道的。 .zshrc,我有一些复杂的shell函数/别名。

我同意,bash维护者在世界上如何打破这个非常基本的标签完成功能。

我没试过的另一个解决方案是使用另一个发行版的bash。我只在Mint 13发行版中看到过这个。 Ubuntu / Fedora bash运行正常。