web-dev-qa-db-ja.com

Emacsでカーソルの下にある現在のWordを置き換える方法

Emacsでカーソルの下にある現在のWordを置き換えるにはどうすればよいですか?

Query-replaceまたはreplace-stringを使用できることはわかっていますが、使用するたびに、置換する文字列全体を入力する必要があるので、これは面倒です。

Viには同等のコマンドcwordがあり、ショートカットを使用してカーソルの下にあるWordをプルして置き換えることができます。

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

誰かがEmacsでそれを行う方法を知っていますか?

25
Think Pl

コピーして貼り付けてください:M-d C-_ M-x replace-string RET C-ykill-Wordundoreplace-stringyank)。既に置き換えを開始している場合は、元のバッファーに切り替えて、通常のウィンドウまたはバッファー切り替えコマンドM-x replace-string RET … C-x o M-d C-_ C-x o C-yでコピーと貼り付けを行うことができます。 M-dでプレフィックス引数を使用して(たとえば、ESC 4 2 M-d)、複数の単語を置き換えることができます。

カーソル位置の1つ以上の単語を置き換える場合は、代わりにインクリメンタル検索(C-s)から開始し、C-wを使用してカーソルの下の単語の検索を開始してから、M-%replace-stringに切り替えます。

インクリメンタル検索にはこの機能がありますが、置換機能にはありません。さいわい、インクリメンタル検索doesを使用すると、検索語句を選択した後に置換モードに切り替えることができます。そう:

  • 押す C-s インクリメンタル検索モードに切り替えるには
  • 押す C-w 現在の単語を検索バッファにヤンクするには、押し続けると複数の単語を追加できます。また、 C-M-y 個々の文字をヤンクし、 C-y 全行をヤンクする
  • 押す M-% 既に作成した検索バッファーを使用して置換モードに切り替えるには

あなたがおそらく使用から知っているように M-% 通常、これはクエリ置換モードであり、一致ごとに何をするかを尋ねます。すべてを置き換えたいだけなら、 ! 最初の試合で

26
Michael Mrozek
;; 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
Emanuel Berg

私はemacsをまったく使用していませんが、次のことを提案できます。

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

これで、新しいWordを作成できます。 vimのcwとほぼ同じように動作します

2
2r2w

検索と置換を行う場合はM-S-%を押すだけM-nカーソルの下のWordを埋め、もう一度押すと「記号区切り文字」で囲まれます。

1
dolzenko

VimからEmacsに移行して以来、私は苦労して同じことを望んでいました。

いくつかの研究と実験の後、私はEvilパッケージがインストールされているか、またはspacemacsを使用して同じことを実行できるようにする以下の関数を思いつきました。

また、アクティブなリージョン(またはvim用語では視覚的な選択)でも機能し、abc-def-hijのようにWordを置き換えるのに非常に役立ちます。

; 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)

キーバインドは「スペースz」であるvimのキーバインドとは少し異なりますが、邪魔モードが存在する場合に、emacsでそれをマップする方法を理解していません。接頭辞などではなく不平を言い続けると、私はemacsに比較的慣れていません。しかし、それでもそれほど悪くはなく、私自身は現時点でこの解決策に満足しています。

1
xiaoming wu

これはすでに回答済みであり、まだ十分な評判がないためコメントできません。しかし、あなたが探しているのはvimのciwです。

Emacsで私が最も近いのはこの組み合わせです。

M-b M-d

これは、カーソルが置かれているWordの先頭に戻り、Wordを削除します。

0