z.lua

具备学习功能的 cd 命令
授权协议 MIT
开发语言 Lua SHELL
所属分类 应用工具、 操作系统工具
软件类型 开源软件
地区 国产
投 递 者 卫梓
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

z.lua 是一个会学习你使用习惯的 cd 命令,它会跟踪你在 shell 下访问过的路径,通过一套称为 Frecent 的机制(源自 Mozilla),经过一段简短的学习之后,z.lua 会帮你跳转到所有匹配正则关键字的路径里 Frecent 值最高的那条路径去。

正则将按顺序进行匹配,"z foo bar" 可以匹配到 /foo/bar ,但是不能匹配 /bar/foo。

特性说明:

  • 性能比 z.sh 快三倍,比 fasd / autojump 快十倍以上。

  • 支持 Posix Shell:bash, zsh, dash, sh, ash, busybox 等等。

  • 支持 Fish Shell,Power Shell 和 Windows cmd。

  • 使用增强匹配算法,更准确的带你去到你想去的地方。

  • 低占用,能够仅在当前路径改变时才更新数据库(将 $_ZL_ADD_ONCE 设成 1)。

  • 交互选择模式,如果有多个匹配结果的话,跳转前允许你进行选择。

  • 交互选择模式,支持使用 fzf 进行可视化结果筛选(可选)。

  • 快速跳转到父目录,或者项目根目录,代替反复 "cd ../../.." 。

  • 兼容 lua 5.1, 5.2 和 5.3 以上版本。

  • 自包含且无额外依赖,单个 z.lua 文件完成所有工作。

软件安装:

将下面对应语句添加到你的 .bashrc / .zshrc / .profile 或者对应 shell 的初始化脚本末尾:

eval "$(lua /path/to/z.lua  --init bash enhanced once echo)"       # BASH 初始化
eval "$(lua /path/to/z.lua  --init zsh enhanced once echo)"        # ZSH 初始化
eval "$(lua /path/to/z.lua  --init posix enhanced once echo)"      # 其他 Posix Shell 初始化
source (lua /path/to/z.lua --init fish enhanced once echo | psub)  # Fish Shell 初始化
iex ($(lua /path/to/z.lua --init powershell enhanced once echo) -join "`n")   # Power Shell 初始化

然后重新登陆,即可使用,bash 下还支持 fzf 补全,在 --init 参数列表最后加个 "fzf" 即可使用。

用户评价:

"我喜欢它的原理,我在命令行下面的行为十分有规律,并且我十分懒惰,懒得管理和维护一套书签或者路径别名。"

"总之,z.lua 做到了它所宣称的目标。如果你需要快速的在目录间切换,它可能是最好的选择。"

"我终于可以在自己的树莓派1上使用 autojump 类似的功能了,而不用像以前传统 autojump 那样每次打开终端都要等待 30 秒。"

基本使用:

cd 到一个包含 foo 的目录:

z foo

cd 到一个以 foo 结尾的目录:

z foo$

对长路径使用多个关键字进行匹配:

假设路径历史数据库(~/.zlua)中有两条记录:

      10   /home/user/work/inbox
      30   /home/user/mail/inbox

"z in" 将会跳转到 /home/user/mail/inbox 因为它有更高的权重,同时你可以传递更多参数给 z.lua 来更加精确的指明,如 "z w in" 则会让你跳到 /home/user/work/inbox。

交互选择:

使用 -i 参数进行跳转时, 如果有多个匹配结果,那么 z.lua 会给你显示一个列表:

$ z -i soft
3:  0.25        /home/data/software
2:  3.75        /home/skywind/tmp/comma/software
1:  21          /home/skywind/software
> {光标位置}

然后你按照最前面的序号输入你想要去的地方,比如输入 3 就会进入 /home/data/software。如果你不输入任何东西直接按回车,那么将会直接退出而不进行任何跳转。
PS:交互选择同时支持 "-I" 参数(大写 i),让你可以使用 fzf 在多项结果进行快速选择(如果系统里面安装了的话)。

快速回到父目录:

"-b" 选项可以快速回到某一级父目录,避免重复的输入 "cd ../../..",一般把 "z -b" 别名成 "zb" 命令:

  • (没有参数):cd 到项目根目录,寻找父目录中包含 (.git/.svn/.hg) 的地方,并且跳转过去。

  • (单个参数):cd 到最近一级包含关键字父目录中。

  • (两个参数):对当前目录进行字符串替换,然后 cd 过去。

使用举例:

# 一直向上退到项目根目录(就是里面有一个 .git 目录的地方)
~/github/lorem/src/public$ zb
  => cd ~/github/lorem

# cd 到第一个以 g 开头的父目录
~/github/vimium/src/public$ zb g
  => cd ~/github

# 将 jekyll 替换为 ghost
~/github/jekyll/test$ zb jekyll ghost
  => cd ~/github/ghost/test

向后跳转同样也支持环境变量 $_ZL_ECHO(用来显示跳转结果),这样为搭配其他工具提供了可能性(并不需要改变当前工作目录):

# 假设我们位于 ~/github/vim/src/libvterm
# 打开 $_ZL_ECHO 用于在每次跳转后调用一次 pwd 显示当前目录
$ _ZL_ECHO=1

# 看看我项目根目录(有 .git 那个)目录里有什么?
$ ls -l `zb`
  => ls -l ~/github/vim

# 检查 "<项目根目录>/logs" 下面的日志
$ tail -f `zb`/logs/error.log
  => tail -f ~/github/vim/logs/error.log

# 查看一下某一级父目录里有些啥
$ ls -l `zb git`
  => ls -l ~/github

Bonus:"zb .." 相当于 "cd ..","zb ..." 相当于 "cd ../..",而 "zb ...." 相当于 "cd ../../.." 等等。 最后 "zb ..20"; 等同于调用 "cd .." 二十次。

常用技巧:

推荐一些常用别名,放在你的配置文件中:

alias zc='z -c'      # 严格匹配当前路径的子路径
alias zz='z -i'      # 使用交互式选择模式
alias zf='z -I'      # 使用 fzf 对多个结果进行选择
alias zb='z -b'      # 快速回到父目录

z.lua 可以方便的导入 z.sh 的数据(他们格式相同):

cat ~/.z >> ~/.zlua

还可以导入 autojump 的数据:

FN="$HOME/.local/share/autojump/autojump.txt"
awk -F '\t' '{print $2 "|" $1 "|" 0}' $FN >> ~/.zlua

 

更多内容,参考项目文档:

https://github.com/skywind3000/z.lua

  • z.lua 是一个命令行下快速切换路径的工具。 首先,该工具会学习你最常去路径,然后用一套基于 frecency (兼顾访问频率和最近访问时间)的算法来筛选历史路径。让你可以简单的输入几个字符就把你带到特定的目录下去。别指望 z.lua 马上就能工作,他需要一小段时间的学习和跟踪。 市面上也有一些 z.lua 类似的工具,z.lua 比他们都快很多,开发者称 z.lua 比 fasd / auto

  • cartographer lua文件 cartographer常用的lua配置文件包括:map_builder.lua、trajectory_builder.lua、pose_graph.lua、trajectory_builder_2d.lua、trajectory_builder_3d.lua。这些文件的位置在 工作空间/src/cartographer/configuration_files

  • **function QMPlugin.randoms(x,y) --输出随机数字,x,最小值,y 最大值 local a a=math.random(x,y) return a end function QMPlugin.Letter() --随机输出字母,小写字母,按键不是有格式:UCase(字符串表达式) 函数么,转大写用他 local zm = {“a”,“b”,“c”,“d”,“e”,“

  • 1.下载安装lua curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz tar zxf lua-5.3.4.tar.gz cd lua-5.3.4 make macosx test sudo make install 输入lua查看lua安装情况提示 Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-R

  • 概述:cartographer的地图由许多个submap构成,每个submap又由许多个Node构成,而每个Node是由一帧或多帧激光数据累积得到。 -- Copyright 2016 The Cartographer Authors -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may n

  • 一、基础组件下载 luajit2-2.1-20220411.tar.gz #luajit官网存在一定的坑,下载openresty的优化版本 https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20220411.tar.gz lua-nginx-module-0.10.22.tar.gz # 0.10.16 以后都需要 lua-re

  • # 写在开始 如果你是第一次安装Lua环境,建议先看[#详细说明]部分,然后再利用[#关键步骤]中给出的命令行完成安装。 # 详细说明 搭建运行环境 首先,安装Lua,这一步是必须的,利用Homebrew命令行搞定。然后是IDE,IDE我习惯使用JetBrains的IDEA,所以去官网直接下载社区版安装。安装完成后,要为IDE添加支持Lua开发的插件,我使用的是EmmyLua,官方文档中有安装教程

  • 並未涵蓋所有Lua 5.3的所有新功能。 Lua 5.3 主要特性如下: “number”類型包含兩種內部類型,即“integer”與“float”,因为 Lua 的意识形态没有改变,它仍然试图保护用户免受数字类型的干扰。内部类型称为子类型,如何获取包含数字的变量的子类型? 對於本机位运算符的支持。警告,在默认安装中它们是 64 位的,很少支持 UTF-8。 Lua 5.3 安装提供了“integ

 相关资料
  • 本文向大家介绍R学习变量的功能,包括了R学习变量的功能的使用技巧和注意事项,需要的朋友参考一下 示例 通常,R您会想知道有关正在使用的对象或变量的信息。在阅读别人的代码甚至您自己的代码时,这很有用,尤其是在使用您不熟悉的软件包时。 假设我们创建一个变量a: 这是什么数据类型?你可以找到 这是一个矩阵,因此矩阵运算将在其上进行: 的尺寸是a多少? 其它有用的功能,对于不同的数据类型的工作是head,

  • 问题内容: 我在其中有3个表的数据库:A,B,C 答:(项目,数量,位置);B :(项目,数量,位置);C:(Item,Loc1,Loc2,Loc3,Loc4 .......,Loc16); 我需要一个用于自动计算并通过以下方式自动更新C上的值的函数: Sum(A.qty)-Sum(B.Qty)其中A.Item = B.Item和A.Loc = B.Loc; 结果应在C中的正确列中更新:从Loc1

  • 1. 浏览器选择 所有章节中的例子都基于 Chrome 浏览器环境。 推荐读者也使用 Chrome 进行调试学习,保证所有案例效果统一。 同时 Chrome 也是所有主流浏览器中支持 JavaScript 特性较多的、速度相对较快的浏览器。 获取Chrome浏览器 Chrome 浏览器 2. 开发工具 开发工具一般会分为两种,一种为 IDE (Integrated Development Envi

  • 主要内容:知识准备,环境准备在使用 Python 编写爬虫程序之前,您需要提前做一些准备工作,这样在后续学习过程中才会得心应手。 知识准备 1) Python语言 Python 爬虫作为 Python 编程的进阶知识,要求学习者具备较好的 Python 编程基础。对于没有基础的小伙伴而言,建议阅读《 Python基础教程》,这套教程通俗易懂,非常适合初学者学习,并且教程作者亲自答疑解惑,帮您实现 Python 快速入门。 同

  • 犀牛书,《JavaScript权威指南》,没事就多翻翻,看多少遍都不为过。 2)个人学习和技术选型都要循序渐进 先能写,采用面向过程写法,简单理解就是定义一堆function,然后调用,非常简单 然后再追求更好的写法,可以面向对象。对于规模化的编程来说,oo是有它的优势的,一般java、c#,ruby这些语言里都有面向对象,所以后端更习惯,但对于语言经验不那幺强的前端来说算高级技巧。 等oo玩腻了

  • Python标准库是Python强大的动力所在,我们已经在前文中有所介绍。由于标准库所涉及的应用很广,所以需要学习一定的背景知识。 硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念。这些内容基础而重要。 Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了解基本的计算机各个组成部分的性能。 操作系统 在了解操作系统时