Khi tôi làm M-x query-replace
để thay thế tất cả các lần xuất hiện của v
bằ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 v
bằ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-search
khô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-replace
vàcase-fold-search
khô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-replace
liên kết case-fold-search
theo 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-search
nhanh chóng như chúng ta có thể làm trong quá trình isearch
sử dụng M-c
rà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-replace
mã đượ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-map
trước đây.
perform-replace
để thêm một cond
mệ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.