Как заменить текущее слово под курсором в Emacs

Я думаю программа, которую Вы ищете, xvidtune.

25
15.10.2012, 00:38
9 ответов

Вставка копии использования: 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.

2
27.01.2020, 19:40

Возрастающий поиск имеет эту функцию, но функции замены не делают. К счастью, возрастающий поиск действительно имеет способ переключиться для замены режима, после того как Вы выбрали критерий поиска. Так:

  • Нажмите C-s для переключения на возрастающий режим поиска
  • Нажмите C-w для дергания текущего слова в поисковый буфер, можно продолжать нажимать его для добавления нескольких слов, и можно также использовать CMY для дергания отдельных символов и C-y для дергания целых строк
  • Нажмите % M-для переключения для замены режима с помощью поискового буфера, который Вы уже создали

Как Вы, вероятно, знаете от использования % M-обычно, это - режим замены запроса, где оно предлагает Вам то, что сделать с каждым соответствием. Если Вы просто хотите заменить их всех, совершить нападки! на первом соответствии

26
27.01.2020, 19:40
;; 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) ))
9
27.01.2020, 19:40
  • 1
    Это решение работает приятно и намного более полезно, чем быть сказанным, как сделать это вручную. Я слишком ленив, чтобы быть побеспокоенным копией-и-вставкой. –  Paul Coccoli 29.06.2015, 20:09

Я новичок в emacs, но могу предложить следующее:

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

Теперь вы можете написать новое слово. Работает почти как cw в vim

2
27.01.2020, 19:40

При поиске и замене с M-S-% простое нажатие M-n заполняет слово под курсором, повторное нажатие заворачивает его в "разделитель символов".

1
27.01.2020, 19:40

Я боролся и хотел того же с момента перехода с 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)

привязка клавиш немного отличается от привязки клавиш vim, которая является «пробелом z», но я не понял, как сопоставить это в emacs, когда присутствует режим зла. продолжайте жаловаться, а не на префикс и т. д., и я относительно новичок в emacs. Но все еще неплохо, и я доволен этим решением на данный момент.

1
27.01.2020, 19:40

На этот вопрос уже был дан ответ, и я не могу комментировать, потому что у меня пока недостаточно репутации. Но то, что вы ищете, это ciwв vim.

В emacs ближе всего к этой комбинации я подошел:

M-b M-d

Это возвращает к началу слова, на котором находится курсор, а затем удаляет слово.

0
27.01.2020, 19:40

Этот фрагмент расширяет ответ Эмануэля Берга до:

  • отображать выбранную строку для замены;
  • использовать символы, а не слова, что дает мне лучшие результаты в коде Python (или вообщеsuperword-mode).
(defun query-replace-at-point (old new)
  "Invoke `query-replace', valuing OLD to symbol at point, replacing it with the input NEW."
  (interactive
   (let* ((old-symbol (symbol-name (symbol-at-point)))
          (new-symbol (read-string (format "Rename %s to: " old-symbol) old-symbol)))
     (list old-symbol new-symbol)))
  (query-replace old new))
0
12.08.2020, 12:14

Этот подход похож на тот, который описан Майклом Мрозеком , но начинается с isearch-forward-symbol-at-point, что добавляет слово в точке в строку поиска .

  • Нажмите M -s. для переключения в режим пошагового поиска.
  • Нажмите M -% для переключения в режим замены.
  • Дополнительно нажмите M -n , чтобы предварительно -заполнить строку замены строкой поиска.

При таком подходе курсор может находиться в любой части слова. Он протестирован на правильную работу со словами , содержащими тире .

0
27.02.2021, 08:28

Теги

Похожие вопросы