免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2951 | 回复: 8
打印 上一主题 下一主题

python vim 脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-05 21:54 |只看该作者 |倒序浏览
想处理一个比较大的文件,处理之后还用在vim中编辑。但是vim处理比较慢,就想试试python
但是我不太懂python。想看看大家有没有谁会在vim中写python的谢谢。

目标:读取文件,把每一行的第一个单词做为字典的名,生成一个字典,传递给vim

文件是这种格式的:
aa aaa aaa aaa
aaa aa aaa aa
aaa aa aa aaa

我只会文件读取的部分:
python 《 EOF
f0=file('vimim_wubi.txt','r')
dat0=f0.readlines()
f0.close()
EOF

谢谢!

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2012-03-05 22:29 |只看该作者
生成什么样的字典?详细的格式

论坛徽章:
0
3 [报告]
发表于 2012-03-05 22:42 |只看该作者
本帖最后由 fengidri 于 2012-03-05 22:43 编辑

{"aa"="aa aaa aaa aaa","aaa"="aaa aa aaa aa","aaa"="aaa aa aa aaa"}

论坛徽章:
0
4 [报告]
发表于 2012-03-05 23:07 |只看该作者
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#------------------------------------------------------------------------
# File:         test.py
# Last Updated: 2012-03-05 23:08:15
#------------------------------------------------------------------------

src = """aa aaa aaa aaa
aaa aa aaa aa
aaa aa aa aaa
bb dd bb cc"""


def split2Dict(lines):
    lst = lines.split('\n')
    if lst:
        fn = lambda x : '"%s" = "%s"' % x
        return '{%s}' % ','.join(map(fn, [(l.split(' ')[0], l) for l in lst]))
    else:
        return []

if __name__ == '__main__':
    print split2Dict(src)

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
5 [报告]
发表于 2012-03-05 23:08 |只看该作者
按行读取文件line, key=line[0],value=line[1:]

论坛徽章:
0
6 [报告]
发表于 2012-03-06 08:58 |只看该作者
本帖最后由 fengidri 于 2012-03-06 08:59 编辑

谢谢netz!

完成了python的代码,我试了一下,速度好快是vim脚本的100倍以上。

但是如何传递呢?有人知道吗?

我的代码是这样的:在一个test.vim中:
#########代码样式如下####################
。。。
python <<EOF
这里的代码就是netz的那些代码。这里先生成一个字典data
EOF

。。。。

python <<EOF
这里要用到字典data
EOF
#############################
或者直接在下面的vim部分用到data即:
#########代码样式如下####################
。。。
python <<EOF
这里的代码就是netz的那些代码。这里先生成一个字典data
EOF

。。。。
这里是vim的脚本语言,这里用到data字典
#############################
也就是一个传递的问题。
这两种都可以谢谢。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
7 [报告]
发表于 2012-03-06 13:04 |只看该作者
本帖最后由 timespace 于 2012-03-06 13:10 编辑

方法一:
python << EOF
data = 'hello'
EOF

"vim的代码

python << EOF
#此处可直接访问data
print data
EOF

方法二:
"python可以访问vim的所有功能

python << EOF
data = '{"k1": 1, "k2": 2}'
EOF

"设置vim字典
:python import vim
:py vim.command('let kv = {}'.format(data))
:for k in keys(kv)
: echo k
:endfor

"更多用法请:help python

论坛徽章:
0
8 [报告]
发表于 2012-03-06 13:32 |只看该作者
本帖最后由 fengidri 于 2012-03-06 13:36 编辑

我刚刚发现可以直接访问,不会python写错了一点没有发现,呵呵!谢谢ls

第二种方法,受教了。谢谢

python的速度确定比vim本身快多了。呵呵

再请教一下ls,我看过help里的内容,不是很多,你是在哪里看到vim.command里可以用format的呢!我自己找了很久都没有找到,可不可以告诉我,是不是python里的内容?

我看了很长时间都没有找到,网上的东西好像不是很多。谢谢你了!

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
9 [报告]
发表于 2012-03-06 15:47 |只看该作者
format是python str的一个方法,用于格式化字符串,不过python2.6+才可用
总之vim.command接受的是一个字符串,用你知道的方法构造就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP