OK, sedikit latar belakang: Saya menggunakan Mac, dan saya melakukan sebanyak mungkin di CLI.
Secara khusus, saya sering memasukkan USB stick, cp
atau mv
file lebih, dan kemudian segera ingin mengeluarkan (unmount dan lepaskan) itu. Ini biasanya dapat dilakukan dalam beberapa penekanan tombol, kecuali untuk unmount, yang mengharuskan (dalam 10.7) pergi ke ruang desktop yang kosong (biasanya setidaknya dua ruang jauhnya), memilih disk, dan menekan "command-e". Sejujurnya, prosedur unmount ini, dengan beberapa urutan besarnya, bagian proses yang paling memakan waktu dan melelahkan.
Akan jauh lebih alami dan efisien untuk hanya bisa mengetik, katakan:
ej<tab> J<tab>
Ucapkan stik USB stick saya di / Volume / Jefferson. Apa yang saya harapkan dari 6 penekanan tombol adalah sebagai berikut:
eject /Volumes/Jefferson
Ini harus menjalankan perintah:
diskutil unmount /Volumes/Jefferson
Jadi, saya menulis fungsi kecil yang menyenangkan:
eject() {
diskutil unmount /Volumes/$1
}
Dan fungsi penyelesaian untuk menyertainya:
compdef '_files -g "/Volumes/*"' eject
Namun, ada masalah dengan ini. The _files
Fungsi menghasilkan jalur lengkap. Sekarang, saya dapat mengubah baris dalam fungsi "eject" saya diskutil unmount $1
, dan semuanya akan berfungsi, tetapi kemudian saya tidak memiliki kemampuan untuk mengetik huruf pertama dari nama titik mount, karena jalur dimulai dengan / Volume /. Misalnya, jika saya mengetik J<tab
, saya akan mendapatkan pelengkapan otomatis untuk file di PWD. Saya harus mengetik /Volumes/J<tab>
untuk mendapatkan penyelesaian yang diinginkan.
Jadi, apakah ada fungsi penyelesaian yang mengambil nama file dari lokasi yang telah ditentukan, spesifik, daripada menghasilkan jalur lengkap?
Saya benar-benar ingin mendapatkan ini hingga 6 penekanan tombol.
sumber
compdef
baris di file yang_eject
terletak di fpath saya. Saya mencobanya dengan dan tanpa saluran pengisian otomatis. Saya melihat beberapa panduan tentang fungsi penyelesaian dan tidak ada yang membahas bagaimana melakukan contoh sederhana yang nyata seperti ini, dan tidak ada yang saya coba berdasarkan salah satu contoh mereka yang berhasil.#compdef eject
baris pertama file, lalu kode asli. Lihat di bawah file yang dimuat secara otomatis di manual. Jika Anda tidak menambahkan baris pada awalnya, Anda mungkin perlu menghapus cache~/.zcompdump
dan memulai kembali zsh.~/.zcompdump
berhasil. Terima kasih lagi!