2012-05-19 18 views
12

Tôi đang cố gắng làm cho dấu gạch dưới được xử lý như một phần của từ cho hàm forward/backward-word như được mô tả herehere. Tôi đang cố gắng để có được điều này để làm việc cho chế độ nxhtml, nhưng thực sự muốn nó làm việc như thế này cho tất cả các chế độ.Gạch dưới như một phần của từ để chuyển tiếp không hoạt động

Tôi đã sửa đổi tệp site-start.el của mình theo một số cách khác nhau nhưng không có kết quả. Nhưng nếu tôi tự thực hiện lệnh M-x modify-syntax-table trong bộ đệm, nó hoạt động tốt. Tôi không thể làm điều này là hành vi mặc định.

Đây là những gì tôi đã cố gắng đưa vào tập tin site-start.el tôi:

;; 1 
;; thought this would apply it to all modes - no error, but did not work 
(modify-syntax-entry ?_ "w") 

;; 2 
;; thought this would automatically set it on a mode change - no error, but did not work 
(defun change-major-mode-hook() 
(modify-syntax-entry ?_ "w")) 


;; 3 
;; thought this would apply it to all modes - no error, but did not work 
(modify-syntax-entry ?_ "w") 

;; 4 
;; this produced a symbol's value as variable is void error 
(modify-syntax-entry ?_ "w" nxhtml-mode-syntax-table) 

tôi thiếu gì?

+1

Chuỗi tài liệu của 'sửa đổi-cú pháp-entry' nói" Cú pháp chỉ được thay đổi cho bảng SYNTAX-TABLE, mặc định là bảng cú pháp của bộ đệm hiện tại ". Không có gì để gợi ý bạn có thể thay đổi toàn bộ tất cả các bảng cú pháp bằng cách bỏ qua tham số đó. – phils

Trả lời

18

Bạn đã thử sửa đổi trực tiếp nxhtml-mode-hook chưa? Giống như vậy:

(add-hook 'nxhtml-mode-hook 
      (lambda() (modify-syntax-entry ?_ "w"))) 
+0

Cảm ơn - điều này chỉ là những gì tôi đang tìm kiếm. Và tôi đã thêm: (thêm móc 'php-mode-hook (lambda() (sửa đổi cú pháp-entry? _ "W"))) –

+0

Tôi muốn ai đó làm rõ: Tính năng này có hoạt động cho tất cả các chế độ Emacs không hoặc chỉ cho 'nxhtml-mode'? (Tôi đoán sau, nhưng xin vui lòng làm rõ) – Qqwy

6

Trey đã trả lời câu hỏi rất cụ thể của bạn.

Nhưng Emacs đã có một mức độ tổ chức nhân vật làm những gì bạn yêu cầu: sexp. Nếu bạn đã học được lệnh sexp thay vì vi phạm lệnh từ, thì bạn có thể xóa theo "từ" hoặc "biểu tượng" khi tình huống phù hợp.

+0

Khi sử dụng tên biến với dấu gạch dưới, tôi thực sự muốn xử lý gạch dưới như là một phần của từ đó. Chuyển động dựa trên biểu tượng quá khác so với những gì tôi đã từng sử dụng. –

+0

Tôi thấy việc xử lý dấu gạch dưới là một từ riêng biệt rất bất tiện.Tôi thậm chí không thể nhớ khi tôi thực sự cần thiết để di chuyển đến một nửa của một từ 'foo_bar' * (btw, hiện tại tôi có rất nhiều từ như vậy) *. Nhưng ngược lại: mỗi khi tôi di chuyển, hoặc cố gắng làm điều gì đó với một đối tượng văn bản trong Ác ma của Emacs, và tôi có một từ như thế - điều này chỉ cản trở việc chỉnh sửa của tôi và làm chậm tôi. –

4

Vì event_jr, tôi khuyên bạn nên học cách sử dụng các lệnh dựa trên sexp như C-M-fC-M-b. Nhưng nếu bạn thực sự muốn nhảy qua các mã định danh (và bỏ qua những thứ như dấu ngoặc đơn), thì thay vì thử và thay đổi tất cả các bảng cú pháp trong tất cả các chế độ chính (có thể có hậu quả không lường trước được), tôi khuyên bạn nên sử dụng lệnh chuyển động. Ví dụ: (global-set-key [remap forward-word] 'forward-symbol). Đối với một số lệnh (như kill-word), bạn cần phải tự viết kill-symbol nhưng phải dễ dàng thực hiện.

3

Thay vì thêm móc cho mỗi chế độ chính, như đề xuất của Trey Jackson, bạn có thể sửa đổi bảng cú pháp chuẩn. Các chế độ khác nhau kế thừa từ bảng cú pháp chuẩn để sửa đổi của bạn hy vọng sẽ áp dụng cho tất cả các chế độ:

(modify-syntax-entry ?_ "w" (standard-syntax-table)) 

Điều này sẽ ảnh hưởng đến văn bản thông thường, XML, Python và các văn bản khác.

Một số chế độ bướng bỉnh hơn và sửa đổi bảng cú pháp chuẩn sẽ không ảnh hưởng đến chúng khi chúng ghi đè một số biểu tượng trong khi khởi tạo. Một ví dụ là cc-mode. Bạn sẽ vẫn phải sửa đổi các bảng của chúng một cách rõ ràng.

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