vim 技巧手记

  1. 根据文件内容查找文件:vimgrep

    1
    2
    3
    4
    :vimgrep /Exception/ *.log    #查找目录下  所有含Exception 的 .log文件
    :vimgrep /Exception/ */*.log # 遍历子目录
    #搜索到的文件列表会加入到quickfix中去,执行:
    :copen
  2. 排序,删除重复行

    1
    2
    3
    4
    :sort   //可以直接排序,这个太好用了
    :g/^\(.*\)$\n\1$/d #去除重复行
    :g/\%(^\1$\n\)\@<=\(.*\)$/d #功能同上,也是去除重复行
    :g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d #功能同上,也是去除重复行
  3. 查找忽略大小写

    1
    2
    :set ic  #忽略大小写 set ignorecase
    :set noic #不忽略大小写
  4. 标记复制、粘贴

    1
    2
    "ay
    "ap
  5. 数字递增

    1
    2
    3
    插入模式下:Ctrl+r  ===> =(等号) ===> range(1,100)  回车
    # 格式化补齐 4 位,0001,0002....
    =map(range(1,100), 'printf(''%04d'', v:val)')
  6. 多文件内容查找替换

    1
    2
    :args *.jsp  #第一步:择定范围 *.jsp
    :argdo %s#<title>光大保德信</title>#<title>光大保德信基金</title>#gc|update #替换内容“|update”执行替换后并且存盘。
  7. 删除/保留匹配的行

    1
    2
    :g/pattern/d # 用于删除带有指定搜索内容的行
    :g!/pattern/d 用于删除不带指定搜索内容的行
  8. 删除空白行

    1
    :g/^\s*$/d
  9. html标签选中、内容选中

    1
    2
    vat #整个标签
    vit #标签的内容
  10. 正则替换

    1
    2
    3
    4
    5
    :%s#("\([A-Z_]\+\)")#'\1'#g
    -- 功能将 ("BIT") 替换为 'BIT',将两边的括号去除了,将双引号改为了单引号
    -- %s 表示在所有行中搜索替换,若要指定范围可以写成:1,10s、10s、1,$s 分别表示:1-10行、只在第10行、1-最后一行
    -- # 跟在上面的s后面,表示使用其作为分隔符,因为/分隔符经常会用于替换内容,使用到就得转义比较麻烦
    -- \(、\)、\+、\1 这些是正则表达式的内容,前面两个表示分组捕获,\+ 表示表达式的匹配次数还有*、?等等,\1 则是取前面捕获的第一个分组的内容
  11. 粘贴时取消小自动缩进

    1
    2
    :set paste # 开启paste模式
    :set nopaste # 粘贴完毕关闭paste模式
  12. BOM标记相关

    1
    2
    3
    4
    :set nobomb #去掉BOM标记
    :set bomb #加上BOM标记
    :set bomb? # 查询当前是否有BOM标记
    :%!xxd #以16进制模式打开文件,可以看到具体的大端标记或小端标记
  13. 返回符合查找条件的个数(下面返回yes出现的次数)

    1
    :%s/yes//gn
  14. 大小写替换 (动作,操作符,文本对象)

    1
    2
    3
    4
    5
    6
    7
    ~ # swap case: Upercase/lowercase
    U # Upcase
    u # lowercase
    gU$ # go Upcase line end
    gu$ # go lowercase line end
    gUU # 类似 dd, UU, uu, ~~ 都具有“双击”整行生效的特性
    # all operation see: :h operation