Apa format untuk opsi -F dari _path_files
dan compadd
?
Saya melewati beberapa direktori ke _path_files
:
_path_files -W "($base_directories)" -/
Tetapi beberapa pohon direktori tersebut tidak ingin saya selesaikan untuk perintah khusus ini.
Dokumentasi yang dapat saya temukan untuk _path_files
mengatakan menerima -F
opsi—seperti compadd
, tetapi saya tidak dapat menemukan format untuk meneruskannya.
Berputar-putar juga tidak membuahkan hasil.
Saya sudah mencoba, misalnya,
_path_files -W "($base_directories)" -/ -F shared; # shared still shows up
_path_files -W "($base_directories)" -/ -F "(shared)"; # barfs on that guy
Jawaban yang Diterima:
Itu terlihat benar jika Anda ingin mengabaikan shared
di akar pohon direktori, yaitu jika Anda mengabaikan salah satu $base_directories
. Tetapi jika Anda bermaksud mengabaikan shared
di suatu tempat yang lebih dalam dalam hierarki, Anda memerlukan -F "(shared **shared)"
. Anda juga dapat menempatkan pola dalam array, yang akan mengurangi kesulitan mengutip.
local -a ignored base_directories
base_directories=(…)
ignored=(shared '*/shared')
_path_files -W base_directories -/ -F ignored
Ada contoh dalam distribusi standar di _cvs
dan _darcs
.
Jika ini tidak membantu, coba selidiki apa yang terjadi dengan menambahkan set -x
dan set +x
di sekitar kode yang bermasalah, atau setopt local_options xtrace
(alias set -x
dan ubah opsi hanya selama fungsi saat ini).