Vimrc的批量排版

Jul 21, 2012

本文是第一篇Vim文章,写得烂欢迎来喷。

我偷懒采取简化格式,即

[script] "[comment] 的方式

因此排版的目的是让 " 之后的注释对齐

1、Vim强大的对齐插件Tabular

感兴趣的请看Aligning text with Tabular.vim

安装好后,输入

:Tab /"

即以"对齐,完成80%的任务。(吐……)

2. 替换所有的Tab为4个空格

substitute基本语法是:

语法为 :[addr]s/源字符串/目的字符串/[option]

例如:全局替换命令为::%s/源字符串/目的字符串/g

[addr] 表示检索范围,省略时表示当前行。

  • “1,20” :表示从第1行到20行
  • “%” :表示整个文件,同“1,$”
  • “. ,$” :从当前行到文件尾

s : 表示替换操作

[option] : 表示操作类型

  • g 表示全局替换global
  • c 表示进行确认confirm
  • p 表示替代结果逐行显示(Ctrl + L恢复屏幕)
  • d 表示delete
  • i 表示ignore case

省略option时仅对每行第一个匹配串进行替换;

如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义

g(global)位置:

  • 末尾:对搜索字符串在光标所在行的每次出现进行替换
  • 开头::g/foobar/s/bar/baz/g 首先搜寻foobar,然后把它变成foobaz. 它没有改变 jailbars, 而其他的一些命令可能会改变jailbars.

有用的例子

  • :.,$ s/old/new 替换当前行到文章末尾,替换每行首次出现的oldnew
  • :10,20 s/^/ / 将第10行至第20行,最前面插入2个空格

正则表达式,我记录便于理解的,详细的参考正则表达式30分钟入门教程

常用的元字符

  • \t 表示tab
  • \s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
  • $ 行末
  • ^ 行首

常用的限定符

  • * 重复零次或更多次
  • + 重复一次或更多次

可知:

  • 行末空格:\s+$
  • 行首空格:^\s+

替换删除首空格命令为:

:%s/^\s+//g

如此操作也删除了原有的良好的缩进排版(4个或8个空格),因此需要进行改良,比如10个以上的空格才删除:

:%s/^\s{10,}//g