Jak zamienić bieżące słowo pod kursorem w Emacsie


25

Jak zamienić bieżące słowo pod kursorem w Emacsie?

Wiem, że mogę używać zapytania-zamień lub zamień-ciąg, ale za każdym razem, gdy to robię, muszę wpisać cały ciąg, aby go zastąpić, to po prostu denerwujące.

Vi ma równoważne hasło poleceń i mogę użyć skrótu, aby przeciągnąć słowo pod kursorem w celu zamiany:

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

Czy ktoś wie jak to zrobić z Emacsem?


Odpowiedzi:


2

Zastosowanie skopiować i wkleić: M-d C-_ M-x replace-string RET C-y( kill-word, undo, replace-string, yank). Jeśli już rozpoczął wymianę, można powrócić do oryginalnego bufora zrobić kopię wklej ze zwykłym oknie lub bufor poleceń przełączania: M-x replace-string RET … C-x o M-d C-_ C-x o C-y. Możesz użyć argumentu przedrostka M-d(np. ESC 4 2 M-d), Aby zastąpić wiele słów.

Jeśli planujesz zamienić jedno lub więcej słów pod kursorem, możesz zamiast tego rozpocząć wyszukiwanie przyrostowe ( C-s), użyj, C-waby rozpocząć wyszukiwanie słowa pod kursorem, a następnie naciśnij, M-%aby przejść do replace-string.


26

Wyszukiwanie przyrostowe ma tę funkcję, ale funkcje zamiany nie. Na szczęście, przyrostowe wyszukiwania nie ma sposobu, aby włączyć tryb wymienić raz wybraniu szukaną frazę. Więc:

  • Naciśnij, C-saby przejść do trybu wyszukiwania przyrostowego
  • Naciśnij, C-waby przeciągnąć bieżące słowo do bufora wyszukiwania. Możesz go naciskać, aby dodać wiele słów, a także użyć C-M-ydo przeciągania pojedynczych znaków i C-yprzeciągania całych linii
  • Naciśnij, M-%aby przejść do trybu zastępowania za pomocą bufora wyszukiwania, który już utworzyłeś

Jak zapewne wiesz, że używasz M-%normalnie, jest to tryb zastępowania zapytań, w którym monituje Cię, co zrobić z każdym dopasowaniem. Jeśli chcesz je wszystkie zastąpić, naciśnij !pierwszy mecz


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
To rozwiązanie działa ładnie i jest o wiele bardziej przydatne niż polecenie, jak to zrobić ręcznie. Jestem zbyt leniwy, aby przejmować się kopiowaniem i wklejaniem.
Paul Coccoli

2

Jestem absolutnie nowy w emacs, ale mogę zasugerować następujące rzeczy:

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

Teraz możesz napisać nowe słowo. Działa prawie jak cww vimie


1

Jeśli przejdziesz do wyszukiwania i zamiany, M-S-%naciskając tylko M-nwypełnia słowo pod kursorem, ponowne naciśnięcie powoduje zawinięcie go w „separator symboli”.


1

Walczyłem i chciałem tego samego od czasu przejścia z Vima do Emacsa.

Po kilku badaniach i eksperymentach wymyśliłem poniżej funkcję, która pozwala zrobić to samo z zainstalowanym pakietem Evil lub za pomocą spacemacs.

Działa również z aktywnym regionem (lub selekcją wizualną w vimie), co może być całkiem przydatne do zastąpienia słowa takiego jak 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) "/"))))

następnie w pliku init.el zdefiniuj to samo powiązanie klawiszy:

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

keybinding różni się nieco od vima, który jest „spacją z”, ale nie wymyśliłem, jak zmapować to w emacs, gdy jest dostępny tryb zła. wciąż narzekam, nie na prefiks itp. Jestem stosunkowo nowy w emacs. Ale nadal nie jest tak źle, a ja jestem w tej chwili zadowolony z tego rozwiązania.


0

Odpowiedź została już udzielona i nie mogę komentować, ponieważ nie mam jeszcze wystarczającej reputacji. Ale to, czego szukasz, to ciwvim.

W Emacsie najbliżej jest do tej kombinacji:

M-b M-d

Wraca do początku słowa, na którym znajduje się kursor, a następnie usuwa słowo.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.