当前位置: 首页>>技术教程>>正文


当有多个文件/目录时如何使终端自动完成?

, ,

问题描述

如果我有多个目录,例如:

afoo abar

有时我的终端会在我按下制表符(例如 “cd a” 然后制表符)时拒绝自动完成,而是打印目录列表。有时它甚至会发出嘈杂、烦人的声音。知道如何在这种情况下使其自动完成吗?例如,如果我再次按 Tab,它可以先显示 abar,然后再显示 afoo。我在 Windows 中看到了这种情况,或者在 Ubuntu 中看到了一些应用程序

最佳方法

对我来说 life-saver 是让 bash 循环遍历各种可能性,而不是显示一个愚蠢的列表。

由于 bash 使用 readline 作为其 auto-completion,将以下行添加到 ~/.inputrc

一旦您满意并在几天/几周内彻底测试了以下解决方案,请剪切并粘贴(不要复制!)从 ~/.inputrc/etc/inputrc 的相同设置,其中包含 system-wide 设置,使系统上的所有用户都可以使用(包括客人)。

编码:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

然后 exit 你的终端(或腻子之类的远程终端)并再次打开它……

例子:

  1. 当您有 3 个文件时: file1file2file3 并键入:

    e fTabTabTab

    它会循环:

    e file1
    e file2
    e file3
    

    当你想向后循环时,只需点击 Shift + Tab

  2. 当您键入:

    very-complicated-command with lots of command line parameters
    

    下次您需要相同的命令时,只需键入:

    very↑

    它会为你输入:

    very-complicated-command with lots of command line parameters
    

这将为您节省大量的 bash 时间! 😉

次佳方法

在第一个 tab 之后,您需要插入更多字母。所以如果你输入

cd a

并点击 tab 你什么也得不到,第二个 tab (紧随其后)你得到一个以 a 开头的名称列表,然后需要插入一个 f 让它自动完成其余部分

cd a tab tab f tab tab

将导致

cd afoo

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12429.html,未经允许,请勿转载。