1
0
mirror of https://github.com/skywind3000/z.lua synced 2026-03-22 15:49:47 +00:00

3 Commits

Author SHA1 Message Date
skywind3000
1c9c5eb444 add newline for cmd 2019-02-15 12:16:25 +08:00
skywind3000
c4a9376c0c update doc for 1.5.1 2019-02-15 11:52:03 +08:00
skywind3000
eea474d3ea add z -, z --, z -2 2019-02-15 11:38:31 +08:00
4 changed files with 79 additions and 19 deletions

View File

@@ -341,6 +341,26 @@ alias zh='z -I -t .'
第一列数据代表该路径多少秒以前访问过,第二列是路径名称。此时,你可以试着敲几个字母,用 fzf 的字符串模糊匹配进行定位或者用光标键的上和下CTRL+J/K 也可以)来上下移动,最后按回车 cd 过去,或者 ESC 放弃。
版本 `v1.5.1` 引入了模拟 "dir stack" 可以通过: `z -``z --` 和 `z -{num}` 来操作:
```bash
# 显示当前的 dir stack
$ z --
0 /home/skywind/work/match/memory-match
1 /home/skywind/.local/etc
2 /home/skywind/software/vifm-0.9.1
3 /home/skywind/work
4 /home/skywind/work/match
# cd 到栈里 2 号路径
$ z -2
=> cd /home/skywind/software/vifm-0.9.1
# 弹出栈顶 (cd 到上一次的老路径),和 "z -0" 相同
$ z -
=> cd -
```
注意:最好把增强匹配模式打开,这样查看历史路径时可以把当前路径过滤掉。
## Tips

View File

@@ -355,11 +355,32 @@ The new alias `zh` (jump to history) uses a parameter `-t` to sort the result by
The first column indicates how many seconds ago you have visited, and the second column is the path name. With `zh`, you can type some character to use string matching in fzf, or use `<Up>`/`<Down>` (as well as `CTRL+j/k`) to move the selector (red `>`) up and down.
At last, press `<enter>` to accept or `<ESC>` to give up.
At last, press `<enter>` to accept or `<ESC>` to give up.
Version `v1.5.1` has introduced a simulated "dir stack", which can be manipulated by `z -`, `z --` and `z -{num}`:
```bash
# display current dir stack
$ z --
0 /home/skywind/work/match/memory-match
1 /home/skywind/.local/etc
2 /home/skywind/software/vifm-0.9.1
3 /home/skywind/work
4 /home/skywind/work/match
# cd to the 2nd directory in the stack
$ z -2
=> cd /home/skywind/software/vifm-0.9.1
# popup stacktop (cd to previous directory), same as "z -0"
$ z -
=> cd -
```
Remember to enable the [enhanced matching](#enhanced-matching) algorithm, the current working directory can be skipped with it.
## Tips
Recommended aliases you may find useful:
@@ -427,6 +448,7 @@ As you see, z.lua is the fastest one and requires less resource.
## History
- 1.5.1 (2019-02-15): new: simulated dir stack by `z -`, `z --` and `z -{num}`.
- 1.5.0 (2019-02-14): fixed minor issues in backward jumping.
- 1.4.7 (2019-02-13): Don't use regex in backward jumping (use plain text instead).
- 1.4.6 (2019-02-12): change: `_ZL_EXCLUDE_DIRS` to a comma separated list of dirs to exclude.

1
z.cmd
View File

@@ -108,4 +108,5 @@ if /i "%RunMode%"=="-n" (
)
:end
echo.

53
z.lua
View File

@@ -4,7 +4,7 @@
-- z.lua - a cd command that learns, by skywind 2018, 2019
-- Licensed under MIT license.
--
-- Version 1.5.0, Last Modified: 2019/02/14 22:57
-- Version 1.5.1, Last Modified: 2019/02/15 11:26
--
-- * 10x faster than fasd and autojump, 3x faster than z.sh
-- * available for posix shells: bash, zsh, sh, ash, dash, busybox
@@ -124,7 +124,6 @@ Z_SKIPPWD = false
os.LOG_NAME = os.getenv('_ZL_LOG_NAME')
-----------------------------------------------------------------------
-- string lib
-----------------------------------------------------------------------
@@ -779,8 +778,16 @@ function os.getopt(argv)
if head ~= '-' then
break
end
local part = arg:split('=')
options[part[1]] = part[2] ~= nil and part[2] or ''
if arg == '-' then
options['-'] = ''
elseif arg == '--' then
options['-'] = '-'
elseif arg:match('^-%d+$') then
options['-'] = arg:sub(2)
else
local part = arg:split('=')
options[part[1]] = part[2] ~= nil and part[2] or ''
end
end
index = index + 1
end
@@ -1540,16 +1547,28 @@ end
-----------------------------------------------------------------------
-- cd forward
-- cd minus: "z -", "z --", "z -2"
-----------------------------------------------------------------------
function cd_forward(args, options)
end
-----------------------------------------------------------------------
-- cd detour
-----------------------------------------------------------------------
function cd_forward(args, options)
function cd_minus(args, options)
Z_SKIPPWD = true
local M = z_match({}, 'time', Z_SUBDIR)
local size = #M
if options['-'] == '-' then
for i, item in ipairs(M) do
if i > 10 then break end
io.stderr:write(' ' .. tostring(i - 1) .. ' ' .. item.name .. '\n')
end
else
local level = 0
local num = options['-']
if num and num ~= '' then
level = tonumber(num)
end
if level >= 0 and level < size then
return M[level + 1].name
end
end
return nil
end
@@ -1588,10 +1607,8 @@ function main(argv)
local path = ''
if options['-b'] then
path = cd_backward(args, options)
elseif options['-f'] then
path = cd_forward(args, options)
elseif options['-d'] then
path = cd_detour(args, options)
elseif options['-'] then
path = cd_minus(args, options)
elseif #args == 0 then
path = nil
else
@@ -2049,8 +2066,8 @@ function _zlua
else
_zlua_call "$_ZL_CD" "$dest"
end
if test -n "$_ZL_ECHO"; pwd; end
end
if test -n "$_ZL_ECHO"; pwd; end
end
end