Tôi sử dụng tab hoàn thành nhiều hơn gõ chữ. Tôi đã từng gõ rm ~/De<TAB>
và nó sẽ được hoàn thành để rm ~/Desktop/
tôi có thể tiếp tục ở cấp độ tiếp theo.
Gần đây, hành vi đó đã thay đổi. Việc hoàn thành bây giờ mang lại rm ~/Desktop<SPACE>
, có nghĩa là tôi phải lùi lại và gõ dấu gạch chéo nếu tôi muốn tiếp tục. Điều này làm tôi khóc.
Các thay đổi dường như nằm trong hàm _longopt()
trong /etc/bash_completion
, tuy nhiên đó là xa nhất mà tôi có thể làm theo. Là sự thay đổi này có chủ ý, và nếu vậy, nó tốt cho cái gì? Tôi có thể lấy lại hành vi cũ hay không, tốt nhất là bằng tùy chọn cấu hình thay vì chỉ sao chép mã cũ từ một số hệ thống khác?
Chỉnh sửa: Các chức năng để tham khảo.
_longopt()
{
local cur prev split=false
_get_comp_words_by_ref -n = cur prev
_split_longopt && split=true
case "$prev" in
--*[Dd][Ii][Rr]*)
_filedir -d
return 0
;;
--*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
_filedir
return 0
;;
esac
$split && return 0
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
-- "$cur" ) )
elif [[ "$1" == @(mk|rm)dir ]]; then
_filedir -d
else
_filedir
fi
}
_longopt()
chức năng của bạn ?
readline
cài đặt (bạn có ~/inputrc
tập tin không?) Và trên thực tế rằng mục đó là một thư mục thực hoặc một liên kết tượng trưng đến một thư mục.
.inputrc
trên hệ thống này nữa. (Đó là những ngày, sửa lỗi backspace và phím con trỏ) Và nó xảy ra cho tất cả các thành phần, thư mục hoặc tệp, symlink hay không.
rmdir
, không phải chomkdir
hoặctouch
.