TAB 完成和 mc 问题

TAB 完成和 mc 问题
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.10
DISTRIB_CODENAME=intrepid
DISTRIB_DESCRIPTION="Ubuntu 8.10"

这是服务器版本。

当我通过 ssh 进入时,遇到以下问题:

问题 1

Tab 键补全行为很奇怪,甚至无法使用:

> cd ~/<press TAB>
-sh: <( compgen -d -- '/home/dmitriid/' ): No such file or directory

> vi ~/.<press TAB>
<( compgen -d -- '/home/dmitriid/.' ): No such file or directory
-sh: <( eval compgen -f -X '*.@(o|so|so.!(conf)|a|rpm|gif|GIF|jp?(e)g|
JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)' -- 
$(quote_readline $cur) ): No such file or directory

> nano ~/.<press TAB>
./              .bash_logout    .mc/            .viminfo
../             .bashrc         .mysql_history  
.aptitude/      .erlang.cookie  .profile        
.bash_history   .gitconfig      .ssh/

有办法解决这个问题吗?

问题 2

我经常使用 mc。我经常按 Ctrl+O 来隐藏面板并在 shell 中工作。就我而言:

  1. Ctrl + O 隐藏面板
  2. 任何按键都会使面板返回

有办法解决这个问题吗?

谢谢你!

答案1

好吧。事实证明,解决方案既愚蠢又简单。关键是 — mc 中没有交互式 shell。

答案就在这里:http://www.ibiblio.org/mc/FAQ

6.6 当我使用 Ctrl-O 时,没有获得子 shell。如何修复这个问题?

仅 bash、tcsh 和 zsh 可用作子 shell。使用其中一个 shell 作为默认 shell,它将在 GNU Midnight Commander 中用作子 shell。

所以我决定换个shell:

> which bash
/bin/bash
> sudo chsh -s /bin/bash my_user_name
> grep ^my_user_name /etc/password
my_user_name:x:1002:1002::/home/my_user_name:/bin/bash

注意 passwd 文件末尾的 /bin/bash。这意味着 shell 现在已经更改。

在我注销并重新登录后 — — 瞧,一切正常!

答案2

您的主目录似乎出了点问题。您能帮ls ~我们看看是怎么回事吗?

答案3

.bashrc正在寻找/etc/bash_completion使用compgengo 生成完成几个已知命令(例如cdvi)但不知道 的人nano

由于某种原因,compgen无法完成主文件夹中的文件和目录。解决此问题的一个快速方法是注释掉.bashrc.

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
 fi

答案4

第一个问题的原因在于您使用 /bin/sh 作为 shell。即使将其链接到 bash,补全也不起作用。

将您的 shell 更改为 bash:chsh -s /bin/bash 并重新登录。

相关内容