Có nó có thể sụp đổ các thư mục để một đường dẫn chữ cái đầu tiên và có Vỏ Z mở rộng đường dẫn đó khi nhấn [Tab]. Tôi đơn giản sử dụng compinstall (kịch bản tiện ích zsh được cài đặt với Zsh) để tạo mã sau đây. Phần quan trọng cần lưu ý về việc mở rộng các phần tử đường dẫn là trên lệnh thứ sáu zstyle
, gần cuối, trong đó khung ký tự để tách các điểm hoàn thành với bao gồm /
, tất nhiên là dấu tách thư mục. Với điều này, các đường dẫn duy nhất bạn đề xuất sẽ điền đầy đủ chỉ bằng một lần nhấn [Tab] như thể *
ở cuối mỗi chữ cái tên đường dẫn duy nhất.
# The following lines were added by compinstall
zstyle ':completion:*' add-space true
zstyle ':completion:*' completer _list _expand _complete _ignored _match _correct _approximate _prefix
zstyle ':completion:*' completions 1
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' matcher-list 'm:{[:lower:]}={[:upper:]} r:|[._-]=* r:|=*' 'm:{[:lower:]}={[:upper:]} m:{[:lower:][:upper:]}={[:upper:][:lower:]} r:|[._-]=* r:|=*' 'r:|[._-/]=* r:|=*' 'l:|=* r:|=*'
zstyle ':completion:*' match-original both
zstyle :compinstall filename '/home/micah/.zsh/.zshrc'
autoload -Uz compinit
compinit
# End of lines added by compinstall
Đối với việc tạo ra con đường độc đáo ở nơi đầu tiên và chèn nó vào cửa sổ, có thể với một kịch bản zsh hoặc chức năng, và do đó nên thể cho Completer hoặc line-biên tập viên cũng có, nhưng chỉ cần gắn vào lời nhắc, bạn sẽ thêm một hàm vào mảng $precmd_functions
sửa đổi hoặc thêm vào biến số PS1
. Mảng đặc biệt này là danh sách các tên hàm được chạy ngay trước mỗi dấu nhắc.
function precmd_unique_pwd {
local pwd_string="$(upwd)"
PS1="%B%[email protected]%m $pwd_string => %b"
}
precmd_functions+=(precmd_unique_pwd)
Để nhận của PWD hiện nay ở dạng rút gọn, tôi nghĩ rằng chức năng này là rõ ràng và dễ dàng để làm theo, mặc dù không nhất thiết phải tối ưu hóa cho việc sử dụng nguồn lực hạn chế.
#!/bin/zsh
function upwd {
emulate -LR zsh -o nullglob
local dir Path
local -a newpwd tmp stack
local -i length=1 Flag=0
newpwd=(${(s./.)PWD})
foreach dir ($newpwd)
((length=0, Flag=0))
repeat $#dir
do
((length += 1))
tmp=(${(j.*/.)~stack}/$dir[1,$length]*(/))
if
(($#tmp == 1))
then
Path=$Path/$dir[1,$length]
stack+=(/$dir)
((Flag=1))
break
fi
done
if
((Flag))
then
continue
else
Path=$Path/$dir
fi
end
print -- $Path
}
upwd
Lưu ý rằng nó tìm đường dẫn duy nhất có tên thư mục vì tính năng Zsh (/)
ở cuối thời gian kết thúc. Trên thư mục cuối cùng (hiện tại) điều này có nghĩa là bạn có thể khớp thứ gì đó khác nếu có một tệp có cùng tên cộng với một phần mở rộng.
Nguồn
2017-07-30 18:46:03
Cảm ơn bạn, nó hoạt động trong lời nhắc của tôi như một sự quyến rũ. Bạn sẽ đề xuất tài nguyên nào để có được tổng quan về cú pháp zsh? – eumiro
Có lẽ tài nguyên toàn diện nhất bạn sẽ tìm thấy là [Hướng dẫn sử dụng vỏ Z] (http://zsh.sourceforge.net/Doc/Release/), tài liệu tham khảo chính thức. Đó là nơi tôi đi đến bất cứ khi nào tôi muốn đào sâu vào cú pháp, và tôi thường lướt qua nó để hiểu một số cú pháp tốt hơn. Ngoài ra còn có [hướng dẫn sử dụng] (http://zsh.sourceforge.net/Guide/zshguide.html), đó là một chút kinh nghiệm học tập hơn là một tham chiếu, mặc dù tôi rất buồn khi nói rằng nó đã không được hoàn thành. Nhưng đó là một tài nguyên bắt đầu tốt, nếu không phải là một chút dài dòng và chưa được định dạng. –