[英]Bash tab completion changed behavior
很长一段时间,我习惯于输入类似的东西:
$选择/富/平方米
等等在不同的环境中导航我的项目。 它非常有用:只需设置$ opt(例如,/ home / $ USER / projects / opt - 并从您的开发用户转到qa,生活,$ opt是$ opt。
截至发布bash4.2时,此行为已发生变化。 现在标签完成导致转义$符号。
$ opt / foo => \\ $ opt / foo <=根本不是我的意思!
虽然维护者正在讨论这应该如何工作,但我想找到一套新的习惯,我可以用来回到我的舒适区。 什么是好招? 我的手指可以学习的东西,有一些根配置,从那里去,而不用担心我在哪里。
它并不完美,但解决方法是使用ESC ctrl-e强制扩展变量然后点击标签(至少在emacs模式下......不确定vi模式)
zsh解决方案对我有用。 这是简单的转换我的.bashrc => .zshrc,我有一些复杂的shell函数/别名。
我同意,bash维护者在世界上如何打破这个非常基本的标签完成功能。
另一个我没试过的解决方案是使用另一个发行版的bash。 我只在Mint 13发行版中看到过这个。 Ubuntu / Fedora bash运行正常。
基于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
),然后像往常一样自动完成。
这里和其他地方建议的变通方法对我来说完全失败,或者输入太麻烦。
最终,一位朋友建议使用zshell(zsh)。 有用! 我没有进行自定义,将.zshrc留空。
现在我按顺序完成了标签的完成。 它与我以前的工作方式略有不同:旧的bash风格和vi风格的混合。 按Tab键显示可能的多个选项列表,然后再次选项卡将开始从该列表中选择并交替,如vi。
我很开心
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.