prog 모드에서 기호를 단어로 취급 밑줄에서 멈추지 foo_bar만 mark-word밑줄에서 멈추지 않습니다. 내가 prog

Emacs에는 “단어”에 적용되는 명령이 많이 있습니다. 예로는 forward-word, kill-word, upcase-word, mark-word, transpose-words, 등 “단어”의 정의는 명령과 조금 다를 것으로 보인다. 예를 들어 forward-word단어 (예 🙂 내에서 밑줄에서 멈추지 foo_barmark-word밑줄에서 멈추지 않습니다.

내가 prog 모드에있을 때 “word”의 정의를 변경하여 Emacs가 현재 언어의 구문에 적절한 단어 경계를 사용할 수 있습니까?

내가있을 때 밑줄을 건너 뛰고 c-mode싶습니다 . 내가 forward-word있을 때 하이픈과 밑줄 등을 건너 뛰고 lisp-mode싶습니다 forward-word.



답변

이맥스는 이미 ” 현재 언어의 구문에 적합한 단어 경계 “를 사용해야 합니다 . 그렇지 않은 경우 해당 언어의 주 모드에 대한 버그를 신고하십시오.

그러나 아마도 당신은 정말로 단어를 의미하지는 않습니다 . 어쩌면 단어 구문이 아닌 기호 구문 을 의미 할 수도 있습니다 . 이맥스는 두 가지를 구별합니다.

기호 구문, 사용 기호 명령이 아닌 단어 명령의 경우 : forward-symbol당신의 설명에서, 이것은 당신이 정말 원하는 것입니다.

실제로 심볼에 단어 함수를 사용하려는 경우 특정 문자의 구문 범주 를 기호 구성 구문 대신 단어 구성 구문으로 변경할있습니다 . 그러나 일반적으로 이것은 당신이하고 싶은 것이 아니며 그렇게 할 필요가 없습니다.

문자 구문에 대한 정보는 Elisp 매뉴얼을 참조하십시오. 또한 기호 (Lisp 기호가 아니라 기호 구문이있는 텍스트)에 대해 작동하는 명령 및 기타 기능에 대해서는 Emacs 설명서 및 Elisp 설명서를 참조하십시오.

그리고 sexps 작업은 종종 기호 C-M-f( forward-sexp), C-M-t( transpose-sexps) 등의 작업에도 유용합니다 .


답변

한 번 봐 superword-mode하고 subword-mode. 슈퍼 워드는 밑줄을 경계 대신 단어의 일부로 취급하므로 foo_bar 단일 단어로 취급됩니다 .
Subword는 camelCase와 반대로 작동하지만 fooBar한 단어 대신 두 단어로 처리됩니다.

원하는 동작 cc-mode을 사용하는 것 같습니다 superword-mode.

(add-hook 'c-mode-common-hook 'superword-mode)

subword-mode이 두 가지 모드가 원하는 것을 정확하게 수행하지 않더라도 단어 감지 동작을 변경하는 방법을 보여 주므로 에 대한 소스를 읽는 것이 좋습니다 .

emacsreduxergomacs 에 대한 자세한 설명 .


답변

귀하의 질문을 이해하면 언어 구문 표를 수정할 수 있습니다 (예 : c ++).

(modify-syntax-entry ?_ "w" c++-mode-syntax-table)

M-x apropos 구문 테이블을 찾아 보면 도움이 될 것입니다.


답변