-
Vì sao tính năng tự động sửa của Git lại quá nhanh
- Tính năng tự động sửa của Git chờ 0,1 giây trước khi thực thi một lệnh bị gõ sai.
- Khoảng thời gian này tương đương với một cái chớp mắt của con người, nên rất khó để phản ứng.
- Tính năng này bắt nguồn từ sự hiểu nhầm về đơn vị thời gian do người bảo trì Git đề xuất và một cấu hình sai.
-
Tính năng này được thiết kế như thế nào?
- Theo mặc định, Git không thực thi lệnh bị gõ sai.
- Hành vi mặc định là gợi ý các lệnh tương tự rồi thoát.
- Năm 2008, Johannes Schindelin đã đưa vào một bản vá để tìm và thực thi lệnh tương tự.
- Alex Riesen đã thêm khả năng cấu hình tính năng này thông qua thiết lập
help.autocorrect.
- Đặt
help.autocorrect thành 1 sẽ khiến lệnh được thực thi sau 0,1 giây.
-
Giá trị cấu hình phù hợp là gì?
- Đặt thành
10 sẽ chờ trong 1 giây.
- Theo tài liệu, các giá trị có thể cấu hình như sau:
0: hiển thị lệnh được gợi ý.
- số dương: thực thi lệnh sau khoảng thời gian 0,1 giây đã chỉ định.
immediate: thực thi lệnh ngay lập tức.
prompt: hiển thị lệnh được gợi ý và hiện lời nhắc hỏi có thực thi hay không.
never: không thực thi hoặc hiển thị lệnh được gợi ý.
- Thiết lập
prompt có thể là lựa chọn hợp lý nhất.
-
Git đoán như thế nào?
- Git sử dụng một thuật toán khoảng cách Levenshtein đã được chỉnh sửa đơn giản để đoán lệnh.
- Nếu vượt quá một ngưỡng khoảng cách nhất định, Git sẽ không đoán.
- Ví dụ,
git bass có thể được đoán thành rebase, nhưng bassa thì không.
-
Bản sửa nhỏ của tôi
- Tác giả đã viết một bản vá nhỏ để diễn giải giá trị
1 là "ngay lập tức".
- Người bảo trì Git yêu cầu diễn giải đúng tất cả các giá trị chuỗi boolean.
- Khi bản vá này được áp dụng, các phiên bản Git trong tương lai sẽ không còn kiểm tra tốc độ phản xạ của bạn nữa.
1 bình luận
Ý kiến Hacker News
Giai thoại Hal Finney khi viết trình thông dịch BASIC cho hệ thống Mattel Intellivision vào thập niên 70 đã rút gọn thông báo lỗi thành "EH?" khá thú vị
Vấn đề phát sinh vì tên thiết lập không rõ ràng. Đáng lẽ cần một tên rõ nghĩa như
help.autocorrect_enabledint timeout_msecthay vìint timeoutCó vẻ là một thiết kế sai. Nên tránh việc diễn giải lại giá trị thiết lập hiện có để thay đổi hành vi
help.autocorrectđược đo bằng đơn vị không tiêu chuẩn là không ổn. Tốt hơn nên cấu hình bằng boolean và số thập phânĐây là một ví dụ điển hình của "creeping featurism". Nó gây ra sự phức tạp không cần thiết
Việc dùng đơn vị decisecond không được bàn tới. xmobar cũng gặp vấn đề tương tự
Nếu đặt
help.autocorrectthành 1, nó sẽ tiếp tục sau khi chờ 100ms. Đáng lẽ nên thêm một thiết lập mớiinnodb_flush_log_at_trx_commitcủa MySQL cũng có một sai lầm tương tựKhi đặt autocorrect thành 3 giây, nó không phân biệt được hành động nguy hiểm và hành động an toàn, đồng thời làm bẩn lịch sử shell bằng các lệnh gõ sai
Khi gõ sai lệnh, có thể nhấn ctrl-C ngay lập tức để hủy trước khi timeout 100ms kết thúc
Decisecond là đơn vị không tiêu chuẩn. Chỉ định độ trễ bằng mili giây hoặc giây là phổ biến hơn
Thời gian phản ứng khác nhau tùy loại kích thích. Thính giác nhanh hơn thị giác, và xúc giác là nhanh nhất (90 - 180 ms)