Khi tôi làm M-x query-replaceđể thay thế tất cả các lần xuất hiện của vbằng w, sau đó nó cũng phù hợp với V(chữ hoa V). Làm thế nào để buộc emacs chỉ tìm chữ thường v?
Khi tôi làm M-x query-replaceđể thay thế tất cả các lần xuất hiện của vbằng w, sau đó nó cũng phù hợp với V(chữ hoa V). Làm thế nào để buộc emacs chỉ tìm chữ thường v?
Câu trả lời:
(customize-set-variable case-fold-search nil)
Hoặc liên kết biến đó (tùy chọn) trong lệnh của riêng bạn mà chỉ là một trình bao bọc xung quanh query-replace. Điều này có lợi thế là nó không thay đổi giá trị biến cho sử dụng chung, bên ngoài thay thế truy vấn.
Xem thêm biến case-replace, điều khiển trường hợp cho văn bản thay thế.
Xem thêm C-h f query-replace, nơi nó nói, ví dụ:
Kết hợp là độc lập với trường hợp nếu
case-fold-searchkhông phải là không và TỪ-CHUINGI không có chữ in hoa. Thay thế chuyển mẫu trường hợp của văn bản cũ sang văn bản mới, nếucase-replacevàcase-fold-searchkhông phải là số không và TỪ-CHUINGI không có chữ hoa
Xem thêm các ý kiến dưới đây và lỗi Emacs # 20687 , trong đó cho thấy cách bạn có thể vá perform-replaceđể cho phép bạn chuyển đổi trường hợp gấp trong khi query-replace.
Cũng lưu ý rằng mã hiện có cho các perform-replaceliên kết case-fold-searchtheo cách này (lưu ý các biến phụ thuộc vào nó):
(case-fold-search (if (and case-fold-search search-upper-case)
(isearch-no-upper-case-p from-string regexp-flag)
case-fold-search))
case-fold-searchnhanh chóng như chúng ta có thể làm trong quá trình isearchsử dụng M-cràng buộc. Nhưng thật không may query-replace, có bản đồ chế độ của nó.
query-replace-map: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))và (define-key query-replace-map "C" 'toggle-case). Nhưng việc xử lý các khóa trong bản đồ đó được mã hóa cứng perform-replace. Bạn có thể muốn M-x report-emacs-bug, để perform-replacemã được mở hơn, do đó, các khóa có thể được thêm vào bản đồ. Nó ít nhất nên có một mệnh đề dự phòng chỉ gọi cmd ràng buộc với khóa.
query-replace-maptrước đây.
perform-replaceđể thêm một condmệnh đề bổ sung gọi khóa mà bạn đã xác định query-replace-map. Đặt mệnh đề mới ngay trước mệnh đề Catch-all t. Đây là mệnh đề mới : (def (call-interactively def)). Không thể đơn giản hơn.
(customize-set-variable case-fold-search nil)đưa ra lỗi customize-set-variable: Attempt to set a constant symbol: nil. Ngoài ra tôi đã thử cả hai (setq case-fold-search nil)và (setq case-replace nil)truy vấn vẫn khớp với chữ hoa V.