it-swarm-vi.tech

Những tính năng zsh nào bạn sử dụng?

Tôi làm rất nhiều công việc trong thiết bị đầu cuối vì vậy tôi đã học được rất nhiều về Shell mà tôi chọn, zsh. Những tính năng nào của zsh bạn sử dụng để làm cho bản thân hiệu quả hơn trong công việc? Một trong những mục yêu thích của tôi là tự động hoàn thành nhiều dir. Vì vậy, thay vì nhập cd /fo{tab}/ba{tab}/ba{tab} tôi chỉ có thể làm cd /fo/ba/ba{tab} và lưu lại nhiều tổ hợp phím đó!

33
Frew Schmidt

Chỉ cần tìm thấy viên ngọc nhỏ này:

cd old new

Dạng cd này thay thế tất cả các lần xuất hiện của old trong đường dẫn đầy đủ của thư mục hiện tại bằng new và cố gắng thay đổi thư mục làm việc thành đường dẫn kết quả.

Ví dụ: nếu thư mục làm việc của bạn là /home/larry/code/backrub/server và bạn muốn chuyển sang /home/sergei/code/backrub/server, tất cả những gì bạn cần làm là:

cd larry sergei
49
Agnel Kurian

Tôi sẽ giữ những điều mà theo như tôi biết, bash không thể làm được.

  • Fancy hoàn thành. Vâng, bash có một số trong đó, nhưng zsh biết nhiều lệnh hơn, thường chính xác hơn và có nhiều khả năng cấu hình hơn.

  • ** global, ví dụ: **/foo tìm kiếm các tệp có tên foo trong các thư mục con theo cách đệ quy. (Và ***/foo cũng tuân theo các liên kết tượng trưng.) Hai ký tự thay vì lệnh find dài (khó có thể đúng nếu một số tên tệp bao gồm các ký tự đặc biệt như dấu cách và dấu ngoặc kép).

  • Ít thường xuyên hơn, vòng loại toàn cầu như trong foo*(*) (như foo*, nhưng chỉ giữ lại các tệp thực thi), foo(.) (chỉ các tệp thông thường, không phải thư mục), foo([email protected]) (chỉ treo các liên kết tượng trưng), foo*(m-5) (chỉ các tệp được sửa đổi trong 5 phút cuối), foo*(om[1]) (tệp được sửa đổi gần đây nhất), v.v.

  • autocd: Nhập tên thư mục khi một lệnh thay đổi vào nó (cd hoặc pushd tùy thuộc vào cách bạn định cấu hình nó). Lệnh cd dài ba ký tự! Tôi không thể sử dụng bash trong hơn ba mươi giây mà không cảm thấy đau. Tôi cũng có một vài chức năng một ký tự, chẳng hạn như

Hàm [.__.] - {[.__.] nếu [[$ # -eq 0]]; sau đó [.__.] cd "$ OLDPWD" [.__.] khác [.__.] dựng sẵn - "$ @" [.__.] fi [.__.]} [.__.]
  • Nội dung dựng sẵn zmv
[.__.] bí danh zcp = 'noglob zmv -C' [.__.] bí danh zln = 'noglob zmv -L' [.__.] bí danh zmv = 'noglob zmv' [.__.]
  • Trong khi tôi đang ở đó, tích hợp noglob.

  • Các hàm hook precmdpreexec: Tôi sử dụng preexec để đặt tiêu đề của thiết bị đầu cuối của tôi để bao gồm lệnh đang chạy và precmd để thay thế lệnh bằng mã thoát của nó. Cái gì đó như

[.__.] term_title_base = '@% l:% 1 ~' [.__.] preexec () {[.__.] print -nr $ '\ e] 2;' "$ {(%) term_title_base} $ * "'$\a' [.__.]} [.__.] premd () {[.__.] print -nr $ '\ e] 2;'" $ {(%) term_title_base} ($?) "'$\a' [.__.]} [.__.]
  • Ctrl + Z: [.__.]
    • Trên một dòng lệnh trống chạy bg (để Ctrl + Z Ctrl + Z tạm dừng một chương trình và ngay lập tức tiếp tục lại nó trong nền).
    • Trên một dòng lệnh không trống, tạm dừng phiên bản lệnh hiện tại: hãy để tôi gõ một lệnh khác và khi dòng lệnh thứ hai kết thúc, tôi lấy lại lệnh đầu tiên để chỉnh sửa.
    • Điều này sử dụng chức năng sau đây:
[.__.] Fancy-ctrl-z () {[.__.] nếu [[$ # BUFFER -eq 0]]; sau đó [.__.] bg [.__.] zle redisplay [.__.] other [.__.] zle Push-input [.__.] fi [.__.]} [.__.] zle -N -ctrl-z [.__.] bindkey '^ Z' Fancy-ctrl-z [.__.]
  • Các tùy chọn không liên quan đến việc hoàn thành quan trọng nhất: setopt append_history autocd extended_glob no_match
21
Gilles

khả năng tự động hoàn tất mọi thứ của zsh bên cạnh các tệp và thư mục.

Ví dụ: với gói git được cài đặt, git-sh {tab} sẽ hiển thị:

[.__.] - lệnh git - [.__.] shortlog - tóm tắt kết quả đầu ra của nhật ký git [.__.] gói tập tin idx
13
Mark Thalman

Tôi thực sự thích các bí danh toàn cầu

alias -g L='|less
alias -g DN='>/dev/null'

hãy để tôi làm những việc như

somecommand file arg L

và được phân trang.

10
hometoast

Như đã đề cập bởi những người khác, tự động hoàn thành của zsh là tuyệt vời.

Bạn có thể thiết lập tự động hoàn thành cho các lệnh tùy chỉnh mà không gặp quá nhiều rắc rối. Để tab hoàn thành tên người dùng làm đối số cho ngón tay:

# ~/.zshrc
function userlist {
        reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES

Các tùy chọn khác tôi muốn đặt:

# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber

Pushd và popd cũng khá tiện dụng.

# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME

Mặc định các phím home và end không mặc định hoạt động trên zsh giống như các phím khác, nhưng bạn có thể sửa lỗi này.

# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
7
theotherreceive

Bật tự động hoàn tất khi sử dụng scp trên máy chủ từ xa.

Lời nhắc bên phải để hiển thị thông tin bổ sung.

5
Rob Wells