查找默认情况下查找是不区分大小写的,当时如果你输入了一个以上大写字母的话,就区分大小写了,因为它感觉你在乎大小写。
递增查找
C-s -> mini buffer 会出现I-search ->输入你想查找的单词,随着你输入字符增多递增高亮 -> 找到所要单词,键入enter -> C-s 命令可以切换单词的位置
C-s Isearch-forward 从光标位置向前(朝文件尾方向)开始递增查找
C-r Isearch-backward 从光标位置向后(朝文件头方向)开始递增查找
C-s C-w 从光标位置开始的单词作为查找字符串
C-s C-y 从光标位置到行尾之间作为查找串
Return 退出查找
C-g Keyboard-quit 取消递增查找(需按两次)
单词查找
词组查找一般用在大段文本编辑中,比如写新闻、写信之类的。它在查找的过程中会忽略掉一些标点符号,比如换行符,逗号,句号之类的,查找时也是进行的增量查找,边输入边找,不过对于单词来说是全词匹配
M-s w RET words RET (word-search-forward)
M-s w C-r RET words RET (word-search-backward)
查找替换
--先M-< 到文件的开头,在进行替换,因为它是从光标位置向前查询替换
最简单粗暴的方式就是使用replace-string 这个命令,用法如下:M-x replace-string RET oldstring RET newstring RET,第一次回车输入需要替换的字符串,第二次回车输入想要变成的字符串,最后确认。它将会把所有匹配oldstring 的字符串全部替换掉,建议大家在没绝对把握前还是不要用这个的好。
暴力替换的正则版命令replace-regexp,用法和上面一样,只是oldstring改为正则表达式。
实际上,我们在替换的时候并不希望所有的东西都换掉,还是想中间有个给自己判断选择的过程,在Emacs中称其为查询替换,M-% (query-replace) ,下面是回答的方式
还有一种情况就是如果你想重复使用刚才的命令(不仅仅是查询替换),C-x Esc Esc 组合键会将最后一次的命令显示在mini buffer。同时你可以用Esc p向前,Esc n向后找到符合的命令还可义用上下键,左右键不行。
简单的说就是你在查找替换的过程中突然发现需要修改点东西,但又不想直接退出查找替换,这时Emacs提供了一个临时的编辑状态可以让你先干刚想起的事,等你做完了还可以回到查找替换状态,这个临时的状态就叫递归编辑状态。
注意看,这时mode line中的模式名外面加了一层方括号"[]",标明进入了递归编辑状态。干完事后使用C-M-c 就可以回到前一个状态,
实际上,在任何时候(不止是查询)都可以用命令M-x recursive-edit Ret 进入递归编辑,C-M-c 退出递归编辑并返回当前工作中。
如果想退出递归编辑同时退出查询替换可以按C-](命令是 M-x abort-recursive-edit 或 M-x top-level RET)
查找和替换中大小写
现在有两个问题
一:查找的时候,如果你输入random 他会把Random,RANDom 都输出来。
二:替换时Emacs会根据被替换字母大小写情况做相应替换,如果用tandom 替换random,那Random-> Tandom; RANdom -> TANdom
case-fold-search 默认为T,意思是如果用户的字符串不是大小写混合或全部大写,就不区分大小
case-replace 默认为t,意思时根据原始文本调整替换字符串中的字母大小写情况。
可以通过下面方式对这两个参数进行设置
M-x set-variable RET -> 提示输入变量名 -> 输入case-fold-search/case-replace RET -> nil RET
在.emacs可以进行精确匹配和替换时不改变大小情况设置search Case-sensitive
部分参考:http://josephpan.net/blog/?p=738