4

很长一段时间以来,我已经习惯了能够输入如下内容:

$opt/foo/m

等等以在不同的环境中导航我的项目。这真的很有用:只需设置 $opt(例如,/home/$USER/projects/opt - 然后从您的开发用户转到 qa,再进行直播,而 $opt 就是 $opt。

在 bash4.2 发布时,这种行为已经改变。现在制表符完成会导致转义的 $ 符号。

$opt/foo => \$opt/foo <= 完全不是我的意思!

当维护人员正在讨论这应该如何工作时,我想找到一套新的习惯,我可以用来回到我的舒适区。什么是好技巧?我的手指可以学习的东西,配置一些根目录并从那里开始,而不用担心我在哪里。

4

4 回答 4

1

它并不完美,但一种解决方法是使用 ESC ctrl-e 在点击选项卡之前强制扩展变量(至少在 emacs 模式下......不确定 vi 模式)

于 2011-09-23T19:05:38.217 回答
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),然后像往常一样自动完成。

于 2011-11-01T08:16:17.020 回答
0

此处和其他地方建议的解决方法对我来说要么完全失败,要么输入起来太麻烦。

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

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

我很高兴。

于 2012-01-05T20:01:40.410 回答
0

zsh 解决方案对我有用。转换我的 .bashrc => .zshrc 很简单,而且我有一些复杂的 shell 函数/别名。

我同意,bash 维护者到底是如何破坏这个非常基本的选项卡完成功能的。

另一个我没有尝试过的解决方案是使用来自另一个发行版的 bash。我只在 Mint 13 版本中看到过这一点。Ubuntu/Fedora bash 工作正常。

于 2013-11-03T16:45:50.620 回答