How do you tell Emacs to leave the case alone in a search and replace string?

亡梦爱人 提交于 2019-11-30 02:53:26

问题


I'm trying to perform a regex search and replace in Emacs (using M-x query-replace-regexp), but the usually helpful smart case is getting in the way. My source is:

One
Two
Three

And I want to replace each line with something like <item name="One"/> instead. Unfortunately the capital at the start of each line is being misinterpreted, and I'm getting <Item> with an uppercase that I don't want.

I can find examples about how to make the search case sensitive, and how to keep the \1 lowercase in the replacement string, but nothing about how to keep the entire replacement string case-unmodified.


回答1:


Try adding this to your .emacs:

(setq case-replace nil)

C-h v case-replace RET:

Documentation: Non-nil means `query-replace' should preserve case in replacements.

And a link to the manual for Replace Commands and Case details all the interactions with case and the appropriate variables.

Or you could define a new command like:

(defun query-replace-no-case ()
   (interactive)
   (let ((case-replace nil))
       (call-interactively 'query-replace))))

And, if you were coding this up in a function, and only wanted to set the variable temporarily, you'd do something like:

(let ((case-replace nil))
   (while (search-forward ...)
       (replace-match ...)))



回答2:


In a current emacs, you can find the option in the Options menu. Save Options, if you wish through the same menu.



来源:https://stackoverflow.com/questions/7170412/how-do-you-tell-emacs-to-leave-the-case-alone-in-a-search-and-replace-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!