zsh cdpath dan pelengkapan otomatis

3

CDPATH saya di zsh terlihat seperti ini:

export CDPATH='.:..:../..'

Sayangnya, ini berarti bahwa ketika saya mencoba melakukan pelengkapan otomatis setelah mengetik 'cd', ada terlalu banyak opsi pelengkapan otomatis yang tidak relevan, tergantung di mana saya berada. Misalnya, jika saya berada di direktori home saya, mengetikkan cd akan mencoba melengkapi secara otomatis setiap pengguna di sistem karena CDPATH memiliki ".."

Apakah ada cara untuk menjaga CDPATH saya seperti yang ditunjukkan di atas, tetapi memiliki autocomplete untuk cd, pushd, dll. Mengabaikan nilai CDPATH, dan autocomplete hanya berdasarkan direktori saat ini?

PonyEars
sumber

Jawaban:

7

path-directories

Salah satu caranya adalah menambahkan pengaturan penyelesaian berikut di Anda .zshrcuntuk menghapus path-directoriesdari sumber saran.

zstyle ':completion:*:complete:(cd|pushd):*' tag-order \
    'local-directories named-directories'

nama grup

Sebagai alternatif atau tambahan, pengaturan berikut harus menampilkan tajuk untuk semua grup masing-masing saran penyelesaian sehingga Anda dapat melihat direktori mana yang merupakan direktori lokal dan mana yang merupakan saran dari Anda cdpath.

zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format %d

Anda dapat menerapkan format prompt standar ke deskripsi ini untuk membuatnya menonjol:

zstyle ':completion:*:descriptions' format %B%d%b        # bold
# zstyle ':completion:*:descriptions' format %S%d%s        # invert/standout
# zstyle ':completion:*:descriptions' format %U%d%u        # underline
# zstyle ':completion:*:descriptions' format %F{green}%d%f # green foreground
# zstyle ':completion:*:descriptions' format %K{blue}%d%k  # blue background
# etc.

Itu membantu memahami sumber yang berbeda sedikit dalam pengalaman saya.


Catatan 1 : zshmemiliki dua representasi untuk variabel array seperti PATHdan CDPATH, yang varian huruf kecilnya adalah array aktual. Ini berarti Anda dapat:

cdpath=(path/to/dir /path/to/another/dir)

Atau, untuk mendapatkan hasil yang Anda inginkan:

cdpath=(.. ../..)

Saya pribadi merasa sedikit lebih mudah dibaca daripada array pseudo yang dipisahkan oleh titik dua.

Catatan 2 : Mengekspor CDPATHtidak perlu kecuali Anda memiliki beberapa program yang ingin diatur.

peth
sumber
1
Ini bagus. Terima kasih tidak hanya memberi saya jawaban tepat yang saya cari, tetapi juga mengarahkan saya ke hal-hal yang sangat berguna seperti pengelompokan dan pemformatan (dan bahkan tip array sejati) Saya bahkan tidak akan berpikir untuk menjelajah!
PonyEars
Saya mengalami kesulitan dengan penyelesaian cd sampai saya membuat pengaturan ini. Terima kasih.
ismail