9
16
2010
9

Vim的hidden选项真是好东西!

本文来自依云's Blog,转载请注明。

我在编辑一些HTML文件。写得觉得差不多了,浏览器里看过还不满足,竟然想到去W3C验证一下。这一验证,差点出大事了!

因为需要使用程序来处理,所以这些HTML文档全部都是合格的XML文件,所以我给它们加上了<?xml version="1.0" encoding="UTF-8"?>。但W3C却告诉我HTML里不能写这个。好吧,我把它们都删掉:

sed -i '/<\?/d'  *.html

我想的是,凡是有<?的行全部删掉。命令执行完后忽然有点不好的感觉,于是ll一下,结果看到了一堆长度为0的HTML文件!我愣了一下,随即欲哭无泪!虽然这些文件在SVN里,但是自我这次开始编辑后我就没提交过!sed也是危险的命令啊!

我只想到火狐里还保留着改动最多的一个页面,赶紧先把它的源代码复制出来。直接“查看源代码”还不管用,因为本地文件是没有缓存的,查看时火狐会去磁盘上找文件。于是打开Firebug,在<html>元素上点右键,复制HTML,然后手工整理。剩下的文件没办法,只有SVN和Vim的*~备份文件了,555……

好吧,我认命。于是我在Vim里打开另一个文件,想趁着还记得改了些什么赶紧重做一遍,却意外地发现打开的文件显示着我sed之前的内容。来不及多想,我赶紧:w保存了,然后想了下,才恍然大悟——

我现在习惯于一直开着一个GVim实例,而又经常只是挂起或者休眠,几天才shutdown一次,所以经常会有100多个buffer。虽然我通常是把hidden选项关闭的,但有时候为方便切换buffer,会去se hidden一下,然后一直忘记再设置回来。这次,不记得什么时候设置了hidden选项,于是,那些被我关闭的buffer都还在内存里!终于知道了hidden在文件已保存的情况下有什么重要作用了!怀着对Vim的感激,我在buffer找到了所有被sed误删的文本,泪流满面~~


2011年3月17日更新:

现在才知道,sed 原来是支持备份的,只要告诉它备份文件的后缀就行了,像这样-i~

另外,Perl 也支持类似的操作,但用的是PCRE,功能强大许多我也熟悉许多。用法是

perl -pin -e 'print /regex/' #相当于 sed -i '/regex/d'
perl -pi -e 's/regex/replacement/g' #相当于 sed -i 's/regex/replacement/g'

 

Category: Vim | Tags: vim 失误 perl sed | Read Count: 12394
Avatar_small
galeki 说:
Sep 16, 2010 10:14:15 AM

T_T 用了这么久 vim 还不知道 hidden 是什么的人路过……

Avatar_small
依云 说:
Sep 16, 2010 09:52:14 PM

vim 的选项太多了,有若干不知道的很正常。其实之前我也没怎么注意这个选项的。

xiooli 说:
Sep 20, 2010 01:51:05 AM

杯具的sed阿,呵呵。

Jacky Liu 说:
Sep 23, 2010 06:13:10 PM

Hi! 我是 Jacky Liu,谢谢你给我发的 Vim 7.3 编译版!

你的博客挺不错的,我也想在这里开一个。

Avatar_small
依云 说:
Sep 23, 2010 11:28:14 PM

不用谢,开一个吧,把自己折腾Linux和Vim的经历都写下来 :-)

Avatar_small
蓝色基因 说:
Sep 24, 2010 05:48:04 AM

真的开了,呵呵 :)

我看见你的主页上有链接这一栏,请问怎样往里加链接啊,没找见。我想把你的主页地址加进去 :)

Avatar_small
依云 说:
Sep 24, 2010 08:49:41 AM

管理->友情链接 这里 http://bluegene8210.is-programmer.com/admin/links

Avatar_small
蓝色基因 说:
Sep 24, 2010 06:53:44 PM

搞定了,以后多来我这里踩踩 :)


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com