繁体   English   中英

Bash选项卡完成更改了行为

[英]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。 这是做什么的:

  • 更改TAB键以插入两个字符:ESC-Ctrl-e ESC-Ctrl-t。
  • 将ESC-Ctrl-t映射到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM