Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 24 additions & 10 deletions plugins/z.lua/README.cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ z.lua 是一个快速路径切换工具,它会跟踪你在 shell 下访问过

- 性能比 **z.sh** 快三倍,比 **fasd** / **autojump** 快十倍以上。
- 支持 Posix Shell:bash, zsh, dash, sh, ash, busybox 等等。
- 支持 Fish Shell,Power Shell 和 Windows cmd。
- 支持 Fish Shell,Nushell, Power Shell 和 Windows cmd。
- 使用增强匹配算法,更准确的带你去到你想去的地方。
- 低占用,能够仅在当前路径改变时才更新数据库(将 `$_ZL_ADD_ONCE` 设成 1)。
- 交互选择模式,如果有多个匹配结果的话,跳转前允许你进行选择。
Expand Down Expand Up @@ -84,6 +84,16 @@ z -b foo # 跳转到父目录中名称以 foo 开头的那一级

但是第二种方法需要记得在 z.lua 位置改变或者 lua 版本升级后需要重新生成。

- Nushell:

在 `env.nu` 中加入如下代码:

lua /path/to/z.lua --init nushell | save -f ~/.cache/zlua.nu

然后在 `config.nu` 中加入如下代码:

source ~/.cache/zlua.nu

- Power Shell:

在你 Power Shell 的配置文件 `profile.ps1` 中放入下面语句:
Expand Down Expand Up @@ -112,7 +122,7 @@ z -b foo # 跳转到父目录中名称以 foo 开头的那一级
- 设置 `$_ZL_NO_PROMPT_COMMAND` 为 1 来跳过钩子函数初始化(方便自己处理)。
- 设置 `$_ZL_EXCLUDE_DIRS` 逗号分隔的路径列表,列表内的路径不会被收集。
- 设置 `$_ZL_ADD_ONCE` 为 '1' 时,仅在当前路径 `$PWD` 改变时才更新数据库。
- 设置 `$_ZL_MAXAGE` 来确定一个数据老化的阀值 (默认为 5000)。
- 设置 `$_ZL_MAXAGE` 来确定一个数据老化的阈值 (默认为 5000)。
- 设置 `$_ZL_CD` 用来指定你想用的 cd 命令,比如有人用 cd_func 。
- 设置 `$_ZL_ECHO` 为 1 可以在跳转后显示目标路径名称。
- 设置 `$_ZL_MATCH_MODE` 为 1 可以打开 “增强匹配模式”。
Expand Down Expand Up @@ -201,7 +211,7 @@ Frecency 是一个由 'recent' 和 'frequency' 组成的合成词,这个术语

cd foo

因此,在增强匹配算法中,你总可以象 cd 命令一样使用 z 命令,而不必当心目标路径是否被记录过。
因此,在增强匹配算法中,你总可以像 cd 命令一样使用 z 命令,而不必当心目标路径是否被记录过。

- 忽略当前路径:

Expand All @@ -214,7 +224,7 @@ Frecency 是一个由 'recent' 和 'frequency' 组成的合成词,这个术语

我当然可以每次使用`z env gems` 来精确指明,但是每当我输入 `z xxx` 我必然是想进行路径跳转的,而不是呆在原地,所以使用增强匹配模式,即便当前目录是最佳匹配,它也能懂得你想跳转的心思。

再我最初实现 z.lua 时,只有一个和 z.sh 类似的默认匹配算法,在网友的建议下,我陆续学习了来自 fasd / autojump 中的优秀理念,并加以完善改进,成为如今集三家之长的 “增强匹配算法” ,给它取个昵称,叫做 “更懂你的匹配算法”。
在我最初实现 z.lua 时,只有一个和 z.sh 类似的默认匹配算法,在网友的建议下,我陆续学习了来自 fasd / autojump 中的优秀理念,并加以完善改进,成为如今集三家之长的 “增强匹配算法” ,给它取个昵称,叫做 “更懂你的匹配算法”。


## Add once
Expand Down Expand Up @@ -325,7 +335,13 @@ zsh/fish 的补全系统是比较完善的,使用 `z foo<tab>` 就能触发补
eval "$(lua /path/to/z.lua --init bash enhanced once echo fzf)"
```

然后你在 bash 中,输入部分关键字后按 tab,就能把匹配的路径列出来:
如果你想在 zsh 中使用 fzf 补全,初始化时在 `--init` 后追加 `fzf` 关键字:

```zsh
eval "$(lua /path/to/z.lua --init zsh enhanced once echo fzf)"
```

然后你在 bash/zsh 中,输入部分关键字后按 tab,就能把匹配的路径列出来:

![](images/complete-2.png)

Expand Down Expand Up @@ -438,15 +454,13 @@ sys 0m0.030s

描述力强,可以更好的实现核心功能,同时速度更快,纯 shell 开发的话,太多语句是通过子进程 shell 的模式运行,所以性能很差,而 Python 开发的话启动速度又太慢,我在 Cygwin/msys 下用 z.sh 都觉得很卡,autojump/fasd 卡到不能用。

最关键的一点,Lua 速度很快 200 KB 的可执行程序,启动速度是 python 的 3倍,perl 的 2 倍,很多命令行工具 go/rust 写成,动不动就 2MB / 3MB,他们都还没有完成加载,lua 脚本可能都运行完了。
最关键的一点,Lua 速度很快 200 KB 的可执行程序,启动速度是 python 的 3 倍,perl 的 2 倍,很多命令行工具 go/rust 写成,动不动就 2MB / 3MB,他们都还没有完成加载,lua 脚本可能都运行完了。


## Credit

Releated projects:

- [rupa/z](https://github.com/rupa/z): origin z.sh implementation
- [JannesMeyer/z.ps](https://github.com/JannesMeyer/z.ps): z for powershell
我的推特:https://x.com/skywind3000
个人博客: https://skywind.me/blog


## License
Expand Down
48 changes: 45 additions & 3 deletions plugins/z.lua/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ From people using z.lua:
- **10x** times faster than **fasd** and **autojump**, **3x** times faster than **z.sh**.
- Gain the ultimate speed with an optional [native module](https://github.com/skywind3000/czmod) written in C.
- Available for **posix shells**: bash, zsh, dash, sh, ash, ksh, busybox and etc.
- Available for Fish Shell, Power Shell and Windows cmd.
- Available for Fish Shell, Nushell, Power Shell and Windows cmd.
- [Enhanced matching algorithm](#enhanced-matching) takes you to where ever you want precisely.
- Allow updating database only if `$PWD` changed with "$_ZL_ADD_ONCE" set to 1.
- Interactive selection enables you to choose where to go before cd.
Expand Down Expand Up @@ -78,6 +78,12 @@ z -b foo bar # replace foo with bar in cwd and cd there

eval "$(lua /path/to/z.lua --init bash enhanced once fzf)"

NixOS users using home-manager can add this to their user profile:

programs.z-lua.enable = true;
programs.z-lua.enableBashIntegration = true;
programs.z-lua.options = [ "enhanced" "once" "fzf" ]; # modify as needed

**NOTE**: For wsl-1 users, `lua-filesystem` must be installed:

sudo apt-get install lua-filesystem
Expand All @@ -90,7 +96,13 @@ z -b foo bar # replace foo with bar in cwd and cd there

eval "$(lua /path/to/z.lua --init zsh)"

Options like "enhanced" and "once" can be used after `--init` too. It can also be initialized from "skywind3000/z.lua" with your zsh plugin managers (antigen / oh-my-zsh).
Options like "enhanced", "once" and "fzf" can be used after `--init` too. It can also be initialized from "skywind3000/z.lua" with your zsh plugin managers (antigen / oh-my-zsh).

NixOS users using home-manager can add this to their user profile:

programs.z-lua.enable = true;
programs.z-lua.enableZshIntegration = true;
programs.z-lua.options = [ "enhanced" "once" "fzf" ]; # modify as needed

**NOTE**: for wsl-1 users, `lua-filesystem` must be installed.

Expand Down Expand Up @@ -118,6 +130,24 @@ z -b foo bar # replace foo with bar in cwd and cd there

into the same file.

NixOS users using home-manager can add this to their user profile:

programs.z-lua.enable = true;
programs.z-lua.enableFishIntegration = true;
programs.z-lua.options = [ "enhanced" "once" "fzf" ]; # modify as needed

- Nushell

Put something like this in your `env.nu`:

lua /path/to/z.lua --init nushell | save -f ~/.cache/zlua.nu

Then put something like this in your `config.nu`:

source ~/.cache/zlua.nu

Note: Only Nushell v0.96+ is supported

- Power Shell:

> ⚠️ **WARNING**: users of [Starship Prompt](https://starship.rs/) should add the following command *after* `starship init`.
Expand Down Expand Up @@ -160,7 +190,12 @@ z -b foo bar # replace foo with bar in cwd and cd there
- set `$_ZL_ECHO` to 1 to display new directory name after cd.
- set `$_ZL_MATCH_MODE` to 1 to enable enhanced matching.
- set `$_ZL_NO_CHECK` to 1 to disable path validation, use `z --purge` to clean
- set `$_ZL_HYPHEN` to 1 to treat hyphon (-) as a normal character not a lua regexp keyword.
- set `$_ZL_HYPHEN` to 0 to treat a hyphen (`-`) as a
[lua regexp special character](https://www.lua.org/pil/20.2.html),
set `$_ZL_HYPHEN` to 1 to treat a hyphen as a normal character.
If `$_ZL_HYPHEN` is not set or if it is set to `auto`, z.lua tries to treat `-`
as a lua regexp special character first. If there are no matches, z.lua tries
again, this time treating `-` as a normal character.
- set `$_ZL_CLINK_PROMPT_PRIORITY` change clink prompt register priority (default 99).

## Aging
Expand Down Expand Up @@ -380,6 +415,12 @@ Bash is not as powerful as zsh/fish, so we introduced fzf-completion for bash, i
eval "$(lua /path/to/z.lua --init bash enhanced once echo fzf)"
```

If you want use fzf completion in zsh, initalize your z.lua and append `fzf` keyword after `--init`:

```zsh
eval "$(lua /path/to/z.lua --init zsh enhanced once echo fzf)"
```

Then press `<tab>` after `z xxx`:

![](images/complete-2.png)
Expand Down Expand Up @@ -576,6 +617,7 @@ This project needs help for the tasks below:
- Thanks to [@manhong2112](https://github.com/manhong2112) for Power Shell porting.
- Thanks to [@BarbUk](https://github.com/BarbUk) for fzf completion in Bash.
- Thanks to [@barlik](https://github.com/barlik) for many improvements.
- Thanks to [@brglng](https://github.com/brglng) for nushell porting.

And many others.

Expand Down
8 changes: 4 additions & 4 deletions plugins/z.lua/z.cmd
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
@echo off
setlocal EnableDelayedExpansion

set "HomeDir=%~dp0"
set "PathSave=%PATH%"
set "LuaExe=lua"
set "LuaScript=%HomeDir%z.lua"
set "LuaScript=%~dp0z.lua"
set "MatchType=-n"
set "StrictSub=-n"
set "RunMode=-n"
Expand Down Expand Up @@ -91,7 +89,9 @@ if /i "%1"=="--purge" (
:check

if /i "%1"=="" (
set "RunMode=-l"
if /i "%InterMode%"=="" (
set "RunMode=-l"
)
)

for /f "delims=" %%i in ('cd') do set "PWD=%%i"
Expand Down
Loading