답변:
가장 간단한 해결 방법 : ciW
공백으로 구분 된 단어를 선택하는 데 사용 하십시오.
더 큰 문제는 구문 테이블 의 _
문자 값과 관련이 있습니다. 문제는 기본적으로 구문 표의 기호 구성 요소이며이를 단어 구성 요소로 취급하려고합니다._
emacs 24.4를 사용하는 경우을 활성화 할 수 superword-mode
있습니다. 나는 그것을 직접 시도하지 않았으므로 마일리지가 다를 수 있습니다.
대안은 단순히 구문 테이블을 직접 수정하고 Emacs에게 다음과 같이 _
문자를 단어 구성 요소로 취급하기를 원한다고 말하는 것입니다.
(modify-syntax-entry ?_ "w")
그 후에는 ciw
원하는대로 작동하여 abc_def_ghi
그냥보다는 모든 것을 선택합니다 def
.
그러나이 방법 _
을 사용하면 텍스트 개체에 대한 단어의 일부로 만 계산 하려는 경우 특히 과도 할 수 있습니다 . 대신 evil-inner-word
다음과 같이 조언 할 수 있습니다 .
(defadvice evil-inner-word (around underscore-as-word activate)
(let ((table (copy-syntax-table (syntax-table))))
(modify-syntax-entry ?_ "w" table)
(with-syntax-table table
ad-do-it)))
이제는 _
여전히 내부 단어 텍스트 개체를 제외한 모든 것을 구성하는 기호 이므로 ciw
다른 기능을 건드리지 않고 원하는 것을 정확하게 수행 할 수 있습니다.
EmacsWiki 노드 에서 구문 테이블 수정에 대한 자세한 내용을 읽을 수 있습니다 .
(modify-syntax-entry ?_ "w")
어떤 이유로 든 나를 위해 일하지 않았다. 대화식으로하는 것도 효과가 없었습니다. 왜 또는 어떻게 이것을 디버깅 할 수 있습니까? 관련된 경우 Spacemacs에 있습니다.
(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
다음 작동했습니다.
superword-mode
이동에는 영향을 미치지 않습니다 evil-mode
. 따라서 구문 테이블을 수정하는 구성 요소가 아닙니다.
다음 스 니펫은 Evils가 Emacs 기호 를 단어로 취급하게합니다 .
(with-eval-after-load 'evil
(defalias #'forward-evil-word #'forward-evil-symbol)
;; make evil-search-word look for symbol rather than word boundaries
(setq-default evil-symbol-word-search t))
언어에 따라 달라진다는 장점이 있습니다.
foo-bar
에서 하나의 기호 lisp-mode
이지만에서 두 개의 기호 (로 분리 -
)입니다 c-mode
.
spacemacs는 FAQ 이벤트에게 다음과 같은 언어 별 솔루션 :
;; For python
(add-hook 'python-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
;; For ruby
(add-hook 'ruby-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
;; For Javascript
(add-hook 'js2-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
또한 일반 이맥스에서 작동합니다. 에 악으로, 모든 단어 관련 명령과 함께 작동 ( w
, e
, *
, #
, 등)
더 일반적으로 이것은 모든 주요 모드에서 수행됩니다.
(add-hook 'after-change-major-mode-hook
(lambda ()
(modify-syntax-entry ?_ "w")))
'prog-mode-hook
모든 언어를 다루는 옵션을 사용 하고 있습니까?
Emacs 24 superword-mode
는 밑줄을 단어의 일부로 취급하는 작은 모드 인을 도입했습니다 . evil-mode
이 설정을 존중합니다.
설명서는 다음과 같습니다.
(superword-mode &optional ARG)
슈퍼 워드 이동 및 편집을 전환합니다 (슈퍼 워드 모드). 접두어 인수
ARG
를 사용하여ARG
양수 이면 슈퍼 워드 모드를 활성화 하고 그렇지 않으면 비활성화하십시오. Lisp에서 호출 된 경우ARG
생략되거나 nil 인 경우 모드를 활성화하십시오 .수퍼 워드 모드는 버퍼 로컬 부 모드입니다. 에, 예를 들면 : 그것을 사용하면 귀하의 문자가 단어의 일부로 처리되도록 단어의 정의 변경
superword-mode
,"this_is_a_symbol"
하나 개의 단어로 카운트를.
evil-mode
안타깝게도을 사용 하는 경우 superword-mode
enable 일 때 버그 가 발생합니다. 그것은 몇 가지 이상한 행동의 원인 evil-forward-word-begin
:라고 github.com/emacs-evil/evil/issues/721
w
,aw
등), 당신도 다음과 같은 기능과 동일한 기능을 수행 할 수 있습니다 :evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. 참고 :underscore-as-word
다른 고유 한 (임의의) 값 으로 변경해야 합니다.