- 浏览: 73950 次
- 性别:
- 来自: 杭州
最新评论
-
鹤惊昆仑:
ipython更好
python 交互式kill 命令 -
lijunjie:
使用pkill firefox
python 交互式kill 命令 -
花花公子:
night_stalker 写道执行 ruby 代码也可以,不 ...
vim 随意执行 python 代码 -
night_stalker:
执行 ruby 代码也可以,不过需要编译参数 +ruby 的版 ...
vim 随意执行 python 代码 -
abruzzi:
续一个:继承Burns先生的遗产的那一集中,Bart和Lisa ...
Simpsons 搞笑镜头
一直想找个用vim来管理todo列表的script, 没发现特别好用的,
自己写了个,用sqlite来保存数据.
将下面代码存为 SzTodo.vim,放到plugin目录里.
用 :SzTodo 启动.
自己写了个,用sqlite来保存数据.
将下面代码存为 SzTodo.vim,放到plugin目录里.
用 :SzTodo 启动.
let g:sztodo_db_path="/root/.vim/todo" let s:list_type="unfinished" let s:cur_buf = 0 function! MakeTemplate() python << EOF import vim vim.command("call SwitchToDetailView()") vim.command("call SetSyntax()") template = "=" * 50 + "\n" \ + "tag:" +"\n" \ + "title:" + "\n" \ + "=" * 50 + "\n" for index,line in enumerate(template.split("\n")): if index ==0 : vim.current.buffer[0]=line else : vim.current.buffer.append(line) EOF endfunction function! SaveTodoItem() python << EOF import vim def loadData(lines): item=ToDoItem() content="" seperates=0 for line in lines: if line.startswith("====="): seperates=seperates+1 if line.startswith("id:"): item.id=line[3:].strip() if line.startswith("tag:"): item.tag=line[4:].strip() if line.startswith("title:"): item.title=line[6:].strip() if line.startswith("status:"): item.status=line[7:].strip() if seperates==2 and not line.startswith("===="): content=content+line+"\n" item.content=content[:-1] return item def addItem(item): insertSql="insert into SzTodo(tag,title,create_date,status,content) values (?,?,?,?,?)" con=sqlite.connect(getDbFileName()) cur=con.cursor() values=(item.tag,item.title,item.create_date,item.status,item.content) cur.execute(insertSql,values) con.commit() con.close() def updateItem(item): updateSql="update SzTodo set tag=?,title=?,create_date=?,status=?,content=? where id=?" con=sqlite.connect(getDbFileName()) cur=con.cursor() values=(item.tag,item.title,item.create_date,item.status,item.content,item.id) cur.execute(updateSql,values) con.commit() con.close() data=vim.current.buffer[:] todoItem=loadData(data) if not todoItem.title: print "title can't be empty" else: if todoItem.id.strip() == "" : todoItem.create_date=getCurrentDate() todoItem.status="unstarted" addItem(todoItem) else : updateItem(todoItem) print "todo has been saved" EOF exec bufwinnr(s:cur_buf) . "wincmd w" call ListItems() endfunction function! ListItems() python << EOF import vim listFinished=vim.eval("s:list_type") vim.current.buffer[:]=None vim.command("set nonumber") if listFinished=="finished": selectSql="select id,tag,title,create_date,content from SzTodo where status == 'done' " else: selectSql="select id,tag,title,create_date,content from SzTodo where status != 'done' " con=sqlite.connect(getDbFileName()) cur=con.cursor() items=[] cur.execute(selectSql) for index,row in enumerate(cur): formatedItem=str(row[0])+". "+str(unicode(row[2]).encode("utf-8")) if index==0: vim.current.buffer[0]=formatedItem else : vim.current.buffer.append(formatedItem) con.commit() con.close() EOF endfunction function! SwitchToDetailView() let s:cur_buf = bufnr("%") let s:szdb_result_buf=bufnr("SztodoDetail") if bufwinnr(s:szdb_result_buf) > 0 exec bufwinnr(s:szdb_result_buf) . "wincmd w" %d else exec 'silent! botright split SztodoDetail' exec "e SztodoDetail" exec "set nowrap" map <silent><buffer>s :call SaveTodoItem()<cr> endif endfunction function! ShowItemDetail(preview) python << EOF import vim (row, col) = vim.current.window.cursor line = vim.current.buffer[row-1] id=line[0:line.find(".")] selectSql="select id,tag,title,create_date,content,status from SzTodo where id=?" con=sqlite.connect(getDbFileName()) cur=con.cursor() cur.execute(selectSql,(id,)) todoItem=ToDoItem() for row in cur: todoItem.id=row[0] todoItem.tag=unicode(row[1]).encode("utf-8") todoItem.title=unicode(row[2]).encode("utf-8") todoItem.create_date=unicode(row[3]).encode("utf-8") todoItem.content=unicode(row[4]).encode("utf-8") todoItem.status=unicode(row[5]).encode("utf-8") vim.command("call SwitchToDetailView()") vim.command("call SetSyntax()") for index,line in enumerate(str(todoItem).split("\n")): if index==0: vim.current.buffer[0]=line else: vim.current.buffer.append(line) EOF if a:preview=="true" exec bufwinnr(s:cur_buf) . "wincmd w" endif endfunction function! UpdateItemStatus(status) let choice=input('you really want to update the todo item status to '.a:status."?[y/n]") if choice=="n" return endif python << EOF import vim (row, col) = vim.current.window.cursor line = vim.current.buffer[row-1] id=line[0:line.find(".")] updateSql="update SzTodo set status = ? where id=?" status=vim.eval("a:status") con=sqlite.connect(getDbFileName()) cur=con.cursor() cur.execute(updateSql,(status,id)) con.commit() con.close() EOF endfunction function! InitDb() python << EOF import vim import os createSql="create table SzTodo (id integer primary key , tag char(20), title varchar(200), \ create_date varchar(10),status char(1),content varchar(5000))" path=os.path.dirname(getDbFileName()) if not os.path.exists(path): os.makedirs(path) con=sqlite.connect(getDbFileName()) cur=con.cursor() cur.execute(createSql) con.commit() con.close() print "db has been created" EOF endfunction function! s:DefSzTodoGlobal() python << EOF import vim from pysqlite2 import dbapi2 as sqlite statusDict=dict(done="done",postpone="postpone",doing="doing",unstarted="unstarted") class ToDoItem(object): def __init__(self,id="",tag="",title="",content="",create_date="",status=""): self.id=id self.tag=tag self.title=title self.create_date=create_date self.status=status self.content=content def __str__(self): return "=" * 50 + "\n" \ + "id:" + str(self.id) +"\n" \ + "tag:" + self.tag +"\n" \ + "title:" + self.title + "\n" \ + "status:" + self.status + "\n" \ + "=" * 50 + "\n" \ + self.content def getCurrentDate(): from datetime import datetime t=datetime.now() return t.strftime("%Y-%m-%d %H:%M") def getDbFileName(): dbpath=vim.eval("g:sztodo_db_path") path=os.path.join(dbpath,"todo.dat") return path EOF endfunction function! StartApp() python << EOF import vim import os if not os.path.exists(getDbFileName()): vim.command("call InitDb()") vim.command("call ListItems()") vim.command("call SetMapping()") EOF endfunction function! SetMapping() map <silent><buffer> o :call ShowItemDetail("false")<cr> map <silent><buffer> s :call ShowItemDetail("true")<cr> map <silent><buffer> i :call MakeTemplate()<cr> map <silent><buffer> r :call ListItems()<cr> map <silent><buffer> p :call UpdateItemStatus("postpone")<cr> map <silent><buffer> d :call UpdateItemStatus("done")<cr> command! -nargs=0 FinishedItem :call FinishedItem() command! -nargs=0 UnfinishedItem :call UnfinishedItem() endfunction function! FinishedItem() let s:list_type="finished" call ListItems() endfunction function! UnfinishedItem() let s:list_type="unfinished" call ListItems() endfunction function! SetSyntax() syn keyword sztodoKeyword tag title id status syn keyword sztodoStatus unstarted done doing postpone syn match tag "^tag:.*" syn match title "^title:.*" syn match id "^id:.*" syn match status "^status:.*" hi def link sztodoKeyword Keyword hi def link sztodoStatus Identifier hi def link tag String hi def link id String hi def link title String hi def link status String endfunction call s:DefSzTodoGlobal() command! -nargs=0 SzTodo :call StartApp()
发表评论
-
vim 的一些技巧
2010-03-27 20:43 10631 : 在编辑html文件时,vim对一些 B,I,EM,A ... -
vim 随意执行 python 代码
2009-08-21 16:54 4290vim72的win版本已经有内建的python支持,linux ... -
vim技巧 随笔
2009-03-22 22:50 1786文本块操作 di" : 删除 "&qu ... -
vimperator 小技巧
2009-03-19 23:51 1166在 vimperatorrc文件中 加入set guiopti ... -
python写vim script 之 糗事百科
2009-02-24 12:08 1743工作累了,难免想开点小差,弄点轻松的东西看看,又不能让老大发现 ... -
python写vim script之 山寨版气象
2009-02-14 20:57 1187说明: 1: http://www.hzqx.com/gzhf ... -
python写vim script 之 山寨版 dbext
2009-01-17 20:46 2569山寨版 dbext 需要有python支持的vim,windo ... -
gvim水平滚动条
2008-06-04 19:40 3877set guioptions+=b 一直没找到这个设置..不 ... -
好用的vim工具
2008-01-11 09:55 1700一个可以让vim来编辑任意窗口上文本编辑框的小工具。很有用 ... -
Vimperator 基础操作
2007-05-17 11:41 2480最常用的 h,j,k,l,gg,G,0,$等上下左 ... -
Best of VIM Tips (VIM's best Features) 缩减编辑版
2007-05-15 15:58 1283:nmap ,s :source $VIM/_vimrc & ... -
vim里用不常用的移动操作
2007-04-28 19:49 1145% : 这个常用,移到匹配的括号处 [* or ... -
VIMperator介绍
2007-04-20 17:39 1405官方首页: http://vimpera ... -
用vimdiff来比较文件
2007-04-17 21:47 1387启动 : gvimdiff 文件1 文件2(在比较模式 ... -
vim技巧(摘自linux宝库)
2007-04-14 10:40 1432vim在屏幕行间移动 当文件的某些行比较长,超过屏幕宽度时,通 ...
相关推荐
Python写vim script之山寨版dbext,这个主题主要围绕如何使用Python语言来编写Vim插件,特别是构建一个类似于dbext的功能。dbext是Vim中一个非常实用的数据库扩展,它允许用户在Vim环境下直接操作数据库,执行SQL...
Vim Script 中的命令是其强大之处。它们允许你控制文本的操作,比如移动光标、删除文本、复制和粘贴等。例如,`:global` 命令可以用于在整个文件中执行特定操作,`:map` 命令则能创建自定义的键位映射,让复杂的编辑...
在编程经验方面,虽然本书不是针对初学者,但如果读者之前没有编程经验,书中建议先学习一些基础的编程知识,比如通过阅读《笨方法学Python》等入门书籍,逐步建立编程思维,然后再来学习Vimscript将会更加容易上手...
总的来说,"python+vim+win"的组合为Windows上的Python开发提供了一个强大且灵活的环境。Pythonwin提供了图形化编程和调试工具,而Vim则带来了高效且高度自定义的文本编辑体验。通过熟练掌握这两者,开发者可以在...
python.vim_3.3
Python-mode是针对Vim文本编辑器的一个强大插件,它将Vim转换为一个功能丰富的Python集成开发环境(IDE)。这个插件集成了多种实用功能,以提高Python开发者在Vim中的工作效率。以下是对该插件及其功能的详细说明: ...
《Learn Vimscript the Hard Way》是一本专门为那些希望通过实践学习Vimscript编程语言的读者而设计的书籍。Vimscript是Vim编辑器的核心语言,它允许用户自定义编辑器的行为,提高工作效率,并实现复杂的文本操作。...
Python.vim是一个专门为Python开发设计的Vim编辑器插件,它增强了Vim对Python代码的支持,提供了诸如语法高亮、自动完成、代码折叠、跳转到定义等实用功能,极大地提高了Python程序员在Vim环境中的开发效率。...
该项目是一款基于Vim Script、Shell和Python编写的Vimplus自动配置程序源码,包含29个文件,其中包括4个Shell脚本、4个Python脚本、4个PNG图片、2个Markdown文件、2个文本文件、1个YAML文件、1个Git忽略文件、1个...
Mac 下 Vim 之 Python 配置步骤 Vim 是一款功能强大且灵活的文本编辑器,广泛应用于编程、文档编辑等领域。Python 是一种广泛使用的编程语言,广泛应用于人工智能、数据分析、Web 开发等领域。下面我们将介绍如何在...
**Python-Vimapt:Vim的强大包管理器** 在编程世界中,包管理器对于组织、安装和更新软件包至关重要,它们简化了开发者的工作流程。在 Vim 编辑器领域,Vimapt 是一个非常实用的包管理工具,它借鉴了 Ubuntu 的 APT...
PowerVim项目是一款基于Vim Script设计的集成开发环境源码,旨在为Java、Python、JavaScript和Shell编程提供优化支持。该项目包含740个文件,其中Vim脚本文件366个,文本文件154个,Java源代码文件77个,类文件67个...
learn vimscript the hard way的mobi版。方便用kindle来离线阅读。
该项目为基于Vim Script开发的PowerVim插件源码,支持Java、Python、JavaScript和Shell等多种编程语言的编辑。源码总量达740个文件,其中包含366个Vim脚本文件、154个文本文件、77个Java源文件、67个类文件、18个...
YCM 包含了 Clang 对 C/C++/Objective-C 支持,以及对 Python 的 Jedi 引擎支持,这些都让它成为 Vim 用户的必备工具之一。 要安装 YouCompleteMe,首先你需要确保你的 Vim 已经安装了 Python 支持。在大多数现代 ...
本项目是一款基于Vim编辑器的Vim Script编程功能设计源码,包含5113个文件,涵盖多种编程语言如C、Python、Shell、Java、C++、Lua、MATLAB和C#等,文件类型丰富,包括2121个vim脚本文件、1533个配置文件(dump)、...
在Linux开发环境中,Vim Script是一种非常强大的工具,用于自定义编辑器的行为和编写插件。对于提升代码可读性和维护性,注释扮演着至关重要的角色。在Vim Script中,我们通常会使用注释来解释代码的功能、用法或者...
该项目是一款基于Vim Script开发的PowerVim插件设计源码,总文件量为740个,涵盖了多种编程语言和文件类型。其中,Vim脚本文件366个,文本文件154个,Java源文件77个,类文件67个,模板文件18个,Markdown文件9个,...