vim 查找时忽略大小写

2013年3月12日 发表评论 阅读评论

默认情况下 vim 的查找都是区分大小写的, 这种查找方式有利于准确快速的定位到目标, 但是有时候vim的使用者也不一定能够确认那个单词的大小写情况, 这种情况下就要用到大小写忽略了.
实现这个操作有两种方式.

方式1 指令设定:

:set ic(ignorecase 的缩写) 忽略大小写
:set noic(noignorecase 的缩写) 不忽略大小写 

输入了上述指令, 当每次的查找操作都会受到当前设定的影响,不过每次在退出vim编辑后,再重新打开以后的设置仍旧失效。

注:编辑状态下的设置相当于临时修改了vim的环境变量,当重新使用vim时,其又会默认的.viminfo文件中读入默认的环境变量设置 。

方式2 查找符号设定:

/\CWord 区分大小写的查找
/\cword 不区分大小写的查找 

这个操作针对当前的查找有效, 所以不必考虑下次查找操作是否会受到影响.

对grep sed awk工具忽略大小写的扩展

谈到vim对文本的处理,不自觉的就联想到以上三个工具对文本的处理。现对此做下对比。首先是grep对忽略大小写的处理,这个最简单,直接在-i参数即可:

-i, --ignore-case         ignore case distinctions

接下来是sed对文本忽略大小写的处理。这个要稍微麻烦些。不过在sed的帮助文档中还是找到下面一段:

    I
          Match REGEXP in a case-insensitive manner.
          (This is a GNU extension.)

从上面这段帮助上不难看出,使用大写I可以进行大小写忽略处理。下面使用两个简单的示例说明下。如我有如下一个文档:

[root@gateway2 ~]# cat a.txt
AA
aa
bb
cc

然后通过sed可进行如下处理

[root@gateway2 ~]# sed -n '/aa/Ip' a.txt
AA
aa
//d参数为删除
[root@gateway2 ~]# sed -e '/aa/Id' a.txt
bb
cc

最后是awk对忽略大小写的处理。awk在这方面做的也比较好,其内置了一个IGNORECASE变量,专门用于处理大小写的忽略。当IGNORECASE的值为真时,则进行忽略大写的匹配。示例如下:

[root@gateway2 ~]# cat a.txt |awk '/aa/' IGNORECASE=1
AA
aa
本处仍使用的上面的a.txt

另一个示例:

echo "Mary" | awk 'BEGIN{IGNORECASE=1}{if($0=="mary"){print $0}}'

该示例的输出结果是Mary




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. yzsat361way
    2015年10月14日15:54 | #1

    方法2写的不对。
    正确的写法是:
    /\CWord 区分大小写的查找
    /\cword 不区分大小写的查找

  2. admin
    2015年10月15日15:26 | #2

    @ yzsat361way
    是的,确实这里没有转义,正确的写法的是需要转义,已更正过来。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.