OK, một chút nền tảng: Tôi sử dụng máy Mac và tôi làm nhiều nhất có thể trong CLI.
Cụ thể, tôi thường xuyên bật một thanh USB cp
hoặc mv
tập tin qua, sau đó ngay lập tức muốn đẩy ra (ngắt kết nối và ngắt kết nối) nó. Điều này thường có thể được thực hiện trong một số lần nhấn phím, ngoại trừ việc ngắt kết nối, yêu cầu (trong 10.7) đi đến một không gian để bàn trống (thường là ít nhất hai khoảng cách), chọn đĩa và nhấn "lệnh-e". Thành thật mà nói, thủ tục không đếm được này, theo một số đơn đặt hàng lớn, là phần tốn thời gian và tẻ nhạt nhất của quy trình.
Nó sẽ là tự nhiên và hiệu quả hơn nhiều chỉ đơn giản là có thể gõ, nói:
ej<tab> J<tab>
Nói thanh USB của tôi gắn kết tại / Tập / Jefferson. Những gì tôi mong đợi nhận được từ 6 lần nhấn phím của mình là như sau:
eject /Volumes/Jefferson
Điều này sẽ chạy lệnh:
diskutil unmount /Volumes/Jefferson
Vì vậy, tôi đã viết một chức năng nhỏ đẹp:
eject() {
diskutil unmount /Volumes/$1
}
Và một chức năng hoàn thành đi kèm với nó:
compdef '_files -g "/Volumes/*"' eject
Có một vấn đề với điều này, tuy nhiên. Các _files
chức năng tạo ra đường dẫn đầy đủ. Bây giờ, tôi có thể thay đổi dòng trong chức năng "đẩy" của mình thành diskutil unmount $1
và mọi thứ sẽ hoạt động, nhưng sau đó tôi không có khả năng nhập chữ cái đầu tiên của tên điểm gắn kết, vì đường dẫn bắt đầu bằng / Tập /. Chẳng hạn, nếu tôi gõ J<tab
, tôi sẽ tự động hoàn thành các tệp trong PWD. Tôi sẽ phải gõ /Volumes/J<tab>
để có được sự hoàn thành mong muốn.
Vì vậy, có chức năng hoàn thành nào lấy tên tệp từ một vị trí cụ thể, được xác định trước, thay vì tạo đường dẫn hoàn chỉnh không?
Tôi thực sự muốn giảm xuống còn 6 lần nhấn phím.