Emacsでカーソルの下にある現在のWordを置き換えるにはどうすればよいですか?
Query-replaceまたはreplace-stringを使用できることはわかっていますが、使用するたびに、置換する文字列全体を入力する必要があるので、これは面倒です。
Viには同等のコマンドcwordがあり、ショートカットを使用してカーソルの下にあるWordをプルして置き換えることができます。
nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#
誰かがEmacsでそれを行う方法を知っていますか?
コピーして貼り付けてください: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
)、複数の単語を置き換えることができます。
カーソル位置の1つ以上の単語を置き換える場合は、代わりにインクリメンタル検索(C-s
)から開始し、C-w
を使用してカーソルの下の単語の検索を開始してから、M-%
をreplace-string
に切り替えます。
インクリメンタル検索にはこの機能がありますが、置換機能にはありません。さいわい、インクリメンタル検索doesを使用すると、検索語句を選択した後に置換モードに切り替えることができます。そう:
あなたがおそらく使用から知っているように M-% 通常、これはクエリ置換モードであり、一致ごとに何をするかを尋ねます。すべてを置き換えたいだけなら、 ! 最初の試合で
;; 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) ))
私はemacsをまったく使用していませんが、次のことを提案できます。
M-b to move backward over a Word
M-d to kill up to the end of the Word
これで、新しいWordを作成できます。 vimのcw
とほぼ同じように動作します
検索と置換を行う場合はM-S-%
を押すだけM-n
カーソルの下のWordを埋め、もう一度押すと「記号区切り文字」で囲まれます。
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に比較的慣れていません。しかし、それでもそれほど悪くはなく、私自身は現時点でこの解決策に満足しています。
これはすでに回答済みであり、まだ十分な評判がないためコメントできません。しかし、あなたが探しているのはvimのciw
です。
Emacsで私が最も近いのはこの組み合わせです。
M-b M-d
これは、カーソルが置かれているWordの先頭に戻り、Wordを削除します。