很长一段时间以来,我习惯于输入类似的东西:
$ opt / foo / m
等在不同环境中导航我的项目。这非常有用:只需设置$ opt(例如,/ home / $ USER / projects / opt - 并从您的开发用户转到qa,生活,$ opt是$ opt。
自bash4.2发布以来,此行为已发生变化。现在标签完成导致转义$符号。
$ opt / foo => \ $ opt / foo< =根本不是我的意思!
虽然维护者正在讨论这应该如何运作,但我想找到一套新的习惯,我可以用来回到我的舒适区。什么是好招?我的手指可以学习的东西,有一些根配置并从那里去,而不用担心我在哪里。
答案 0 :(得分:1)
它并不完美,但解决方法是使用ESC ctrl-e强制扩展变量然后点击标签(至少在emacs模式下......不确定vi模式)
答案 1 :(得分:0)
以frankc的回答为基础:尝试将以下内容放入~/.inputrc
:
"TAB": "\M-\C-e\M-\C-t"
"\M-\C-t": complete
然后启动一个新的shell。这是做什么的:
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运行正常。