2017-09-19 14 views
10

Theo haskeline documentation, gõ CTRL + Y nên bật entry mới nhất từ ​​các kill-ring (ví dụ như dòng tôi chỉ xóa qua CTRL + U). Thay vào đó, tôi đang tìm kiếm, nó tạm ngưng REPL, như thể tôi đã nhập CTRL + Z.Haskell: GHCi đối xử với Ctrl-Y như Ctrl-Z

Là một workaround vụng về, tôi đã phát hiện ra rằng gõ CTRL +VCTRL +Y pops từ vòng kill như một đồng bằng CTRL +Y là nghĩa vụ phải làm.

Đây có phải là lỗi đã biết hay là trò chơi khác? Tôi có thể sửa nó không? Tôi đang chạy phiên bản 8.0.2 của GHC.

Không chắc chắn có quan trọng hay không, nhưng tôi đang chạy GHCi qua ngăn xếp (ví dụ: stack ghci) và tôi đã tạo ngăn xếp đã cài đặt (macOS).

+0

Tôi chắc rằng Stack không liên quan, nhưng bạn nên báo cáo phiên bản GHC. – dfeuer

Trả lời

4

Thiết bị đầu cuối Mac OS/tty có khái niệm về khóa "dsusp" hoặc "trì hoãn bị trì hoãn" và Ctrl-Y là khóa thông thường được chỉ định. Ở cấp độ tty, khi CTRL + Y được đọc, nó hoạt động giống như CTRL + Z. Sự khác biệt là CTRL + Z gây ra tạm ngưng ngay lập tức khi được nhập; CTRL +Y làm cho đình chỉ khi quá trình cơ bản cố gắng đọc ký tự và CTRL +Y marker bật lên trong dòng đầu vào.

(CTRL + V thường được gán cho "lnext" chìa khóa, mà bỏ qua chế biến thiết bị đầu cuối bằng cách làm cho tới chìa khóa "đen", đó là lý do CTRL + VCtrl + Y hoạt động.)

Lý tưởng nhất, GHCi sẽ kiểm tra chức năng "dsusp" (nó không tồn tại trên Linux) và vô hiệu hóa nó nếu nó được phát hiện, nhưng có vẻ như nó không làm điều này.

Trong khi đó, bạn có thể vô hiệu hóa "dsusp" của bạn chìa khóa bằng cách chạy:

stty dsusp undef 

trước khi bạn khởi động GHCi. Việc gắn kết điều này trong ".bashrc" và/hoặc ".profile" của bạn là một ý tưởng hay, vì chức năng này phần lớn là vô ích.

+0

Hoàn hảo, cảm ơn! Tôi tò mò tại sao điều này không bao giờ cản trở hành vi Yank Ctrl-Y trong Bash. Tôi đoán khi tôi đã ở trong shell cha, nó không có ý nghĩa để đình chỉ công việc hiện tại? – ivan

+1

Vâng, Bash chứa mã cụ thể để ngăn không cho Ctrl-Y (hoặc Ctrl-Z) có hiệu ứng tại dấu nhắc trình bao chính nó.Nếu nó không làm điều này, Bash sẽ đình chỉ như bất kỳ quá trình nào khác (và có lẽ sẽ chỉ đóng băng trong trường hợp không có một tiến trình cha được chuẩn bị để xử lý nó). –

+0

Làm cho cảm giác hoàn hảo. Cảm ơn bạn đã làm rõ. – ivan

Các vấn đề liên quan