当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : vim 高级编辑功能
帖子发表于 : 2010-11-29 17:25 

注册: 2009-04-21 9:48
帖子: 88
送出感谢: 12
接收感谢: 0 次
有这个一个文件叫1.txt, 内容如下:
就是一个目录列表文件。
代码:
1 Getting started with Windows Forms 3
1.1 Programming in C# 4
1.2 Adding controls 13
1.3 Loading files 18
1.4 Resizing forms 26
1.5 Recap 33
2 Getting started with Visual Studio .NET 34
2.1 Programming with Visual Studio .NET 35
2.2 Adding controls 43
2.3 Loading files 54
2.4 Resizing forms 61
2.5 Recap 65
....

其中 尾部数字为页号。
现在发现尾部页号小了15页, vim 有什么方法能够方便的修改。
正确的结果应该是这样的。
代码:
1 Getting started with Windows Forms  18
1.1 Programming in C#  19
1.2 Adding controls  28
1.3 Loading files  33
1.4 Resizing forms  41
1.5 Recap  48
2 Getting started with Visual Studio .NET  49
2.1 Programming with Visual Studio .NET  50
2.2 Adding controls  58
2.3 Loading files  69
2.4 Resizing forms  76
2.5 Recap  80


页首
 用户资料  
 
2 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-29 17:33 

注册: 2009-04-21 9:48
帖子: 88
送出感谢: 12
接收感谢: 0 次
这个问题我可以用perl 解决,但是我忽然想能不能直接用vim 解决。
方法1:用宏结合上函数匹配,计算。 (估计该方法可能最简单)
方法2:用脚本解决。

用perl 解决问题很简单,附上代码启发一下思路
代码:
#!/usr/bin/perl -w
#
open FDR,"1.txt" || die "error $!";
while(<FDR>)
{
   if(m/(\d+)$/)
   {
      $num=$1+15;    # 对于匹配到的页号,我们加上15
      print "$` $num\n";
   }
}
print "end\n";

如果用vim 能直接解决问题,我就不用劳驾perl 了。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-29 18:28 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
AWK 版
代码:
%!awk '{ORS=""}{for(i=1;i<NF;i++){print $i" "}print ($NF+15)"\n"}'


Vimscript 版
代码:
:for i in range(line('$'))
:  let s=split(getline(i))
:  let s[-1] += 15
:  call setline(i, join(s))
:endfor


Python 版
代码:
import vim
b = vim.current.buffer
for i in range(len(b)):
  l = b[i].split()
  l[-1] = str(int(l[-1])+15)
  b[i] = ' '.join(l)


Vim 正则表达式版
代码:
%s/\d\+$/\=submatch(0)+15


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
4 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-29 18:33 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
最直观的是用 AWK 处理,其次用更麻烦的 Python/Vimscript/Perl/Ruby/Lua/Tcl/PHP/... 的脚本工具,最简洁的是 Vim 内建功能,最后一个想到。。。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
5 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-29 21:34 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
晕,代码写多了最简洁直观的方法忘了——
代码:
ggqqqqq$15<C-A>j@qq@q

<C-A> 当然是代表 Ctrl-A 了。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
6 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 10:14 

注册: 2009-04-21 9:48
帖子: 88
送出感谢: 12
接收感谢: 0 次
thanks lilydjwg , 强!
最简单的是记录宏。 ggqq$15<C-A>j@qq@q 使用了内建功能<C-A>
最实用的是 %s/\d\+$/\=submatch(0)+15/ 使用了内建功能s/// 并使用了=寄存器和submatch 函数
最通用的是vim script ,我欣赏。

至于其它语言,各有各的妙处。但都算外援了。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 13:04 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
hjjdebug 写道:
thanks lilydjwg , 强!
最简单的是记录宏。 ggqq$15<C-A>j@qq@q 使用了内建功能<C-A>
最实用的是 %s/\d\+$/\=submatch(0)+15/ 使用了内建功能s/// 并使用了=寄存器和submatch 函数
最通用的是vim script ,我欣赏。

至于其它语言,各有各的妙处。但都算外援了。

那个 \= 不算是寄存器吧,见 :help sub-replace-\=

觉得你有些瞧不起使用外部工具/其它脚本啊。
至少Lua是可以完全嵌入到Vim的(不需要任何额外的东西)
另外,对于一个Linux用户来说,会些简单的 sed awk grep uniq sort 之类的也是好的(不信你可以比较下用Vim和命令行工具处理1000+个文件的效率 http://www.vimer.cn/2010/01/%E6%93%8D%E ... s-vim.html


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
8 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 13:55 

注册: 2009-04-21 9:48
帖子: 88
送出感谢: 12
接收感谢: 0 次
"= 不是真正的寄存器,它并不储存东西,仅仅代表“计算”的意思,见help "=
与help sub-replace-\= 解释似乎并不矛盾。

另外,我只想用尽可能简单的办法搞定一件事情,决无轻视外部工具及脚本。
例如 sed awk grep uniq sort, 前三者号称文本处理三剑客,后两者是帮凶。 我也常用。

lua 倒是没有使用过, 有机会再补补。 说实话,跟老兄讲话还是获益不浅!


页首
 用户资料  
 
9 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 14:09 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
nnnnd vim都研究透彻了。
这个呸服。


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 16:18 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
eexpress 写道:
nnnnd vim都研究透彻了。
这个服。

:em20 .....


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
11 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 18:12 

注册: 2009-04-21 9:48
帖子: 88
送出感谢: 12
接收感谢: 0 次
eexpress 写道:
nnnnd vim都研究透彻了。
这个呸服。

vim 是个大百货店,想要什么就拿点什么。
想什么都要,买不起啊! 得花多少时间啊。
:em03


页首
 用户资料  
 
12 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 19:03 

注册: 2009-04-21 9:48
帖子: 88
送出感谢: 12
接收感谢: 0 次
hjjdebug 写道:
vim 是个大百货店,想要什么就拿点什么。
想什么都要,买不起啊! 得花多少时间啊。

如果掌握了它的script , 就可以运行自如了。
如果还不满足,就要研究它的代码了。
lilydjwg 老兄可能快接近目标了!


页首
 用户资料  
 
13 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-11-30 19:15 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
hjjdebug 写道:
如果掌握了它的script , 就可以运行自如了。
如果还不满足,就要研究它的代码了。
lilydjwg 老兄可能快接近目标了!


我倒是想研究下它的代码,7.3 开 ruby perl 和 largefile 支持(默认开启)后,在调用 ruby 时总是崩溃,而且函数栈里竟然能看到毫无关系的 Perl 调用。。。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
14 楼 
 文章标题 : Re: vim 高级编辑功能
帖子发表于 : 2010-12-01 9:47 

注册: 2008-11-08 18:34
帖子: 627
送出感谢: 0 次
接收感谢: 1
代码:
cat 1.txt |grep -Po '.*\ '>head1.txt;
cat 1.txt |grep -Po '\d+$'|while read i;do echo $[i+15];done>tail1.txt;
paste -d '' head1.txt tail1.txt >1.txt;

:em06 看了你们的真是简洁的牛鼻


_________________
气血鼓荡,身体发胀,偶飘上头,三时舒畅


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译