注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dp: 生活的脚步,进步的点滴...

Cam、DSP、FPGA、PM、Life、More ...

 
 
 

日志

 
 

Vim:文本排版、删指定行  

2012-03-20 17:21:58|  分类: 专业 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
":%s/\n\n\@!/ /"或":g/./,/^$/-1j"把以回车排版, 以空行分段的文本变成以回车分段的文本, 如果不想保留段落间的空行":g/./,/^\s*$/j"

例1. 倒序文件行(即unix下的tac命令)
:g/^/m 0
这条命令用行首标记/^/匹配文件的所有行(这是查找的一个常用技巧,如果用/./则是匹配非空行,不满足本例要求),然后用move命令依次将每行移到第一行(第0行的下一行),从而实现了倒序功能。

例2. 删除文件中所有的空行
:g/^\s*$/d
^\s*$是空行的正则表达式, 找出来后执行d, 即删除该行. 这是我最常使用的例子, 我经常要分析的log文件由于程序里\r\n的重复使用, 生成的log 文件通常都是一行log, 一行空格, 用这个命令可以使文件看起来更紧凑.

例3. 删除偶数行
:g/^/+1 d
命令分析: 这条命令也是匹配所有行, 然后隔行删除(其中+1用以定位于当前行的下一行).
为什么是隔行呢?因为在对第一行执行+1 d命令时删除的是第二行, 而第二行虽然也被标记了, 但已不存在了, 因此不会执行删除第三行的命令.

例4. 删除奇数行,
:g/^/d|m.
分析分析:光是:g/^/d显然不行, 这会删除所有行, 我们需要用 move命令把偶数行的标记去掉. 当然, 本例可以很简单的转换成4), 在此只是用来强调标记的概念.

例5. 把以回车分段的文本变成以回车排版, 以空行分段的文本.

:ggVGgq


例6. 删除指定行

:?^test1?,/^test2/g/.*/d
可以把test1到test2的行删除


附:vim移动命令

H: 光标跳到屏幕最上面那一行
M: 光标跳到屏幕正中间那一行
L: 光标跳到屏幕最后一行

CTRL-f 屏幕向上滚1屏
CTRL-b 屏幕向下滚1屏
z<Enter> 使当前行位于屏幕最上部
zz 使当前行位于屏幕正中间

~: 将选中的字符变大小写反转

g CTRL-G: 字数统计

:undolist 显示撤消的历史记录
:undo N 撤消N步
g+ 撤消历史向前走
g- 撤消历史向后走
:earlier Ns 撤消历史向前走N秒
:earlier Nm 撤消历史向前走N分种
:earlier Nh 撤消历史向前走N小时
:later Ns 撤消历史向前走N秒
:later Nm 撤消历史向前走N分钟
:later Nh 撤消历史向前走N小时

zM: 关闭所有的折行
zR: 打开所有的折行

自动补全 CTRL-p: CTRL-n: CTRL-x:

$p 粘贴到行尾(paste some text that I yanked at the end of the line)

  评论这张
 
阅读(829)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016