加载中…
个人资料
善用佳软
善用佳软 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,226,628
  • 关注人气:3,353
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

善用Vim:实例系列(1)

(2007-12-20 21:57:32)
标签:

it/科技

分类: VIM/text
出处:http://blog.sina.com.cn/s/blog_46dac66f01008h0s.html
作者:善用佳软  初稿:20071220  更新1:20080219
善用Vim:实例系列(1)[本文说明] 写过多篇Vim应用小文,为方便阅读,现做整理,并删除旧文。以后凡Vim文章,皆归入此系列。另,为便于搜索,统一vim、gvim及大小写为Vim
[本文目录] 一、如果你不了解Vim 二、为长篇txt生成可跳转目录 三、用vimexplorer插件来管理笔记 四、自定义文件类型:日记 五、自定义文件类型:to-do  六、上例中折叠函数的解释
 
一、如果你不了解Vim
  请先Google之,或阅读《普通人的编辑利器——Vim(全)》。
  本文不介绍Vim的功能,只记录自己应用Vim之实例。
 
二、为长篇txt生成可跳转目录
  下图右侧窗口为唐诗300首的内容,左侧即为生成的目录,点击标题,可跳转到相应诗篇。
善用佳软Vim技巧插图
步骤
  - 注意到 唐诗300首.txt 中,每诗题目为顶格的数字,于是想到可用^\d来识别目录。
  - :vimgrep/^\d/% 取得目录。
  - :cw 将目录显示出来。此时目录窗口在下方,不方便。
  - ctrl+w H 将目录窗口移到左侧,实现了上图的效果。
  - 双击目录项,右侧正文窗口跳转到相应诗篇。 

补充
  - 更多资料见帮助 :h 之:vim、:copen、:cw

  - 除生成目录外,也可用作索引,比如:vim 树 % 就把所有含“树”字的语句列了出来。

  - 对于长句(Vim一句即txt一段),其列表显得太不精简,有些不实用。但可以通过:set nowrap优化。

  - 本文系xbeta据水木Vim版总结。

 

三、用vimexplorer插件来管理笔记
  vimexplorer.vim是Vim的插件,由水木社区mbbill网友原创开发。如下图所示,此插件本身有两个面板:目录树、文件列表,再加上一个预览窗口,就成了典型的树/列表/文件3面板结构,可以方便的管理和编辑笔记文本。
  [善用佳软 附图]
  下载请到http://www.vim.org/search.php搜索Scripts。最新版V0.98具有文件列表自定义过滤功能,比如在_vimrc中加一句 let g:VEConf_filePanelFilter = '*.txt\|*.ztx\|*.htm' 表示只显示txt ztx htm后缀的文件。
  常用键:在树、列表窗口切换:tab。树窗口开关目录:enter。列表中在预览窗口打开文件u。
  以前对Vim做笔记的研究多是着重于对单篇笔记的编辑功能,个别也有通过wiki word 链接来联系笔记的。但利用此插件,基于文件体系来管理笔记,也算是一条新路子,故记录之。

四、自定义文件类型:日记
  更新补充:原标题称为“日记”,改为日志更准确——因为我记录较简,因此设定了每天只一段文字。另,Vim对此适用,因为还有一个:X加密功能非常方便。
缘起:
  想找一个最简单的日记/日志软件,结果找到的都比希望的复杂。于是想到了Vim,做了如下的语法加亮文件。效果如图。
善用Vim:实例系列(1)
实现步骤:
  1. 把文后附注内容保存为Vim\vimfiles\syntax\ztxlog.vim
  2. 再在vimfiles\ftdetect\filetype.vim中加入一行
    au BufNewFile,BufRead *.zlg setf ztxlog
  3. 然后新建一个文本的test.zlg文件,内容如上图。注意:
      月份一行,*顶格,*后一个空格
      每日内容,行首tab缩进,/为半角,|为全角。
    当然这些格式也可以与语法文件一起更改。
  4. 用Vim打开test.zlg,效果如文章开始附图。

技巧提示:
  我从来不会先运行Vim,再打开某文件。对一般的文件,也是在TC中定位后直接F4。而对于这种超级常用的文件,则是win+r log。log.lnk的指向是
“"D:\program files\Vim\7vim\vim70\gvim.exe" --remote-tab-silent f:\pri\log07_k.zlg”

附:ztxlog.vim内容

" Vim syntax file
" Language:   ztxlog
" Maintainer: xbeta (http://xbeta.info)
set fdc=2
set lsp=5
syn match zhead "^*.\+" "星号打头算标题
syn match zhead2 "^\d\(\.\d\d\=\)\=\s\+.*"
syn match ztxt1 "`1"
syn match day67 "...\/\(\|\).*"
hi zhead guifg=green gui=bold
hi link zhead2 zhead
hi ztxt1 guifg=red guibg=red
hi day67 guifg=lightblue
set fdm=expr
set foldexpr=Myindent(v:lnum)
func! Myindent(lnum)
 let s:a=strlen(matchstr(getline(v:lnum), '^\*\+\s\+\|^\d\(\.\d\d\=\)\=\s\+'))
 if s:a > 3
     return '>2'
 elseif s:a == 2
     return '>1'
 else
     return '='
 endif
endf
 
五、自定义文件类型:to-do
善用Vim:实例系列(1)

把下述文字另存为easytodo.vim,
" Vim syntax file
" Language:        easy todo
" Maintainer:    xbeta (http://blog.sina.com.cn/m/xbeta)
" Changelog:    v1.0(061218)
" Install:
1) Copy this file into your $Vim/syntax directory.
2) Add this line to filetype.vim:
  au BufNewFile,BufRead *.etd setf easytodo
"Usage:
1) 缩进决定折叠层级。建议:第几周顶格;日期缩进1个tab;todo项目缩进2个tab。
2) todo项目前的数字表示状态,决定颜色。建议:0表示完成;1表示todo;2表示紧急todo。
3) 用Ctrl-A和Ctrl-X来对状态数字加减1。如按键无效,很可能是启用了mswin风格映射。

" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

set fdc=4
set lsp=5
syn match zweek ".*week.*"
syn match ztd0 "^\t\t0 \S.*"
syn match ztd1 "^\t\t1 \S.*"
syn match ztd2 "^\t\t2 \S.*"

hi ztd0 guifg=darkgray
hi ztd1 guifg=yellow
hi ztd2 guifg=red gui=bold
hi zweek  guibg=darkgray

abb <buffer> week week______________________________________________________
"上一句为输入week后,自动在后面加上N个下划级,这样比较醒目
set fdm=expr
set foldexpr=Myindent(v:lnum)
func! Myindent(lnum)
    let s:a=strlen(matchstr(getline(v:lnum), '^\t\+'))
    if s:a == 0
        return '>1'
    elseif s:a == 1
        return '>2'
    else
        return '='
    endif
endf
放入vimfiles/syntax下,
再在vimfiles\ftdetect\filetype.vim中加入一行
au BufNewFile,BufRead *.etd setf easytodo
然后新建一个test.etd文件,内容如下
01 week__________________________________________
    2007-01-01 星期一
        0 总结06年推广免费软件的成绩与不足
        1 制定2007年工作计划
        2 heyan8同学聚会
    2007-01-02 星期二
        1 善用佳软 http://blog.sina.com.cn/m/xbeta 发文
    2007-01-03 星期三
02 week__________________________________________


用Vim打开,效果如上图。

六、上例中折叠函数的解释
s:a等于某字符串长度
哪个字符串?当前行符合某特征的字符串 matchstr()
  当前行 getline
  某特征 数字或*类,数字\|*类
      *类:^\*\+\s\+表示:某行开始为一个或多个*,然后是一个或多个空格(或tab)
      数字类:
        \.\d\d\=表示:点,然后是1位数字,然后又是0或1位数字。如“.1”或“.12”。当然也可以有其他写法。
        ^\d\(\.\d\d\=\)\=\s\+表示:行首,后接1位数字,再接1或多个“.1 或 .12”,再接1或多个空格(或tab)
如果字符串长度为
  >3,如“1.1 xxxxxx”“**  xxxxxxx”“*** xxxxxxxx”
    则返回>2,表示2级别折叠开始
  =2,如“1 xxxx”“* xxxxxxxx”
    则返回>1,表示1级别折叠开始
  其他,就是匹配不到
    则返回=,表示级别同上一行

※ 本篇完,下一篇 善用Vim:实例系列(2)

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有