Apa fitur zsh yang Anda gunakan? [Tutup]

33

Saya melakukan banyak pekerjaan di terminal jadi saya telah belajar banyak tentang cangkang pilihan saya, zsh. Fitur zsh apa yang Anda gunakan untuk membuat diri Anda jauh lebih produktif di tempat kerja? Salah satu favorit saya adalah autocomplete multi-dir. Jadi, alih-alih mengetik, cd /fo{tab}/ba{tab}/ba{tab}saya bisa melakukan cd /fo/ba/ba{tab}dan menyimpan banyak penekanan tombol!

Frew Schmidt
sumber
2
saya tidak tahu tentang fitur itu, saya harus mencoba yang itu!
Roy Rico
1
Opsi mana yang melengkapi direktori itu?
hometoast

Jawaban:

50

Baru saja menemukan permata kecil ini:

cd old new

Bentuk ini cdmenggantikan semua kejadian olddalam path lengkap dari direktori sekarang dengan newdan mencoba untuk mengubah direktori kerja ke path yang dihasilkan.

Misalnya, jika direktori kerja /home/larry/code/backrub/serverAnda dan Anda ingin beralih ke /home/sergei/code/backrub/server, yang perlu Anda lakukan adalah:

cd larry sergei
Agnel Kurian
sumber
7
Oke, itu aturannya.
Hometoast
21

Saya akan menyimpan hal-hal yang, sejauh yang saya tahu, bash tidak bisa lakukan.

  • Selesai mewah. Ya, bash memiliki beberapa di antaranya, tetapi zsh telah mengetahui lebih banyak perintah, seringkali lebih tepat, dan memiliki lebih banyak kemungkinan konfigurasi.

  • The **gumpal, misalnya, **/footerlihat untuk file yang disebut foodalam subdirektori secara rekursif. (Dan ***/foojuga mengikuti symlink.) Dua karakter bukannya panjangfind perintah (yang sulit untuk diperbaiki jika beberapa nama file menyertakan karakter khusus seperti spasi dan tanda kutip).

  • Lebih jarang, kualifikasi glob seperti pada foo*(*)(seperti foo*, tetapi hanya menyimpan file yang dapat dieksekusi), foo(.)(hanya file biasa, bukan direktori), foo(-@) (hanya tautan yang menggantung), foo*(m-5)(hanya file yang dimodifikasi dalam 5 menit terakhir), foo*(om[1])(file yang paling baru dimodifikasi) , dll.

  • autocd: Mengetik nama direktori sebagai perintah berubah menjadi itu ( cdatau pushdtergantung pada bagaimana Anda mengkonfigurasinya). The cdperintah tiga karakter terlalu lama! Saya tidak bisa menggunakan bash selama lebih dari tiga puluh detik tanpa merasakan sakit. Saya juga memiliki beberapa fungsi karakter tunggal, seperti

fungsi - {
  if [[$ # -eq 0]]; kemudian
    cd "$ OLDPWD"
  lain
    builtin - "$ @"
  fi
}
  • The zmvbuiltin, dan
alias zcp = 'noglob zmv -C'
alias zln = 'noglob zmv -L'
alias zmv = 'noglob zmv'
  • Sementara saya melakukannya, noglobbuiltin.

  • Fungsi precmdand preexechook: Saya gunakan preexecuntuk mengatur judul terminal saya untuk memasukkan perintah yang sedang berjalan, dan precmduntuk mengganti perintah dengan kode keluarnya. Sesuatu seperti

term_title_base = '@% l:% 1 ~'
preexec () {
  print -nr $ '\ e] 2;' "$ {(%) term_title_base} $ *" '$ \ a'
}
precmd () {
  print -nr $ '\ e] 2;' "$ {(%) term_title_base} ($?)" '$ \ a'  
}
  • Ctrl + Z:
    • Pada baris perintah kosong berjalan bg(sehingga Ctrl + Z Ctrl + Z menunda program dan segera melanjutkannya di latar belakang).
    • Pada baris perintah yang tidak kosong, tunda edisi perintah saat ini: izinkan saya mengetikkan perintah lain, dan ketika baris perintah kedua selesai, saya mendapatkan kembali perintah pertama yang akan diedit.
    • Ini menggunakan fungsi berikut:
fancy-ctrl-z () {
  if [[$ # BUFFER -eq 0]]; kemudian
    bg
    zle tampilkan ulang
  lain
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^ Z' fancy-ctrl-z
  • Opsi yang tidak terkait dengan penyelesaian yang paling penting: setopt append_history autocd extended_glob no_match
Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Suka trik ^ Z ^ Z, terima kasih! Awalnya sedang mencari superuser.com/questions/378018 untuk solusi untuk mengikatnya ke tombol tunggal tetapi ^ Z ^ Z jauh lebih masuk akal
Evgeniy Dolzhenko
13

Kemampuan zsh untuk melengkapinya secara otomatis di samping file dan direktori.

Sebagai contoh, dengan paket git diinstal, git-sh {tab} menampilkan:

- perintah git -
shortlog - merangkum git log output
show-branch - menunjukkan cabang dan komitmennya
show-index - menampilkan isi dari file paket idx
Mark Thalman
sumber
1
Ya, ini luar biasa! Saya juga menggunakan ini ketika saya tidak yakin apa itu saklar baris perintah tapi saya tidak perlu menyelidiki file man.
Frew Schmidt
Saya percaya bash memiliki kemampuan ini juga.
Keith Thompson
10

Saya sangat suka alias global

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

biarkan aku melakukan hal-hal seperti

somecommand file arg L

dan paging.

hometoast
sumber
Saya juga suka G untuk grep.
Frew Schmidt
7

Seperti yang disebutkan oleh orang lain, autocomplete zsh sangat bagus.

Anda dapat mengatur autocomplete sendiri untuk perintah kustom tanpa terlalu banyak kesulitan juga. Untuk tab melengkapi nama pengguna sebagai argumen untuk jari:

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

Opsi lain yang saya ingin atur:

# 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 dan popd juga sangat berguna.

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

Mengganggu tombol home dan end tidak secara default berfungsi pada zsh seperti pada shell lainnya, tetapi Anda dapat memperbaikinya.

# 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
theecereceive
sumber
2
Saya cenderung menemukan koreksi ejaan lebih mengganggu daripada benar-benar bermanfaat.
Frew Schmidt
@Frew heh, kamu bukan orang pertama yang mengatakan itu padaku. Salah satu fitur koreksi yang lebih baik adalah ia akan memasukkan versi yang sudah diperbaiki ke dalam riwayat, sehingga Anda tidak akan secara tidak sengaja menjalankan hal yang sama lagi.
theotherreceive
5

Aktifkan pelengkapan otomatis saat menggunakan scpke server jauh.

Prompt yang tepat untuk menampilkan info tambahan.

Rob Wells
sumber
Memang! Saya memiliki prompt yang sangat kompleks tetapi singkat. Hostname [baris saat ini] <error no>%
Frew Schmidt