是否可以配置bash完成目录名称的方式?

珀尔帖

我想指示bash使用特殊方法对某些目录名称执行补全。例如,如果路径以“ $$”开头,bash会调用我的程序来执行完成,否则将正常执行。

这是可能吗?您将如何实施?

赏金:非常感谢您对这个问题的回答。目的是允许用户在使用特定前缀启动命令时自动跳转以完成所有命令的路径。因此,例如,当从远端目录复制文件时,您可以输入:

cp $$patern + <Tab>

和自动跳转将完成

cp /home/user/CompliCatedDireCTOry/long/path/bla/bla

而且您只需要添加要放置文件的位置即可。当然,我可以使用ott的注释将其添加到一些特定的命令中,但是如果有人有更好的主意,我将不胜感激。

多项式

您可以通过重写TAB(^ i)的默认绑定来实现。首先,您需要覆盖TAB绑定,然后需要构建一个调用命令的函数,最后,需要从该命令中获取输出并更新包含当前命令行的变量。

此函数采用当前命令行,并将最后两个字符更改为“拥抱”。

function my_awesome_tab_completion_function () {
  set -- $READLINE_LINE
  command="$1"
  shift
  argument="$*"
  argument_length=$(echo -n $argument | wc -c)
  if echo $argument | grep '^$$' >/dev/null 2>&1; then
    new_argument=$(echo $argument | sed 's/..$/huugs/') # put your autojump here
  else
    new_argument=$(compgen -d $argument)
  fi
  new_argument_length=$(echo -n $new_argument | wc -c)
  READLINE_POINT=$(( $new_argument_length - $argument_length + $READLINE_POINT ))
  READLINE_LINE="$command $new_argument"
}

对于您的示例,您可能希望将new_argument行更改为如下所示:

  new_argument=$(autojump $argument)

现在覆盖^ i绑定:

$ bind -x '"\C-i"':'my_awesome_tab_completion_function'

现在测试它是否有效:

$ cd /ro<TAB>
changes my command to:
$ cd /root

因此正常完成仍然有效,您可以通过执行cd $$ ...等来测试$$部分

如果遇到问题,请打开详细模式:

$ set -x

它将打印出该功能正在执行的所有操作。

我在Ubuntu 11上使用bash 4.2.8(1)-release(默认)对此进行了测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查PWD是否包含目录名称

来自分类Dev

如何获得目录名称

来自分类Dev

在bash中增加目录名称

来自分类Dev

Bash,将目录名称存储在变量中时出错

来自分类Dev

父目录名称与新目录名称结合

来自分类Dev

从文件中获取目录名称,并检查它们是否存在

来自分类Dev

获取目录名称

来自分类Dev

Emacs:检查文件路径是否包含目录名称

来自分类Dev

检查目录名称是否为year python

来自分类Dev

如何将zsh配置为使用驼峰式匹配方式自动完成目录名称?

来自分类Dev

bash目录名称,在CDPATH中带有空格

来自分类Dev

在目录名称前添加目录名称

来自分类Dev

在bash终端窗口中显示当前目录名称

来自分类Dev

Bash抓取目录名称以在循环中使用

来自分类Dev

在bash中增加目录名称

来自分类Dev

bash complete:从已定义的目录中列出目录名称?

来自分类Dev

更改目录名称在Ubuntu终端中的显示方式

来自分类Dev

是否可以指定目录名可变的路径?

来自分类Dev

模块名称和目录名称是否冲突?

来自分类Dev

如何将bash别名配置为处理目录名称中的空格?

来自分类Dev

在bash提示符中缩短很长的目录名称

来自分类Dev

oh-my-zsh对主目录名称的完成

来自分类Dev

当目录并不总是相同时,是否可以使循环从目录中的每个目录名称中创建一个变量?

来自分类Dev

找不到目录名称

来自分类Dev

在bash提示符中引用目录名称

来自分类Dev

Bash:将目录名称添加到数组中

来自分类Dev

我可以显示 url 目录名称吗

来自分类Dev

Bash - 仅从 git status 获取目录名称

来自分类Dev

在bash中的目录名称中使用逗号卷曲请求