2011-09-23 46 views
4

很长一段时间,我一直在使用能够键入类似:击tab完成改变行为

$选择/富/平方米

等不同环境中的导航我的项目。这是非常有用的:只需设置$ opt(比如说,/ home/$ USER/projects/opt并从开发用户到qa即可),$ opt是$ opt。 bash4.2释放,此行为已更改。现在tab完成导致的转义$符号。

$选择/富=> \ $选择/富< =根本没有;我的意思!

虽然维护人员正在讨论这应该如何工作,我想找到一套新的习惯,我可以用它来回到我的舒适区。什么是一个好的窍门?我的手指可以学习的东西,有一些根配置和从那里出发,不用担心我在哪里。

+0

'cd $ opt/foo'不起作用吗? –

+0

它的确如此。但通常你想要的是:$ opt/foobar/modules/Foo/Bar.pm,并且在没有完成标签填充的情况下键入它是很痛苦的。 :-) – KateYoak

+0

请注册为'影响我'在现有的错误报告[Bash变量扩展选项卡完成](http://stackoverflow.com/questions/6418493/bash-variable-expansion-on-tab-complete/6418681 #6418681) – sehe

回答

0

在这里或其他地方提出的解决方法要么完全失败,要么输入太麻烦。

最终,一位朋友推荐使用zshell(zsh)。有用!我没有做任何自定义,把我的.zshrc留空。

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

我很开心。

+1

zsh的作品,但它肯定会很高兴有一个很好的旧bash回来。 20年后,他们究竟如何破解这个? –

1

它并不完美,但解决方法是使用ESC CTRL-E强制变量的扩张打标签(至少在emacs模式......关于vi模式不确定)

+0

不知道,漂亮。另外,Ctrl-Alt-e比使用ESC更不笨拙。 – plundra

+0

这在vi模式下工作,甚至没有设置EDITOR env变量。 –

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),然后照常自动完成。

+0

这是一个不错的方法!只是它似乎没有任何影响。我试图把它放到〜/ .inputrc中,并直接放到/ etc/inputrc中。不好。我如何解决它? – KateYoak

+0

更改.inputrc后,请确保您启动新的外壳,或按C-x C-r重新加载.inputrc。 –

0

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

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

另一个解决方案,我还没有尝试使用bash从另一个分布。我只在Mint 13发行版中见过这个。 Ubuntu/Fedora bash工作正常。