如何使用语法突出显示 zsh 函数的自动建议

2024-05-01

我使用 zsh 并编写了一个函数来替换 cd 功能。在一些帮助下,我让它按照我想要的方式工作(大部分)。这是后续我的另一个问题之一 https://stackoverflow.com/questions/64463599/cant-use-in-zsh-autocompletion。 该函数几乎按照我想要的方式工作,但我在语法突出显示和自动完成方面仍然存在一些问题。

对于示例,假设您的目录如下所示:

/
    a/
        b/
        c/
            d/
        some_dir/

我还假设已获取以下代码:

cl () {
    local first=$( echo $1 | cut -d/ -f1 )
    if [ -d $first ]; then
        pushd $1 >/dev/null # If the first argument is an existing normal directory, move there
    else
        pushd ${PWD%/$first/*}/$1 >/dev/null # Otherwise, move to a parent directory or a child of that parent directory
    fi
}
_cl() {
    _cd
    pth=${words[2]}
    opts=""
    new=${pth##*/}
    local expl
    # Generate the visual formatting and store it in `$expl`
    _description -V ancestor-directories expl 'ancestor directories'
    [[ "$pth" != *"/"*"/"* ]] && middle="" || middle="${${pth%/*}#*/}/"
    if [[ "$pth" != *"/"* ]]; then
        # If this is the start of the path
        # In this case we should also show the parent directories
        local ancestor=$PWD:h
        while (( $#ancestor > 1 )); do
            # -f: Treat this as a file (incl. dirs), so you get proper highlighting.
            # -Q: Don't quote (escape) any of the characters.
            # -W: Specify the parent of the dir we're adding.
            # ${ancestor:h}: The parent ("head") of $ancestor.
            # ${ancestor:t}: The short name ("tail") of $ancestor.
            compadd "$expl[@]" -fQ -W "${ancestor:h}/" - "${ancestor:t}"
            # Move on to the next parent.
            ancestor=$ancestor:h
        done
    else
        # $first is the first part of the path the user typed in.
        # it it is part of the current direoctory, we know the user is trying to go back to a directory
        first=${pth%%/*}
        # $middle is the rest of the provided path
        if [ ! -d $first ]; then
            # path starts with parent directory
            dir=${PWD%/$first/*}/$first
            first=$first/
            # List all sub directories of the $dir/$middle directory
            if [ -d "$dir/$middle" ]; then
                for d in $(ls -a $dir/$middle); do
                    if [ -d $dir/$middle/$d ] && [[ "$d" != "." ]] && [[ "$d" != ".." ]]; then
                        compadd "$expl[@]" -fQ -W $dir/ - $first$middle$d
                    fi
                done
            fi
        fi
    fi
}
compdef _cl cl

问题: 我使用语法突出显示,但我输入的路径只是白色(当转到父目录时。正常的 cd 功能是彩色的)。

Example:

$ cd /a
$ cl c # 'c' is colored
$ pwd
/a/c
$ cl a/b # 'a/b' is not colored
$ cl a/[tab] # 'a/b', 'a/c' and 'a/some_dir' are not colored

如何让这些路径着色?


这是不可能开箱即用的zsh-syntax-highlighting plugin https://github.com/zsh-users/zsh-syntax-highlighting。它仅检查您输入的内容是否是

  • A) 有效的绝对路径或
  • B) 相对于当前工作目录的有效路径。

这不是特定于您的命令。当为其他有效的命令指定路径参数时,突出显示也会失败,但这些命令不是绝对路径或相对于当前工作目录的有效路径。

例如:

% cd /a/b
% cd b c  # perfectly valid args, but will not get highlighted as valid paths
% pwd
/a/c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用语法突出显示 zsh 函数的自动建议 的相关文章

  • 自动完成搜索,即使是一个字符 Android

    我在用AutoComplete小部件 它适用于两个字符搜索 但不适用于一个字符 即使用户只输入一个字符 我也想自动完成工作 例如 当我输入 1 时 它应该显示所有以 1 开头的列表 现在它显示 2 个字符的建议列表 例如 12 Code z
  • 在 Mac OS Lion 上使用 tmux 提示之前出现奇怪的空格

    它刚刚发生在我的 Lion 系统上 我正在使用 zsh 和 tmux 在 zsh shell 中正常 tmux 屏幕中的双倍空间 我是否缺少 zsh 或 tmux 中的某些配置 使用 u 选项启动 tmux 以实现 unicode 功能 看
  • Google 地图 v3 API - 自动完成(地址)

    尝试让我的谷歌地图应用程序自动完成工作 这是当前的代码 HTML
  • jquery 自动完成不响应动态插入的元素

    我们正在研究使用 jquery 动态插入元素的自动完成 之前对静态元素进行过自动完成 下面是插入一个自动完成添加元素的 html 源代码 同一页面上可能插入多个元素 插入元素的 id 在插入之前是未知的 id 因元素而异
  • Xcode 4 没有代码完成

    我已经使用 Xcode 4 两周了 我注意到我没有获得 if else 和 switch 语句的代码完成宏 就像这篇文章描述的那样 http macdevelopertips com xcode xcode code completion
  • Eclipse PHP IDE - 自定义自动完成标签

    Eclipse IDE 新手 想知道是否有一种方法可以添加自动完成 更改 这样如果我输入 mres 它会将其翻译为 mysql real escape string 我知道正常的 PHP 代码完成 但看不到任何有关创建自定义快捷方式的信息
  • 文件保存期间语法突出显示随机消失

    我正在使用 vim 编辑一些 python 文件 最近偶尔会出现在 vim 中保存缓冲区后语法高亮消失的情况 我尝试重置syntax on and set filetype python但无济于事 我根本不知道是什么原因导致了这个问题 所以
  • 如何使用语法突出显示 zsh 函数的自动建议

    我使用 zsh 并编写了一个函数来替换 cd 功能 在一些帮助下 我让它按照我想要的方式工作 大部分 这是后续我的另一个问题之一 https stackoverflow com questions 64463599 cant use in
  • jQuery-UI 的自动完成显示效果不佳,z-index 问题

    我目前正在我的客户网上商店中实现 jQuery UI 的自动完成功能 问题是 自动完成所在的元素的 z 索引高于自动完成的 z 索引 我尝试手动设置自动完成 z index 但我感觉 jQuery UI 正在覆盖它 事实上我的问题是重复的自
  • MagicSuggest动态ajax源码

    我在用着魔法建议 https github com nicolasbize magicsuggest对于自动完成输入文本 自动完成提要非常大 因此我无法完整下载它 在他们的示例中 他们提供了以下代码 脚本语言 document ready
  • Django 全文搜索优化 - Postgres

    我正在尝试利用 Django v2 1 和 Postgres 9 5 创建一个地址自动完成功能的全文搜索 但性能目前不适合自动完成 我不明白逻辑我得到的绩效结果背后 就信息而言 该表相当大 有 1400 万行 我的型号 from djang
  • jQuery触发新添加的html代码

    示例我有 2 个 html 输入 div class wrap div
  • bash、zsh :声明 [*] (天哪)

    我正在使用具有以下语法的 bash 脚本 declare a THIS 这在 zsh 中似乎是非法的 我收到 未找到匹配项 THIS 错误 谁能帮我把它翻译成 zsh 吗 另外 什么是 语法是什么意思 我知道我们正在声明一个数组 但为什么要
  • Materialize CSS,显示自动完成芯片的图像

    文档物化芯片 http materializecss com chips html展示您可以用图像制作芯片 div class chip img src images yuna jpg alt Contact Person Jane Doe
  • POJO 支持使用omnifaces 自动完成primefaces

    我正在尝试在我的项目中使用 primefaces 自动完成组件 以避免将特定转换器写入我尝试使用的每个列表对象全能面孔 http showcase omnifaces org converters ListConverter如建议的here
  • 在 Rails 中实现多个字段的自动完成

    我有一个应用程序 它实现了群组功能 每个小组有n名成员 此外 每个组都有一个组特定的个人资料图片 我已经能够实现组功能的自动完成 仅记住组名称 我已经参考了以下教程 http railsforum com viewtopic php id
  • 在 JQuery ui 自动完成中显示图像

    我有一个带有 JQuery ui 自动完成功能的脚本 可以完美运行 有一个显示用户名字和姓氏的搜索过程 但在我的数据库中 还有用户的图片 我想将其显示在带有名字和姓氏的建议中 数据库中pic包含图片url 剧本 function searc
  • 如何显示 zsh 函数定义(如 bash“type myfunc”)?

    如何在 zsh 中显示函数的定义 type foo没有给出定义 在bash中 bash function foo echo hello bash foo hello bash type foo foo is a function foo e
  • Android Studio DAO 语法突出显示、DB Inspector 和语言注入

    Since my last build upgrade the syntax highlighting in my DAOs is not working anymore 我的期望 和经验 是 查询中存在语法突出显示 并且一旦数据库检查器运
  • 动态参数值取决于另一个动态参数值

    启动前提 非常严格的环境 Windows 7 SP1 Powershell 3 0 使用外部库的可能性有限或不可能 我正在尝试重写之前创建的 bash 工具 这次使用 PowerShell 在 bash 中 我实现了自动完成功能 以使该工具

随机推荐

  • Safari 不设置 cookie,但 Chrome 和 Firefox 会设置

    我正在将请求从本地主机发送到第三方服务器以使用 REST API 获取数据 后端使用cookies JSESSIONID 来了解是否发送数据 在 Chrome 中一切正常 我可以在 Chrome 浏览器的 应用程序 选项卡中看到 Cooki
  • Bootstrap 与 Haml 和 Rails 一起崩溃

    我对 Rails 编程等很陌生 所以如果这是非常基本的 我很抱歉 我正在尝试让 twitter bootstrap crash js 在我的网络应用程序上工作 我试图遵循这里的结构http getbootstrap com javascri
  • 如何在 Tensorflow 中计算 R^2

    我正在尝试在 Tensorflow 中进行回归 我不确定我计算 R 2 是否正确 因为 Tensorflow 给出的答案与sklearn metrics r2 score有人可以看看我下面的代码 让我知道我是否正确地实现了图中的方程 谢谢
  • 如何调试没有错误消息的错误?

    如何调试没有错误消息的错误 当加载 PHP 页面时 我在 Firefox 中收到此错误 The connection to the server was reset while the page was loading 除了看起来是 Apa
  • 如何在编译时检查该类是否是抽象的?

    我所说的抽象类是指至少具有一个纯虚方法的类 如果检查显示该类是 我希望编译失败not抽象的 有可能吗 Use std is abstract http en cppreference com w cpp types is abstract
  • 请求/响应的 MQTT 主题名称

    我正在设计一个包含许多设备的系统 使用 MQTT 连接到中央代理 有些主设备可以向某些从设备发送请求 来自一台主机的请求通常会发送给一台从机 请求的主题可以是 mysystem slaveId req 因此从站可以订阅该主题 并且主站可以发
  • 使用包名称获取所有活动

    我想通过使用 PackageInfo 将应用程序中存在的所有活动作为列表获取 请告诉我有什么办法可以做到这一点 提前致谢 我的问题得到的答复如下 public static ArrayList
  • 如何在类的 Dispose 方法中取消订阅匿名函数?

    我有一个 A 类 在它的构造函数中 我正在为 Object B 的 eventHandler 分配一个匿名函数 如何从 A 类的 Dispose 方法中删除 取消订阅 它 任何帮助 将不胜感激 谢谢 Public Class A publi
  • 检查 UIImage 是否有 alpha(透明)颜色时出现问题

    我正在检查图像是否有透明区域 alpha 受到打击 我必须改变颜色UIImage 我已经实现了以下方法来检查图像是否有alpha or not BOOL checkAlpha UIImage image for int x 0 x lt i
  • 空或不需要的结构字段

    我有两个结构体 代表将插入到 mongodb 数据库中的模型 一个结构 投资 将另一个结构 集团 作为其字段之一 type Group struct Base Name string json name bson name type Inv
  • 在 Checkbox.Checked 或 Unchecked 上执行命令

    我的窗口上有一个复选框控件 我想执行一个命令来调用关联视图模型中的方法 我还需要复选框的值 我似乎找不到将命令与复选框关联起来的方法 有人这样做过吗
  • 在鼻子测试中打印不同的长描述以及测试名称 python

    我正在使用命令 nosetests test py 运行时仅打印描述的第一行 我想要完整的描述以及测试名称 我怎么做 测试 py 文件 import unittests class TestClass unittest TestCase d
  • pdo如何检查它是否是从数据库检索的第一条记录?

    sql3 SELECT member FROM levels where upline AND level 1 q3 conn gt prepare sql3 q3 gt execute array level2downlines whil
  • 无法分配“导入类”,因为它是导入 - Javascript

    我一直在初始化一些常量类 export class A foo string b B export class B bar number 然后将它们导入另一个类并在另一个文件中初始化它们 但是 如果我想初始化 A 类时使用 B 类时遇到问题
  • 开发 Google Assistant 应用程序的成本?

    开发和 或发布 Google Assistant 应用程序涉及哪些成本 例如 您可以使用 DialogFlow 和后端 例如 Firebase 开发应用程序 而无需在学习时付费吗 首先 你不need使用 Dialogflow 或 Fireb
  • 在 C++ 中将惰性生成器实现为forward_iterator

    MyGenerator 表示 可能 有限的整数序列 计算成本很高 所以我不想预先生成它们并将它们放入容器中 struct MyGenerator bool HasNext int Next 要打印全部 MyGenerator generat
  • 使用 cut 为时间变量创建 24 个类别

    在这里 我导入数据 对其进行一些操作 这可能不是问题 修复所在 前两行设置了我的剪切参数 lab var num lt 0 24 times var lt c 0 100 200 300 400 500 600 700 800 900 10
  • 如何使用 toLocaleTimeString 12 小时时间而不使用 AM/PM 缩写?

    我想以 12 小时格式显示时间而不使用AM and PM 例如3 45仅且不3 45 PM or 3 45 AM 我该如何修改toLocaleTimeString 不显示PM AM但12位数字格式 var minsToAdd 45 var
  • Cassandra 集群 - 特定节点 - 特定表高丢弃突变

    我在生产中的压缩策略是 LZ4 压缩 但我将其修改为 Deflate 对于压缩更改 我们必须使用 nodetool Upgradesstables 强制升级所有 sstable 上的压缩策略 但是 一旦在集群中的所有 5 个节点上完成了 U
  • 如何使用语法突出显示 zsh 函数的自动建议

    我使用 zsh 并编写了一个函数来替换 cd 功能 在一些帮助下 我让它按照我想要的方式工作 大部分 这是后续我的另一个问题之一 https stackoverflow com questions 64463599 cant use in