我每天都使用 Ubuntu,最近我发现 Kali Linux 上的终端与 Ubuntu 上的终端的行为不同……我可以根据我输入的命令的历史记录看到我正在输入的命令的结尾'已键入如下:
我知道我可以通过按 tab 来使用自动完成功能,但是这个功能是另外一回事,因为我可以在按 tab 之前看到命令……这也不是与 Kali 相关的问题,因为我只想在 Ubuntu 20.04 上复制这个功能。我可以通过安装一些工具轻松地在 Ubuntu 上安装它apt install
吗?还是我需要做的配置?
使用命令行时,cd
是最常用的 shell 命令之一。我已经习惯了键入cd
、按tab
,然后tab
再次按以查看要cd
进入的目录的能力。Ubuntu 最近开始包含该colord
软件包,其工具以cd
. 现在,如果我按cd
and tab
,我会得到:
$ cd
cd cd-fix-profile cd-it8
cd-create-profile cd-iccdump
cd-*
当我使用命令行时,如何确保所有这些可执行文件都不会出现?我认为它们是操作系统所必需的,所以我不能只是将它们移出或重命名它们;但是,当我在 bash 中时,我不希望它们完成甚至可见。
请注意,这是在 Ubuntu 18.04 附带的 bash 4.4.20(1) 下。
顺便说一句:这些可执行文件是否仍包含在 Ubuntu 20.04 中?
我正在尝试编写一个 bash 脚本来自动完成我的电子邮件地址。所以我的目标是每当我输入foo
终端并点击tab
它时完成它[email protected]
。
到目前为止,我阅读了这些链接:
https ://unix.stackexchange.com/questions/1800/how-to-specify-a-custom-autocomplete-for-specific-commands?newreg=
8f29593bf62a4dcb92c96c33219271fd https://debian-administration。 org/article/317/An_introduction_to_bash_completion_part_2
但我无法实现,因为它们都像foo [tab]
.
如果我不能很好地解释我的问题,我很抱歉,但我不想在foo
.
提前致谢。
我正在慢慢地从 bash 过渡到 zsh,并且几乎喜欢它的每一个部分,但有两件事我真的很想念。其中之一是快照完成,请参见此处: Enable snap TAB-completion for zsh
另一种是你在 Ubuntu 终端中输入命令而不是“哦,不!找不到相关命令!' 马上,你会得到这样的东西:
user@computer:~$ inkscape
Command 'inkscape' not found, but can be installed with:
sudo snap install inkscape # version 0.92.4, or
sudo apt install inkscape # version 0.92.4-5ubuntu5
See 'snap info inkscape' for additional versions.
有什么方法可以在 zsh 中启用它吗?我真的很想不必再切换回 bash 来使用它并捕捉自动完成功能。
谢谢!
在 bash 中,如何从 显示的列表中选择一个选项TAB?
前任。假设vim <TAB>
显示不同的可能性txt1 txt2 txt3
。如何选择第一个 ( txt1
)?
编辑:
让我通过进一步阐述前面的例子来更准确地说:
假设当前文件夹只包含一个名为txt1
. 如果我写vim t<TAB>
,自动完成正确工作,即它显示vim txt1
。
但是,如果文件夹包含三个文件txt1
、txt2
、txt3
,则该命令vim t<TAB>
仅显示txt1 txt2 txt3
,而没有任何自动完成功能。
即使在后一种情况下,我怎样才能让自动完成发生?
我不太喜欢 Linux,我有以下疑问:一个客户端为我提供了一个 Ubuntu 18.04.3 LTS 虚拟机,我通过 SSH 访问它。(我使用 MobaxTerm 作为 SSH 客户端,但这应该不是问题。)使用的 shell 是sh
.
问题是在 shell 中,自动完成功能没有像我预期的那样使用Tab密钥。
它只是简单地放置了经典的制表符空白。
为什么?如何更改此配置?
我编写了一些包含它自己的 Bash 完成脚本的软件。当我手动获取该脚本时,该脚本运行良好,但我试图弄清楚如何最好地在 Ubuntu 18.04 上安装。
/usr/share/bash-completion/completions 中有很多其他的完成脚本,这让我认为这就是答案,但是在那里安装我的完成脚本没有任何效果。那个位置在某种程度上是红鲱鱼吗?或者除了把它放在那里之外,我还需要做些什么来注册脚本吗?
我有一个 bash 自动完成功能_customcomplete
,我想在一个名为run.sh
. 如果我调用complete -F _customcomplete ./run.sh
,那么只要我在同一目录中并使用 调用它,自动完成脚本就可以正常工作./run.sh
。但是,如果我上一层并使用 调用它./scripts/run.sh
,则自动完成脚本不起作用。更重要的是,如果我与另一个名为 的脚本位于不同的目录中run.sh
,则自动完成脚本在不应该的情况下会在该目录上运行。
简而言之,是否可以将 bash 自动完成功能绑定到特定的可执行文件,而不是调用字符串?
这是一个完整的简化示例:
Incompletion.sh
是一个非常简单的完成脚本,它总是返回三个选项one two three
:
_customcomplete() {
local word="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "one two three" -- "$word") )
}
我可以使用source completion.sh
并验证它的来源type _customcomplete
:
_customcomplete is a function
_customcomplete() {
local word="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "one two three" -- "$word") )
}
在一个目录中,我有两个文件夹scripts
和other
,它们都包含一个名为run.sh
. 每个都只是回显命令行参数以及一个独特的消息来区分两者。
现在让我们尝试通过 cd'ing 进入脚本目录并运行来将完成函数注册到run.sh
in 。现在我可以调用并使用制表符完成来查看. 但是,如果我尝试从上面的目录中调用它 as ,我会得到默认的文件系统选项卡完成建议。此外,如果我进入,自定义选项卡完成也适用于该脚本。scripts
complete -F _customcomplete ./run.sh
./run.sh
one two three
./scripts/run.sh
cd
other
将命令更改complete
为链接到任何类型的全局路径仅在使用与调用字符串完全相同的全局路径时才允许自定义选项卡完成。我想要发生的是能够通过任何相对路径调用脚本并让自定义选项卡完成按预期工作。
我已经接近找到Bash-itbash
真正好的功能了。
我希望能够(或者我认为)键ls file
,并且在按下Tab ↹时,我使用 bash-it 自动完成以及其他插件和别名得到一个点文件列表或匹配的单个文件,如下所示。
~ ls Tab ↹
Apps/ Music/
bin/ notes
conky-grapes-master/ Pictures/
cpu_power.sh* Projects/
cpu_temp.sh* Public/
Desktop/ snap/
disk_pct_used.sh* src/
Documents/ Downloads/
vmpk.sh*