Emacs에서 커서 아래의 현재 단어를 바꾸는 방법


25

Emacs에서 커서 아래의 현재 단어를 어떻게 바꾸나요?

나는 query-replace 또는 replace-string을 사용할 수 있다는 것을 알고 있지만 그렇게 할 때마다 교체 할 전체 문자열을 입력해야하는데 이것은 성가신 일입니다.

Vi는 동등한 명령 cword를 가지고 있으며 단축키를 사용하여 커서 아래에서 단어를 가져 와서 바꿀 수 있습니다.

nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#

누구든지 이맥스로하는 방법을 알고 있습니까?


답변:


2

사용 복사 - 붙여 넣기 : M-d C-_ M-x replace-string RET C-y( kill-word, undo, replace-string, yank). 이미 교체를 시작한 경우 일반적인 버퍼 또는 전환 스위치 명령을 사용하여 복사하여 붙여 넣기를 수행하려면 원래 버퍼로 다시 전환하십시오 M-x replace-string RET … C-x o M-d C-_ C-x o C-y. 여러 단어를 바꾸려면 접두사 인수 M-d(예 :)를 사용할 수 있습니다 ESC 4 2 M-d.

커서에서 하나 이상의 단어를 교체하려는 경우 대신 증분 검색 ( C-s)에서 C-w시작하여 커서 아래에서 단어 검색을 시작한 다음을 눌러 M-%로 전환 할 수 replace-string있습니다.


26

증분 검색에는이 기능이 있지만 바꾸기 기능에는 없습니다. 다행히도 증분 검색 에는 검색어를 선택한 후 대체 모드로 전환 할 수있는 방법 있습니다. 그래서:

  • C-s증분 검색 모드로 전환하려면 누릅니다.
  • 를 눌러 C-w현재 단어를 검색 버퍼에 넣습니다. 계속 누르면 여러 단어를 추가 할 수 있으며 C-M-y개별 문자를 잡아 당기거나 C-y줄 전체를 잡아 당길 수도 있습니다.
  • M-%이미 구축 한 검색 버퍼를 사용하여 교체 모드로 전환하려면 누릅니다.

M-%일반적으로 사용하는 것에서 알 수 있듯이 , 이것은 각 일치로 수행 할 작업을 프롬프트하는 조회 대체 모드입니다. 당신이 그들 모두를 교체 !하려면 첫 경기 에서 명중


9
;; query-replace current word
(defun qrc (replace-str)
   (interactive "sDo query-replace current word with: ")
   (forward-word)
   (let ((end (point)))
      (backward-word)
      (kill-ring-save (point) end)
      (query-replace (current-kill 0) replace-str) ))

1
이 솔루션은 훌륭하게 작동하며 수동으로 수행하는 방법을 알려주는 것보다 훨씬 유용합니다. 복사하여 붙여 넣기로 귀찮게하기에는 너무 게으르다.
Paul Coccoli 2016 년

2

나는 이맥스를 처음 접했지만 다음을 제안 할 수 있습니다.

M-b       to move backward over a word
M-d       to kill up to the end of the word

이제 새 단어를 쓸 수 있습니다. cwvim에서 와 거의 동일하게 작동


1

커서 아래에있는 단어 M-S-%M-n채우는 것만 으로 검색하여 교체 할 경우 다시 누르면 "기호 구분 기호"로 줄 바꿈됩니다.


1

나는 Vim에서 Emacs로 옮겨 간 이후로 고생하고 똑같은 것을 원했습니다.

연구와 실험을 마친 후에는 아래의 기능을 사용하여 Evil 패키지를 설치하거나 spacemacs를 사용하여 동일한 작업을 수행 할 수 있습니다.

또한 영역 활성 (또는 vim 용어의 시각적 선택)과 함께 작동하며 abc-def-hij와 같은 단어를 대체하는 데 매우 유용 할 수 있습니다.

; replace current word or selection using vim style for evil mode
(defun evil-replace-word-selection()
(interactive)
(if (use-region-p)
    (let (
            (selection (buffer-substring-no-properties (region-beginning) (region-end))))
        (if (= (length selection) 0)
        (message "empty string")
        (evil-ex (concat "'<,'>s/" selection "/"))
        ))
    (evil-ex (concat "%s/" (thing-at-point 'word) "/"))))

그런 다음 init.el에서 동일한 키 바인딩을 정의하십시오.

(global-set-key (kbd "\C-co") 'evil-replace-word-selection)

키 바인딩은 "space z"인 vim one과 약간 다르지만 악의적 인 모드가있을 때 emacs에서 매핑하는 방법을 알지 못했습니다. 접두사 등을 불평하지 않고 이맥스를 처음 접합니다. 그러나 여전히 나쁘지 않으며 지금이 솔루션에 만족합니다.


0

이것은 이미 답변을 받았으며 아직 평판이 충분하지 않기 때문에 댓글을 달 수 없습니다. 그러나 당신이 찾고있는 것은 ciwvim입니다.

이맥스에서 가장 가까운 것은이 조합입니다.

M-b M-d

커서가있는 단어의 시작 부분으로 돌아가 단어를 삭제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.