Pentadactyl/Vimperator:VIM化的Firefox

VimperatorVimperator 是让 Firefox 拥有模式、纯键盘操作、等 Vim 风格的强大扩展。本文源于tc网友的投稿,此后增加了善用佳软短期的使用笔记等内容。提醒:感兴趣的新用户,可直接选用功能更强大的 Pentadactyl分支 代替 原Vimperator!

【目录】
第一部分:tc网友关于VIMperator的投稿:
  一、入门篇Hint模式命令行可视模式
  二、高级篇;的使用配置文件快捷键更改进一步提高更多资源
第二部分:善用佳软的VIMperator使用笔记:
  一、安装 
  二、我使用的Vimperator功能及设置t打开网址屏幕缩放复制相关Gmail与Greader中屏蔽几个自定义快捷键其他
  三、关于Vimperator中默认编辑设定
第三部分:最新的Pentadactyl分支
第四部分:让更多程序拥有vim风格

Vimperator/Pentadactyl是Mozilla Firefox的一个扩展,它为喜欢使用键盘的用户提供了类似于Vim的用户界面。它和Vim一样,有着较陡的学习曲线。Vimperator最独特的是不需要鼠标, 这是因为它有所谓的Hint模式、带自动补全的命令行,以及帮助系统。

一、入门篇

1. Hint模式 (Vimperator hint mode)

Vimperator的hints允许用户实现通常需要鼠标来完成的动作。在此模式中,所有能被点击的网页元素会被编号,用户可以通过输入编号或者链接中的文字来选择。一旦一个元素被选择,就会执行一个操作(如点击、选择、复制链接地址等)。具体执行什么操作由用户如何进入Hint模式决定。

f(F) hints模式最为重要的一个键可以让你快速打开一个链接.
* h,j,k,l 这个熟悉vi的都不用介绍了,导航键
* H,L 前进后退键
* Ctrl+n 下一个tab
* Ctrl+p 上一个tab
* Ctrl+6 前后两个tab切换
* o url 在当前tab打开url
* o 关键字 用浏览器的缺省搜索引擎搜索关键字(用当前tab)
* t url 在新tab打开url
* t 关键字 用浏览器的缺省搜索引擎搜索关键字(用新tab)
* / 在当前页面搜索
* d 关闭当前tab
* u 重新打开之前关闭的tab
* zi 页面放大
* zo 页面缩小
* zz 恢复页面大小

2. 命令行

Vimperator的大多数功能通过窗口底部类似Vim的命令行来完成。像在Vim中一样,所有的命令以“:”开始。当用户输入 “:”,Vimperator就进入“命令行模式”。常用的命令如下

:help [主题] – 提供与[主题]相关的帮助
:open [地址] – 在当前标签打开[地址],地址可以是文件、书签的关键字、或者用搜索引擎搜索。
:back 和 :forward – 根据历史记录后退和前进。
:bmark [地址] – 创建书签。
:echo [表达式] – 以JavaScript的形式运算[表达式]并显示结果。
:set[!] … – 显示或修改Vimperator和Firefox的设置。
:map – 创建、修改键盘快捷键

3. 可视模式

vimperator的可视模式,就是按i进入,然后可以用h k l j 等进行位置的确定.然后可以进行特定段落的复制等操作.
具体的键盘操作可以参看帮助就是按F1或者在命令行下输入:help [返回目录]

二、高级篇

主要着重说明一些用vimperator可能不被注意的功能

1. ;的使用

(注:2.2版本有一些功能才被加入)
估计有好多的vimperator选手没有注意到这个键的用法.
具体的参看说明
举例;i
当按下这两个键时, 就相当于查看图片的选项,你可以在页面打开本面的任何一张图.
进行仔细的查看.
再一例;;
此项功能相当于正常模式下的f.即hint模式.可以快速找到需要的链接并打开.
进行查看

2.配置文件的使用

vimperator也如vim一样也是可以进行配置的.也有配置文件在在user文件夹下面.名称为_vimperatorrc

下面共享自己的配置.都是在网上找的.郑重感谢原作者

“surround com and net可以直接先输入网站名,再用<CTRL>+<ENTER>快捷输入.com/.net

cnoremap<S-Return> <End>.org<Home><C-Right>www.<CR>
cnoremap<C-Return> <End>.com<Home><C-Right>www.<CR>
“Next Page and Previous Page超级的下一页,基本上是够用了.快捷键是[[和]]
set nextpattern=\s*下一页|下一张|下一篇|下页|后页\s*,^\bnext\b,\\bnext\\b,^>$,^(>>|»)$,^(>|»),(>|»)$,\\bmore\\b
set previouspattern=\s*上一页|上一张|上一篇|上页|前页\s*,^\bprev|previous\b,\\bprev|previous\\b,^<$,^(<<|«)$,^(<|«),(<|«)$
” 此项功能是自动补全.在命令行下的自动补全.
set wop=auto
“命令行下拉菜单最多显示的条目数

set maxitems=6
“Look up the word you selected in dict.cn在dict.cn中查找所选词的英语
command! dict -nargs=* tabopen http://dict.cn/<args>
map w :dict
map <silent> W :exe “:dict “+content.getSelection()<CR>

js <<EOF
// Toggle Tool bar
liberator.globalVariables[‘sx_gopt’] = ‘T’
toggle_bar = function () {
toggle_status = liberator.globalVariables[‘sx_gopt’];
liberator.globalVariables[‘sx_gopt’] = (toggle_status == ”? ‘T’: ”);
liberator.execute(‘set guioptions=’ + toggle_status);
}
// Wiki Selected Text
wiki_selected_text = function () {
str = buffer.getCurrentWord()
liberator.execute(‘tabopen wikipedia ‘ + str);
}
EOF
” map to js functions F2来显示隐藏工具栏;用<C-W>来在wiki中查看词条.

map <silent> <F2> :js toggle_bar() <CR>
map <C-w> :js wiki_selected_text() <CR>

3. 快捷键的更改问题

对于一些快捷键,你可能觉得并不习惯,也可能觉得并不快捷.在vimperator下面都是可以进行更改的.
具体的方法如下(以下摘抄自网上,原地址是这里:http://pchu.blogbus.com/logs/32923406.html)
举例说明:
比如想要把翻页的的按键用JK来代替,可以如下定义(如果是写在配置文件里面,要把前面的”:”去掉才可以.直接在命令行下生效的话就要加上”:”的.
:map J <C-d> (回车)
:map K <C-u> (回车)
还比如.超级下一页的]]和[[不太好用.因为要按两次。我们可以这样设置
:map ] ]]
:map [ [[
再比如,在 vimperator下面你发现<C-c>和<C-V>是不管用的.那么怎么办呢?我们要如下设定就可以了,因为在vimperator下面.这两个快捷键是有另外用处,所以,可以这样做
noremap <C-c> <C-v><C-c>
noremap <C-a> <C-v><C-a>
cnoremap <C-c> <C-v><C-c>
cnoremap <C-v> <C-v><C-v>
cnoremap <C-x> <C-v><C-x>
inoremap <C-a> <C-v><C-a>
inoremap <C-c> <C-v><C-c>
inoremap <C-v> <C-v><C-v>
inoremap <C-x> <C-v><C-x>
inoremap <C-z> <C-v><C-z>
inoremap <C-y> <C-v><C-y>
这样子,你就会发现就可以正常用<C- c>和<C-V>了. [返回目录]

4. 再次提高vimperator的使用方法.

方法1.订阅新闻组
  vimperator@mozdev.org 这个是英语的.里面好东西不好,作者经常和用户进行交流,有什么疑问可以到这里提问.
方法2.观注几个博客 
  http://pchu.blogbus.com/ 主要是vimperator脚本的配置问题,很仔细,也很详细
  http://luoxiqofy.blogbus.com/ 这里主要是vimperator的脚本使用和配色问题.
  里面有几个文章,非常详细地介绍到了怎么把hints从数字替换成汉语拼音的方式.

5. 附另外的一些资源

vimperator的最新版本在google code上
http://code.google.com/p/vimperator-labs/downloads/list
vimperator也是支持插件的
http://code.google.com/p/vimperator-labs/issues/list
当然也是有主题的
http://code.google.com/p/vimperator-labs/issues/list?can=2&q=label:project-vimperator+label:type-colorscheme
可惜的就是,很久不更新了.基本上都还可以,这一点比较让人高兴.
vimperator入手不太容易.但是就如vim一样,学习难度都有点大.正所谓好东西.是值得
为了使用它而投入学习时间的.

vimperator的说明文档如同vim的说明一样,都是详细.同样可惜的是,也都是英语的.
曾经有人尝试把vimperator的2.0翻译成了汉语.可以参考
http://code.google.com/p/cvimp/
只不过没有最新的2.2
http://code.google.com/p/pinyin-hints-vimperator/
在vimperator这个扩展的hint模式中可以通过拼音首字母过滤中文链接.例如希望打开链接“论坛”,可以在vimperator按f/F进入hint模式,然后输入lt(拼音 l un t an),便会过滤出“论坛”以及其他类似内容。再比如“vimperator修改版”,可以输入xgb或者 vimperatorxgb或者vim空格 xgb(当然,通常你不要输入这么多字母,可能输入xg后链接就打开了)。 [返回目录]

附1:善用佳软的Vimperator使用笔记

  说明:我经常访问的网站只有三五个,对浏览器的要求并不高。所以,Vimperator的实际使用时间极短。2007年4月试用过几天,2010年初从Chrome回到Firefox后,又试用过一两周,并记录如下。
VimperatorVimperator是Firefox的一款扩展,它让Firefox看起来、用起来都象是VIM。你甚至可以说,有了它,Firefox变成了有模式的浏览器,完全可以纯键盘高效操作。

一、Vimperator安装

  用Firefox访问这里即可安装。当前(2010-02-18)版本v2.2,适用于Firefox: 3.5 – 3.6.*。

二、我使用的Vimperator功能及设置

  有些采用了默认设置,有些进行了个性化定义(c:\Documents and Settings\zyx\_vimperatorrc)。

t:tabopen 在新标签打开网址

  自定义如下,以实现键入”,tm”(不包括引号,共3个按键)打开gmail等常用网址。

noremap <leader>tm :tabopen mail.google.com<CR>
noremap <leader>tr :tabopen www.google.com/reader<CR>
noremap <leader>tx :tabopen xbeta.info<CR>
noremap <leader>te :tabopen xbeta.info/wp-admin<CR>

屏幕缩放

  +/- 可实现缩放(?Firefox还是Vimperator?)。这也是我的选择。
  如果认为 + 需要同时按下shift和=太复杂,可“noremap = +”。
  Vimperator默认的zi、zo也可以缩放(zoom in, zoom out)。

复制相关

  默认的设定(y: 复制当前页的url到剪贴板。Y:复制选中文字到剪贴板)很不合理,应该交换一下。如下配置竟能生效。
noremap y Y
noremap Y y

在Gmail和Greader中屏蔽Vimperator

  如下设定用来在gmail和greader中保持pass through模式,即Vimperator不要接管按键,直接传给gmail、greader。其实,也可不做设定,手工用 ctrl-z 进入 pass through 模式。
autocmd LocationChange .* :js modes.passAllKeys = /mail\.google\.com/.test(buffer.URL) || /google\.com\/reader\//.test(buffer.URL)

方便折腾与兼顾实用的自定义快捷键

  修改配置文件后,键入,s即时生效。
map ,s :so “c:/Documents and Settings/zyx/_vimperatorrc”<CR>

  在有无菜单、地址栏之间切换:
  map <C-Up> :se go=mnT<CR>
map <C-Down> :se go=n<CR>:

其他

  gf:查看页面源代码。
  h/l:由于默认左右移动功能很少用到,所以,重新映射为前/后标签页。noremap h gT,noremap l gt。

  其他功能也会用,但用得不多 [返回目录]

三、关于Vimperator的编辑器设定

  我选用Vimperator,最初只是用来代替It’s All Text扩展。现在的设定是 se editor=”d:/soft/Vim/vim72/gvim.exe -f” 。按下ctrl+i,直接在vim中编辑当前文本框内容。美中不足的是,默认文件名是 .tmp,暂时未找到设定为 .htm的方式。网友提到,可以在 vimperator@mozdev.org\chrome\vimperator.jar 中修改 common\content\editor.js,但我没找到相关设置。

1. 路径分割符的斜线方向

  善用佳软(2010-02-17,winxp-sp2, gvim 7.2, VIMperator 2.2)实验结果:用斜线作路径分割符。
  windows中标准路径为反斜线:如 d:\soft\Vim\vim72\gvim.exe
  但无论 _vimperatorrc 文件,还是临时设定(即直接在Firefox中进入命令行,键入命令),必须把反斜线(\)改为斜线(/)。

2. 路径中的空格

  如果路径含空格,必须写为dos 8.3式的短路径,比如 :se editor=”C:/Progra~1/vim/vim72/gvim.exe -f”。(NONAME、hi_lucky 于 2010-02-14)
  把反斜杠换成四个反斜杠,空格换成两个反斜杠一个空格……最新版 Vimp测试成功(1wingedangel 于 2010-02-14)

3. 把gvim.exe目录加入系统路径

  其实,Vimperator已默认设置为 editor=gvim.exe -f。因此,只要把gvim.exe所在的目录,加入系统变量path即可(或许要重启动)。也可以尝试一下 :se editor=notepad.exe 来间接验证此方法的可行性。

4. 关于 -f 参数

  详见vim中 :h -f。这样做就必须打开一个新的gvim.exe,以供Vimperator监控编辑工作是否完成。缺点是启动新gvim速度较慢。而 It’s All Text扩展则是通过监控临时文件来实现更新,可以利用已运行的gvim程序,更优一些。

5. 关于文件类型

  我习惯用gvim来发表博客,直接写html源代码。这时,按下ctrl+i后,希望能自动设定ft=html。而Vimperator并无此设置。有网友提到,可以修改源代码,这超出了我的能力范围。后来在vimrc文件中增加了如下语句,默认为html:
  au BufRead,BufNewFile vimperator-*.tmp setlocal ft=html
[返回目录]

附2: Pentadactyl: Vimperator的替代者

Vimperator是开源软件,因此,大家都可以参与开发和改进,也可以形成新的分支。Pentadactyl 是由 Vimperator 项目最活跃的开发者 kmaglione、dkearns 维护的分支。它针对 Firefox4,利用新的js引擎加速,所以,性能方面比 Vimperator 有了显著改进。按官方的说法,号称启动速度提升了 7 倍。其他改进之处包括:默认隐藏命令行、改进隐私模式 :sanitize 支持、更快速的前后向渐进搜索、用 | 分割多条外部命令。更多改进参见这里

相关链接:

Pentadactyl 在 Firefox Add-on 页面
官方网站

从Firefox到Thunderbird及Songbird

另外,Dactyl 项目的目标可不局限于Firefox,而是所有的 Gecko 应用,也包括 Thunderbird 和 Songbird 。Dactyl 项目的总目标是让这些优秀的程序更加高效、舒适。其中,用于 Thunderbird 的 Teledactyl 项目已发布了 alpha 版本。

开发团队称,Dactyl 项目的灵感、动力主要来自 Vim, Links, Lynx, mutt, cmus, Emacs, Conkeror 等可敬的 UNIX 应用,以及它们的开发者、用户,是它们指引着 pentadactyl 的方向。

用户评价:

Vimperator的作者之一Kris Maglione,也是vimperator-labs上面维护plugins最多的人,突然在上面宣布他所有的插件全部移至另外某处host。遂移步前去。看页面最下:Kris Maglione, Doug Kearns, Martin Stubenschrott,其中两个都是Vimperator原版人马。就冲这点,我等Vimperator众就该战栗了。我顿时毫不犹豫装上一试,用最新版的1.0 beta3已经完美运行起来了,而且相比Vimperator真的改进很大。

我今天使用了一天 Pentadactyl 1.0 beta 3。我觉得是,Vimperator老用户5分钟适应的同时,会发现,细节之处改进颇多: 自动补全的速度提高不少;让我爱不释手的全新命令行和状态栏结合体;更多有用的选项等等。

突然发现这个在firefox4里比vimperator要好用。ps:作者很给力。[via 豆瓣小组 fwoncn、 IK]

Pentadactyl与Vimperator之间的选择

从未来发展来看,显然Pentadactyl的发展空间更大。但与目前的扩展兼容性方面,Pentadactyl还有不足。
– 新用户:如果此前未用过它们,可直接使用Pentadactyl 。用 Firefox4 者尤其推荐。
– 不再折腾的 Vimperator 用户:无须更换。“那个只针对ff4的,利用新的js引擎进行加速所以很快,而且也支持panorama分组。但是设置需要改动很多并且大部分的扩展都不能用了,另外FF4目前还没有正式发布,我觉得不用赶这个时髦” [via @???]
– 喜欢折腾的:大胆去试、去比较吧!

附:让更多程序拥有vim风格

Vim 不仅界定了文本编辑器的高标准,而且开创了键盘操作风:hijk…… 让无数英雄竞折腰!于是产生了如下作品:
Muttator:由 Vimperator 作者开发的 Thunderbird Vim 风格扩展。不仅实现了 Vim 风格,还继承了 Linux 下传奇文本邮件客户端 Mutt 的精髓。
– 在Visual Studio、Eclipse、Netbeans IDE、JetBrains PhpStorm、Chrome 等环境下实现Vim操作:参见 用vim的方式操作你的软件,文中最后还提到了一款通用的ahk脚本 vim-mode,在多数程序中实现vim操作模式。 另可参见 用VIM的方式去浏览互联网
viatc:让强大高效的TC,也拥有Vim的便捷操作。作者是国内网友linxinhong,制作工具也是AutoHotkey。

附:扩展阅读

  vimfox.info: Vimperator的中文大本营 推荐!!!
  玩酷的vimperator教程
  Vimperator —— 用键盘畅游网络
  Vimperator 快速指南|官方tutorial.html翻译
  使用Vimperator制作超简约风格的Firefox

附:文章更新历史

  2012-05-16:补充第4部分 让更多程序拥有vim风格
  2010-11-15:补充 Pentadactyl;补充 vimfox.info 。
  2010-03-20:收入tc网友的投稿,并作为主文发布;自己的笔记作为附录。
  2010-02-23:部分更新。
  2010-02-18:从Chrome换回Firefox,受网友鼓动,重新启用更新后的VIMperator。
  2007-04-16: 初稿,只是试用,并未实用。>

我这样使用VIM:索引贴 ★★★★★

vim
本文将作为“我如何实际使用gVim”的索引贴,不定期更新。

一、基本说明

gVim使用情况:
绝大多数情况下,是处理文本(txt、html);
少数情况下,处理 AutoHotkey、ini文件;
从来不处理程序代码,因为不会编程。

gVim学习过程:
(待补充:2005年……2次学习,ERP,打印小册子)参见:普通人的编辑利器——Vim

我的gvim设置:
vimrc文件:…… 常用插件:……

二、常用功能

重点:用VIM记笔记
最初,用自定义txt。
自定义高亮文件,实现了对日期的高亮(yyyy-mm-dd);标题高亮,且折叠,这样可以方便的管理长文件;快速定位和查找(/)。
2005年9月的方案见水木文章(附语法文件,效果图)
此后,修改折叠方式,参见 水木文章(附代码、效果图)

后来,明白了txt与html本是一体,放弃了原来的做法,改用html格式记笔记。细节见下:
* 为什么txt与html是一回事?原因是pre标签,详见 链接
* vim 写 html 可以借用自定义缩写、snippet、vimhtml 扩展。三者之中,仍以自定义为本。(待详细展开)
* vim 编辑 html,可借助 Voom 扩展,实现左侧目录导航,详见链接

重点:用Vim写博客
写博客,不用WordPress可视视图,直接在vim中手写代码,部分内容同上。另外补充两条:
* 从WordPress到vim,用ahk脚本,见……
* 具体效果参见视频演示

vim临时处理文字
在把文章转发到BBS/论坛时,会用VIM排版。
* 段前两个全角空格:Ctrl+Q,jjj……, I两个全角空格, Esc
* 合并行:J

用VIM来做通讯录。X加密后要密码才能打开;/快速查找(维护记录时加一个英文简称,如syjr 善用佳软 010-62001234,则/syjr就能定位到了);Email高亮。

把VIM指定为 Total Commander 的F4默认编辑器。

三、偶尔使用或曾经使用的功能

辅助Excel等系统处理数据:主要利用正则替换、列模式功能。如把2006-6-30替换为2006.6.30或2006.06.30

机密文件(比如带有业务数据的excel)先用VIM修改(破坏)一下再del。

打开常用文件的方法:最常用的文件指定一个全局书签(比如关于VIM的笔记指定为N,则要打开时只要`N就可以了);最近打开过的用:MRU插件;知道目录的用:e d:\xx\yy\z.txt利用tab补全。

VIM中取消菜单和工具栏,简洁。

有时可用它放到顶层和透明度来做笔记。详见这里

可以比较文本文件的差异(用的较少,比较文件本来就少,TC更方便)。

总结一下就是,主要用它的快速定位、批量且强大的替换功能。


2011-05-19:几乎重写本文。
2006-07-05:初稿,发于新浪博客。

支持非等宽字体、屏幕取词的gvim v7.3

关于更适合中文用户、更适合非编程用户的vim的讨论(12)终于取得了一点实质性结果:支持非等款字体支持金山词霸、有道词典取词的 windows gvim.exe v7.3 终于出现了。感谢 Dieken、湖间小筑的技术研究、动手制作。
[image]支持金山词霸取词的gvim修改版

一、gvim的屏幕取词

问题描述:
  Windows下,金山词霸、有道词典启用屏幕取词功能,但在gvim窗口中无法取词,或不能准确地取出完整单词。
原因分析:
  程序沟通问题。
  跨平台、跨语言的gvim考虑了更复杂的情况(但没有区分):并非所有文字都是从左向右阅读,某些语言会从右向左,如阿拉伯语等。而金山词霸、有道未充分考虑此情况。

Dieken @ newsmth,2007-01-29, via

gvim 7.0.188 版本 gui_w32.c:gui_mch_draw_string():2255 这两行判断太严格了:
if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
foptions |= ETO_IGNORELANGUAGE;

这个是为了 Hebrew 和 Arabic 文本加的,但是并没有加这个的判断, 我用
if (
#ifdef FEAT_RIGHTLEFT
curwin->w_p_rl &&
#endif
os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
foptions |= ETO_IGNORELANGUAGE;
实验了一下,在有两个窗口,一个没有设置 rightleft,一个设置了rightleft,当光标处于后者时,还是不能取词,需要光标挪到没有设置 rightleft 的窗口内才行,这个问题还不知道怎么改,交给邮件列表处理。

对于大多数人来说,不会用到 rightleft 特性,所以可以直接把那两句注释掉,然后就可以正常取词了。

二、gvim支持非等款字体

说明一:gvim 并非不能支持非等宽字体,而是在编译时,默认忽略了非等宽字体(Ignore non-monospace fonts without further ado)。在多个平台中,gtk2下的gvim是默认支持非等宽字体的,其他平台默认不支持。

说明二:无论字体是否等宽,vim都会重新对齐。即显示效果仍然是等宽的。因此,『支持非等宽字体』的gvim,可以换用更丰富的字体,并不可以得到非等宽效果。

解决办法一:非等宽字体编译时加 -DFEAT_PROPORTIONAL_FONTS 就可以了。make 的时候加一个参数。[via milksea @ newsmth](这2句话是同一回事吗?哪位帮助整理成更准确、书面语的表述?)

解决办法二:修改源代码,取消对非等宽字体的忽略。比如,在 os_mswin.c 中查找mono,会看到一处注释说忽略非等宽字体(Ignore non-monospace fonts without further ado),把下面一行注释掉即可。via

三、下载及讨论

支持非等宽字体、支持屏幕取词的 gvim.exe v7.3 下载,及相关讨论,敬请访问
让win下的vim支持非等宽字体|湖间小筑

====
(完。初稿2007-01-23;更新2009-02-06;更新2009-05-07;更新2010-09-19)>

《拿起画笔,描绘你心中的Vim》补充说明

Ame网友的 拿起画笔,描绘你心中的Vim 引发了很多讨论。为此,把我之前准备发布的文章及邮件往来也发出来。


网友Ame非常热情地来信,标题是『请您完善Vim对中文的支持』,让我大吃一惊。经过沟通后才明白:
* 他的目标:建设更适合中文用户、非编程用户的gVim;
* 具体建议:
  * 对非等款字体(比如雅黑)的支持;
  * 非utf-8的优化;
  * 精简安装包,如ole。
  * 增加必要插件,如vimwiki。

我认为最低可以修正两处硬伤:(因为该问题在 vim 7.2 时代都解决过)

1. gVim对非等款字体的支持;
2. gVim对金山词霸取词的支持

下面是 2010-09-08 开始,Ame与xbeta的邮件往来。发出来,一是听取意见,二是寻求有编译能力的志愿者。

邮件1:from Ame

你好,我是一名善用佳软的读者,看了贵博的文章后我开始学习Vim。和您一样,我主要用Vim进行中文处理和网页编辑,因为自己也算半个小站长吧,呵呵,但是您有没有注意到呢,官方版的Vim对中文支持非常疲软。

首先它不支持非等宽字体,自然就不支持微软雅黑。虽然编译后可以。但对像我这样非程序员的群体来说,这实在是个不可能完成的任务。而有此能力的程序员,专注于代码而非中文处理,多半也无此要求。

事实上我从 http://lcuc.org.cn/node/1315 下载了编译后的72版本Vim(那还是08年的),然后从官网上找到旧版安装包,覆盖安装后虽然能从命令行打开微软雅黑(gui选择界面里还是没有),但把字体放大仔细观看还是有很多瑕疵。

例如:么,也,美 这些字,笔画上有明显的锯齿,这可称不上是完美的编辑器。

您大力推广这个强大的编辑器,实在是造福国人的举动。但是若Vim本身对中文的支持不能完美,推广也是白费力气。

请问您能否给出一个完整的解决方案呢?Vim实在非常繁复,有个性化的需求就涉及编程。如果我们是程序员,那我们可以自己解决。但若真是程序员,也不用别人来告诉我们Vim是什么,呵呵。或者您指出我们可以到哪里找到这个解决方案,也许我的做法有误。但我已经付出数十个小时在google上搜索,我相信在非程序员群体中,自己还算是有点小技术的,但是我求不得这个问题的解。

多谢您看完这封冗长的邮件 🙂 期待您的回应。

邮件2: from xbeta

Ame:

感谢你的信任。

如果说你『在非程序员群体中,自己还算是有点小技术的』,那么,我属于完全不懂编程、开发的。
所以,我的选择更少,因而结论更简单:用其长,避其短;关注其进步,正视其缺陷。

比如,字体,界面,我本身就不关注。
说到对中文最大的不便,应该是分词——比如w跳转——那我就用鼠标。
某些插件对中文支持有问题,就忍着,或不用。

如果有更大的实际需求遭遇了更大的困难,放弃vim也并非不可能。

我们的生活并非完美,Vim也一样。
我们只追求产出的完美,不要追求工具的完美。

Just use the unperfect Vim to create your best website.

邮件3: from Ame

如果可以的话,您可以倡导这件事。我只是提议。如果一件事被证明是可行的,为什么不去将其完善呢。Vim编译后可以使用非等宽字体,也能区别中文和英文使用不同的字体。有一个帖子写过编译Vim来看电子书,可见Vim的可视化是能做的很棒的。

但是随着编码,字体,配置文件的不同,Vim的使用也千差万别。至今为止,关于Vim编译的资料零星散落在网上,给不懂技术的入门者带来很大不便。我的想法是:

1.整合一个面向一般人(非程序员)的整合包。
2.如果您做不到,可以和程序员社区合作。若是我这样默默无名的小字辈去倡导,可能帖子马上就沉了。:)

可以开展一个连接一般用户和程序员社区的活动。一般用户来提出易用性,运行环境等等的提议,然后携手打造一个真正面向所有人的中文化Vim。

这个Vim包可以维护在 code.google.com 上,我本以为一定有人已经做了这个计划,但现实让我失望了。

您说有要容忍必须容忍的缺点,但据我搜索的结果这并非不能解决的问题,只是一般人很难解决而已,因此这是一个提倡程序员和一般用户互助的问题。

如果实在不行的话,只好去拜托我当程序员的哥们了 XD 其实上个礼拜我就拜托他给我编译Vim,可是他说他做项目一天只能睡四小时,唉。

邮件4: from xbeta

您说得很对,我过于实用主义和消极了。
可能我对你提出的问题的技术可行性理解也有偏差,不过现在明白了,它是可行的。
另外,我也想到了一个例子:gvim @ windows 对金山词霸取词的支持情况,在v7.2也有人解决过,但v7.3又没人编译了。

这件事乐观讲,可能1周就找到志愿者。
不太乐观讲,随着提出的问题不断增多,或需要持续超过12个月管理协调。
而我在2011年3月之前,实在抽不出多少业余时间。

你如果愿意推进,我可以为你在 http://xbeta.info 开一个账号,来发文、更新文章、回复评论,以主导此事(我会协助)。
就象最近两位网友分别主持:
* 神逸之作:国产快速启动软件神品ALTRun(征求新版功能意见中):有 500+ 讨论
* 第一篇 群雄并起——文本编辑器的武林大会:有170+ 讨论一样。

如果你有把握,就直接行动。
如果没有把握,我们可以试着把这些邮件讨论发到 http://xbeta.info 和 水木vim版,看看大家的反馈。

有意义的事,就做起来吧。
即便是半成品,也要做成有利于后人进一步加工的半成品。

多谢你的热情。

邮件5: from Ame

谢谢您的信任: ) 我也很想主持这一行动。但说真的,我虽然从半年前就通过贵博了解了Vim这一存在,但真正把它作为工作中的重要工具还是最近一个月的事。自己对Vim的所知实在太少,我觉得还是让更了解它的人来主持,才不会让项目半途而废。

您可以把它和“群雄并起——文本编辑器的武林大会”合并起来,在介绍的同时推出一个整合Vim包,这不正是顺理成章的事吗?我会成为最热心的参与者的 : )

您在写作博文的同时,肯定考虑过文章受众的问题。确定受众正是SEM(互联网营销)最重要的一步。此项目的受众我认为可以定位为:“了解一定电脑知识,有兴趣为改善效率付出一定时间和精力,有使用纯文本编辑器的需要,但不懂编程,也没有大量时间耗费在编译和调整上的人群”。

这群人如个人站长(某机构统计的2600万),大学生,非技术的IT营销人士。应该是很庞大的!呵呵。以我为例,我用Vim最大的契机,就是用Word编辑的富文本,粘贴到网页编辑器中会变得乱七八糟,因此有了使用纯文本编辑器的需要,纯文本编辑器里有一大部分又是收费的,那么免费的哪些功能强大又容易入门呢?答案出来了——Vim。

而层出不群的问题会吓跑这群人。如果word不是太难用,可能我还在用word,因为分分钟用来工作都能换来钞票,为什么要浪费在调试一个编辑器上呢。

就Vim来说,我们可以花时间去适应快捷键,花时间去写一些宏和脚本,写vimrc,因为这些能提供工作效率,但我们喜欢它能够稳定的工作,在发挥强大的自定制功能之前,首先能做好一个编辑器的本分。因为我们不是程序员嘛。像我就在自带的vimrc的尾部写入自己的代码,这样不花时间,而且绝对不会出问题。

Vim官网提供的BIG版本,的确一定程度上能做到这种易用性,但是它不够本土化,而且最重要的是:它是面向程序员定制的。

而我们需要面向普通人定制的Vim
1.一个解压后即运行的编辑器,不管XP还是win7,不管utf-8还是cp936都能完好运行,显示相同的结果。(可能需要不同的vimrc吧)而且用户最好不需要懂得什么utf,那太麻烦了 XD

要是安装的时候能自动识别环境就好了…

2.去掉c++,java支持以及什么ole,精简安装包。让它变得简单易懂(每一个部分是干什么的),强调其作为纯文本编辑器自身的功能。最多带个HTML语法支持就行了,当然这需要调查大众需求。

3.本土化。优化中文支持。(按google来的说法只要改下编译选项,在VS2010里重新编译一遍就能支持非等宽字体)我现在用修改版的gvim72虽然能调用微软雅黑,但笔画有锯齿,而且英文显示惨不忍睹…试图在vimrc中写入双字体支持,却发现需要vimrc格式为utf8,而调用雅黑需要格式为cp936囧…说真的,大多数人走到这步绝对会直接放弃了。

一个文本编辑器,字体(外在显示效果)是最基本也是最重要的部分。word的home选项卡最明显的部分放的就是字体调整。也许程序员不在乎,但是一般用户在乎。

4.加入一些必须的,配置好的插件。比如Vimwiki之类。

我只想到这么多,总之就是把它从一个面向程序员的软件,变成面向普通人的编辑器吧(加上本土化),这种感觉,呵呵。就算有一些问题短时间在技术上无法解决。大方向我认为是值得努力的。

这是一个可以长久运作的项目。我认为它和“群雄并起——文本编辑器的武林大会”是很搭的。大可以一起运作 🙂 作为一个下属的技术项目。

拿起画笔,描绘你心中的Vim(来自Ame的倡议)

[image]
我有一个梦想!
我梦想有一天,Vim不再仅仅是程序员的宠儿,而成为尽人皆知的编辑器。当我打开国内软件下载站的页面时,能看到右图这样的画面。

这不可能吗?现在的Vim的确不可能。但一个完全面向普通人的Vim呢?

1. 所谓的文本编辑器

维基百科中“文本编辑器”一词定义如下:文本编辑器是用来编写纯文本的计算机软件。操作系统和软件开发包往往都提供文本编辑器,用以修改配置文件和程序的源代码。百度百科则说的更直白:文本编辑器(或称文字编辑器)是用作编写普通文字的应用软件,它与文档编辑器(或称文字处理器)不同之处在于它并非用作桌面排版(例如文档格式处理)。它常用来编写程序的源代码

看到了吗?文本编辑器原本就是程序员的禁脔,想用它们编辑纯文档的普通用户,就像误入童话王国的Alice一样,不是那么受欢迎的。

但Vimer的心胸依然宽大,煞费苦心在桌面上放置了easy模式,还翻译了准确的中文帮助——这一切对程序员来说都不是必须的。我们要感谢Vim社区的良苦用心,但同时也要看到,(即使经过种种努力)Vim依然是一个面向程序员,而非普通用户定制的程序。

2. 普通用户和程序员的需求差异

普通用户和程序员对编辑器的要求南辕北辙。程序员写代码,一般人写文档。程序员用英文多,一般人用中文多。程序员需要IDE整合,语法高亮,编译支持。而一般人仅仅期望通过可自定制的vimrc,快捷键,宏和少许插件提高工作效率,并且没有太多时间花费在处理软件问题上。不同需求,自然需要不同的整合方案来解决。
就像下图所示:
[image]

熟悉Vim的老手都知道,Vim.org提供的整合安装包(即Vim73.exe)只是一个大众化的BIG版本,其中很多功能没有开启。他们鼓励程序员下载源码编译出适合自己的程序。例如Vim一直为人诟病的等宽字体问题,实际只需要改动make文件中的一个选项,重新编译一遍即可。既然个性化定制Vim可行,为什么不把它改造成适合大多数人的程序呢?这并不等于失去Vim最重要的特性——高度自由,事实上在谈论自由之前,我希望它能做好一个软件应尽的本分。

3. 我的建议

因此我提议搜集整合大家的意见,塑成一个大伙心目中完美的Vim模型,然后提交开源社区,招募志愿者编译代码。项目可以维护在code.google.com上,随着意见的不断丰富,完善,同时随着Vim主版本的升级可以不断推出升级版本。其核心围绕两点展开:

1. 面向普通用户优化。
2. 中文支持优化。

一些需求,例如中文分词问题,连google都不能完美解决。可以把它写在项目首页上,留待技术的进步。

先说说我想要什么样的Vim吧!

? 在任何系统下完美显示微软雅黑
? 不要再问我设置什么cp936和utf-8,即使不研究这些东西,我的脑袋也快炸了 : X
? 精简安装包,除HTML外去掉其他语法支持。
? 进入插入模式自动切换成中文输入法,退出到编辑模式时自动切换成英文输入法。

切换模式自动切换输入法,似乎改动vimrc就可以,但假如我不写这篇文章,即使过去十年,二十年,可能依然会傻呵呵的Esc之后ctrl+space。为什么?因为Vim的源程序是面向程序员定制的,程序员写代码根本就不存在切换输入法的问题。但对普通用户来说这却是最棘手,最麻烦的问题。因为它完全抹杀掉了双模式操作的优点。几乎是致命的。假如我们面向普通用户制作的Vim天生就集成这一功能,就能让新上手的用户也能体验到Vim的强大!

那么还等什么,让我们拿起画笔,描绘自己心中的Vim,把大家的愿望化为现实吧!好Vim,不做吗?XD

xbeta注: Ame的热情可嘉,我很支持。因为我自己就是一个非编程用户,最早的一篇Vim文章 《普通人的编辑利器——Vim》,也是为了纠正“只有程序员才适合用vim“的偏见;只是限于个人能力,多取适应vim的策略,没敢像Ame这样激进,准备改造Vim。但只要行动起来,还是有希望的。

VOoM(原VOOF):vim实现带折叠双栏树状文本管理

重要说明:自v4.0开始,VOoM支持html、vimwiki、wiki等格式的标题,本文有待更新。
  Vim[1]加装VOoM插件,实现了带折叠的双栏树状文本管理 [2]/[3],为我几年来的寻找画上了近乎圆满[4]的句号。只须在txt文本的标题行增加 {{{1、{{{2…… 或其他自定义的简单标识,利用VOoM就可以生成目录树,与正文分居两窗口,实现光标点击跳转,以及对节点的层级、顺序管理。即,VOoM让txt成为最通用的资料库,让Vim成为最方便的个人信息管理软件。

一、VOoM界面预览及视频演示界面视频
二、VOoM基本教程安装python支持基本操作
三、高级使用:改进VOoM快捷调用更快捷定义标题行高亮标题行并隐藏标识符自定义标识符在html中变通使用
四、总结
附录:注释文章更新历史

一、VOoM界面预览及视频演示

1. VOoM界面预览

  VOoM:vim outliner
  上图是善用佳软使用Vim VOoM的实际截屏,从中可以看到如下特点:
  * 两栏;
  * 左侧目录可折叠/展开(正文也可以折叠,本例未采用);
  * 点击目录可实现正文跳转;
  * 标题高亮。

2. VOoM视频演示

  下面的视频是使用vim的outliner功能,来写日记的示例。有助于初学者感性认识及理解Vim,内容包括:
  * 用fdm=indent实现基于缩进的长文本折叠管理。
  * (2分10秒开始) 下载安装VOoM插件。
  * VOoM的使用。
  * (3分20秒开始) 自定义语法文件,高亮标题。
  需要说明的是视频中未能展示节点管理(改变层级、调整顺序)功能。

二、VOoM基本教程

1. 安装VOoM

  VOoM插件的安装与使用极为简单,有基础者可以略过本段。
  * 到Vim官方网站VOoM主页下载最新版:http://www.vim.org/scripts/script.php?script_id=2657
  * 解压到vim安装目录/vimfiles/下。(比如在我这里,就是把 voom.zip 中的 doc目录、plugin目录,复制到 c:\Program Files\gvim\vimfiles\ )
  * 重启Vim。
  * 打开自带的示例文件 simple_outline.txt (可能位于 x:\soft\Vim\vimfiles\voom_samples\)。
  * 在命令行模式键入(注意大小写):Voom 并回车。

  如果顺利:现在就能看到左侧的树状目录了。
  如果不顺利:Vim提示出错,比如“E370: could not load library python27.dll” 等,说明PC上需要安装 VOom 依赖的 Python 环境。详情见下。

2. VOoM 与 python

  VOoM 为什么依赖 Python?答案是运行效率。用 Python 扫描文本检测 fold marker 的速度,相当于 vim 脚本的10倍。作者在帮助文档的“Why VOoM uses Python”一节,给出了详细的测试代码和测试结果。
  所谓 VOoM 需要 Python支持,具体包括两方面:
  ① GVIM.exe 支持 Python;
  ② 系统中安装有对应版本的Python环境。
  条件①通常具备,因为官方发布的gVim默认是支持 Python的。
  条件②可能会有些问题:如果你没有安装Python,这时就需要根据gvim的版本,安装合适版本的Python:gvim7.3需要Python 2.7,gvim7.2需要Python 2.4。安装Python时最好在C根目录。如果你的Python版本与gvim版本不对应,一种办法是换用正确版本的Python;一种办法是重新编译gvim,让它支持你已经安装的Python版本(不会编译的请到 这里下载)。
  为了这样一个插件而安装Python,对普通用户是否值得?这是一个爱屋及乌、见仁见智的问题。笔者不做程序开发,安装JRE是因为FreeMind;安装.Net是因为EverNote v3.5;安装Python是因为VOoM与UltiSnips;安装Ctags、taglist是因为TxtBrowser……

3. VOoM 基本操作

  鼠标方式:Vim并不排斥鼠标。如果想用鼠标操作VOoM,则它与类似软件并无区别,无须解释。
  键盘方式:Vim的长处还是键盘。要点如下,详见帮助文档。
  1. 基本操作之Tab:在左右 [6]两个窗口之间切换焦点;
  2. 基本操作之跳转到目录:在目录树侧,可通过↑↓来打开正文的相应位置,→←来展开/折叠父子节点。
  3. 节点基本操作:在目录树buffer中,如下快捷键可用:
    i I a A:修改当前节点标题行。
    <LocalLeader>i、I:在当前节点前、后插入新节点。(LocalLeader默认为\,也可自定义)
    ctrl+方向键:上下移动节点(调整顺序);左右移动节点(调整级别)。
    dd yy pp:删除、复制、粘贴节点。

三、高级使用:改进VOoM

1. 更快捷调用VOoM

  默认情况下,需要键入 :Voom回车 来调用VOoM插件。此过程需要注意输入法状态、vim模式、大小写,不算简便。因此,可以自定义热键。
  我的选择是映射为 F11 ——选择 F11 是因为数字11的形状与双栏式结构很相像,便于记忆。
  具体做法是在 _vimrc 中增加一句 “map <F11> :Voom<CR>”——放到 _vimrc中因为此命令常用。

2. 更快捷定义标题行

  如果认为 {{{1 这样的字符串也不便于键入,不妨进行自定义。举例如下。

例1:基本做法
  imap [1 {{{1
  imap [2 {{{2
  imap [3 {{{3
  实现了插入模式的映射,即键入 [1 可以得到 {{{1 …… 当然,也可用缩写代替映射。

例2:改进做法(推荐)
  imap [1 <esc>$a {{{1
  map [1 <esc>$a {{{1
  功能同上,但不限模式、光标无须准确定位。

例3:Geek做法(供参考)
  设定1/2/3级标题,在 MS Word 中的默认热键是 ctrl+alt+1/2/3。按照“不同软件的操作方式尽可能一致”原则,也力争在VOoM中保持同样热键。但是,Vim map 并不支持 ctrl-数字,所以,ctrl+alt+数字也是做不到的。一定要实现?请用万能的AutoHotkey :

^!1::
IfWinActive, ahk_class Vim
{
sendinput {esc}$a {{}{{}{{}1
}
else
sendplay ^!1
return

3. 高亮标题行、隐藏标识符

  为实现高亮效果,可以使用如下syntax代码:

syn match zhead0 “^.+{{{d”
hi zhead0 gui=bold guibg=black
syn match zhead1 “^.+{{{1”
hi zhead1 gui=bold guifg=red guibg=black
syn match zhead2 “^.+{{{2”
hi zhead2 gui=bold guifg=green guibg=black
syn match url “S*://S*”
hi url guifg=lightblue gui=underline

  但是,标题行突出显示后,{{{1 这样的标示符更加刺眼。能否将之隐藏呢?Vim 当然不会让你失望,只需稍修改上述高亮规则即可。笔者在初学 vim syntax 时,曾苦苦探寻实现方式。而现在,可以直接给出两种做法:
  一是利用零宽断言(:h zero-width)让标题不包括{{{d,代码如下:

syn match zhead0 "^.+({{{d)@="
syn match zkey "{{{d"

  二是利用contain参数,代码如下:

syn match zkey "{{{d" contained
syn match zhead0 "^.+{{{d" contains=zkey

  对于zkey的隐藏,可以直接设定前景色与背景色相同,但更推荐 hi link zkey ignore 的做法。同理,zhead0 也可以不做直接设定,而是 hi link zhead0 MatchParen 或其他预设风格。

4. {{{2 标识符的自定义等

  {{{1、{{{2……这样的标识符用来表示标题。VOoM称之为“起始折叠标记”(start fold marker),它是通过 foldmarker 选项来定义的。比如 set fmr=<<<,>>> 或 set fmr=[[[,]]] ,这样就可以使用 <<<2 或 [[[2 来表示二级标题。
  另外,除了数字表示级别外,还可以紧跟如下字母(及组合):x 表示标记(目录树第二列显示x),可用来标出某些重要标题。= 表示起始节点,即:Voom时的起始节点。o 表示open,即该目录树完全展开。除了在标题行直接增加这些标记外,也有相应快捷键操作。

5. 在html中变通使用vim-VOoM

  工具固然有好坏之分,但多数情况下,用户应用水平对最终效果的影响更大。而学会变通使用,闻一知二、举一反三,是显著提升应用效果的关键。
  txt需要额外标记才能使用VOoM,而html是已经附有标记的、扩展后的txt。其中,标题行以及层级已由h标签进行了标示。所以,理论上,html应该可以“不加修改”、“快速”使用VOoM功能。
  所谓好工具,就是理论上应该能做到的事,实际上也能做到。对着VOoM想一下,答案有了!
  实现方法:很简单,只须设定

:set fmr=</h,}}}

再:Voom 即可(对于自己的html笔记文档,可增加modeline)。
  
  上述操作效果如图。美中不足的是,目录行首的h起始标签有些碍眼。
  最理想的效果参见此文,通过修改voom.py(v2.0)中第59行开始的函数:def makeOutline(body, lines),在 74 行之后,增加如下两行:
  del_html_re = re.compile(‘<.*?>’)
  tline = del_html_re.sub(”, tline)
把html标签全部清空即可——此修改当然有副作用,所有尖括号内容均被忽略,请慎用!感谢 vfantasie @ newsmth.net 网友提供上述代码,相关讨论参见此处

四、总结

  如果说Vim是单一txt文件编辑利器,Vim加wiki类扩展则实现了多个txt的管理,那么VOoM就实现了以txt为文本资料库的管理。凭着Vim方便的加密、查找、替换、语法高亮、折叠功能,再加上VOoM的树状管理,我自己认为找到了理想的文字笔记管理方案。

附录:注释

  [1]: 参见Vim–普通人编辑利器、更多vim文章
  [2]: 关于纯文本资料管理。txt是最简单,也是最基本的文件格式,很多人对它情有独钟。通过软件为长篇txt增加目录功能,一直是某些开发者和用户的梦想,为此,有了《超级小巧的5款免费树状笔记软件》。
  [3]: 关于双栏树状结构。我最早是利用 UltraEdit 的 function list 实现长篇txt的目录导航。后来转到 Vim 后,一直试图用tag、folding来模拟此功能,但都不满意。对于较少使用高级文本编辑器的用户而言,双栏树状结构的典型例子是 MS Word 的“文档结构图” [5]
  [4]: 近乎圆满,是因为 Vim 并不适合处理太大的txt文件。当然,这个大小是相对的,与硬件及Vim激活的功能多少有关。 更新:而VOoM处理长文本,也会较占资源,主要是扫描正文生成outline。VOoM作者的2002年旧电脑(1.6GHz Pentium 4 Mobile)上,附带的 calendar_outline.txt (3.2 Mb, 56527 lines, 4160 headlines)会在更新后有明显停顿(小于1秒)。但要说明的是:仅阅读跳转仍然流畅;减少标题行能大幅度提高效能。总之,我相信当前情况下,10MB txt,上千个节点是可以正常使用的。
  [5]: MS Word 文档结构图是处理长文档极为重要的工具,也是我推荐的Word视图,我在 Word 2003 中调用此功能的“快捷键”是 alt+v d ,可参见 [视频教程] WPS处理长文档的技巧
  [6]: 用户也可以自定义目录窗口的位置:上、下、左、右,及其大小。建议放在默认位置,即左侧。

附录:文章更新历史

  2010-09-16:感谢知无兄协助更新本文。
  2010-04-18:VOOF改名为VOoM;html利用h标签更完美。
  2010-03-24:补充目录、总结。
  2010-03-20:补充在html中利用h标签,实现目录的做法。
  2010-03-03:全面更新文章;VOOF升级到v1.92。
  2009-12-09:改进实现^!1/2/3功能的AutoHotkey脚本。
  2009-11-11:补充“隐藏标示符”。
  2009-11-09:补充截屏,增加改进部分与Python,算是下篇。
  2009-11-06:补充视频,修改并发表,算是上篇。
  2009-05-27:长期跟踪vim.org的习惯让我在第一时间发现了刚刚诞生的VOOF。一试之下,赞叹不已!立即在水木社区vim版 发文推荐。>

[投稿]Pkm工具:Vimwiki

说明1:本文最初由Yibie于2009年12月投稿(原文)。在Yibie从Vim转向Emacs后,善用佳软接手更新本文。
说明2:阅读本文需要先了解和掌握Vim的基本使用。

用最顺手的Vim(介绍),以纯文本形式,构建自己Wiki,形成个人的知识库——这是很多人的梦想。而Vimwiki介绍)让梦想成真。

Vimwiki自称为 Personal Wiki for Vim(用Vim管理的个人wiki),可用来管理和组织笔记、想法,用来管理待办事项(todo list),用来编写文档。

1. Vimwiki的安装

1.1 Vimwiki插件的下载与安装

打开Vimwiki官方主页,下载 vimwiki.vba 文件到任意目录。
用Vim打开vimwiki.vba文件,然后在”Normal模式”下输入命令’:so %’,等一会儿,安装将自动完成。

1.2 Vimwiki的基本配置

Vimwiki的一些基本配置需要在vim配置文件中指定,主要是存储路径。
读者可参照下例进行修改,然后放到_vimrc文件中:

” vimwiki
let g:vimwiki_use_mouse = 1
let g:vimwiki_list = [{‘path’: ‘E:/vimwiki/’,
\ ‘path_html’: ‘E:/vimwiki/html/’,
\ ‘html_header’: ‘E:/vimwiki/template/header.tpl’,}]

最后3句分别指定了:
– 存放Vimwiki文件的路径(Vimwiki的文件后缀为.wiki)
– 从Vimwiki转换为Html网页时的保存路径;
– Vimwiki转换网页时使用的网页模板的路径。

2. Vimwiki入门:体验式教程

进入首页
操作:在Vim的Normal模式下,键入 \ww 三个键。
结果:Vim就会打开wiki首页(index.wiki)。
更多说明:① index.wiki所在目录见上述设置。② \ 键实际是<Leader>符,也可自定义。

创建新页面
操作:在首页中随便键入一些文字。比如, “这是wiki首页。 我要创建一个新页面 NewPage。”
结果:NewPage 会高亮显示。
更多说明:
– NewPage 这样的格式称为驼峰词,是创建新页面的最方便的做法。
– 对于更复杂的页面名称或中文页面名称,可以用双方括号表示。比如 [[中文页面]] 将创建 中文页面.wiki。括号内也可以用半角竖线分割,前半部分表示文件名,后半部分表示描述。比如 [[page3|我的第3篇wiki]] 将生成 page3.wiki 文件。而导出为html时,超链接的文字只有描述“我的第3篇wiki”。这种做法可以兼顾文件名的精简、规律、规范,与人工阅读的直观。采用Vim7.3中的最新 conceal text 特性,也可以在wiki中直接隐藏这些不用显示的符号,详见 这篇文章
– “快速引用某页面,并且,该页面若不存在则自动创建”是wiki的核心优势之一。

跳转到新页面
操作:在 Normal 模式下用光标双击 NewPage。
结果:index.wiki自动保存、关闭。在当前窗口打开了 NewPage.wiki 页面。
更多说明:
– Enter:与双击效果等同,在当前窗口中打开NewPage页面。
– Shift+Enter:上下分割窗口,NewPage在上,原页面在下。
– Ctrl+Enter:左右分割窗口,NewPage在左,原页面在右。

返回首页
操作:在 NewPage 中输入一些内容。进入Normal模式,按BackSpace。
结果:NewPage自动保存;并返回index.wiki页面;此时 NewPage 变成了另外一种高亮(区分

页面内的格式编辑
待完成……

2.1 Vimwiki的基本语法摘要

Vimwiki的下载主页上面给出一个快速学习Vimwiki语法的知识卡片(pdf格式,可通过一些软件转换为图片),从上面便可知道所有的Vimwiki中使用的语法,十分简单,方便使用.

PDF地址:http://habamax.ru/myvim/data/vimwikiqrc.pdf

2.1.1 普通语法:
*bold* — bold
_italic_ — italic
WikiWord — link to WikiWord (这是驼峰词的用法)
[[complex wiki link]] — link to complex wiki link
Indent lists with at least 1 space:
* bullet item
# numbered list item
= Header1 =
== Header2 ==
=== Header3 ===

2.2 Vimwiki键盘指令

<Leader>ww — 打开默认的wiki主页
<Leader>wt — 在新的标签页中打开默认的wiki主页
<Leader>ws — Select and open wiki index file.(未知)
<Leader>wd — 删除你所在的wikiword的页面
<Leader>wr — 重命名你所在的wikiword页面
Backspace — 返回上一页
Tab — 寻找下一个wikiword
Shift Tab — 寻找上一个wikiword
如果有什么不懂,可输入在”Normal”下输入”:h vimwiki-mappings”查询

2.3 Vimwiki发布为html网页

Vimwiki可导出为html格式,便于发布为网页。
输入’:Vimwiki2HTML — 将当前wiki页转换成Html格式’
输入’:VimwikiAll2HLML — 将所有的wiki页转换成HTML格式’

3. Vimwiki的优点与缺点

3.1 Vimwiki的优点

  • 与Vim紧密结合,可使用Vim的内建的正则表达式规则,高效处理文本
  • 与Vim紧密结合,可利用Vim内建的多种命令,以及可显示多个分页的特性,同时展示多种窗口,快速查看多份资料.
  • 由于Vim是文本处理工具,所以任何笔记,只要存为文本数据,便可以用Vim来组织和整理
  • 内置了特别的语法高亮模式,在观感上与普通见到的wiki没有多大的分别.
  • 可利用’:VimwikiAll2Html’这个命令快速将文本转化为网页.
  • 在Vim中自动识别网络链接格式,点击便可打开网页.
  • 在Vim的”Normal模式”下,在某行字句上面敲击”=”可自动为该字句添加标题语法
  • 自动添加wikiwork,当英文单词里面有连续两个英文字母为写’WikiWord’,Vimwiki会自动识别并将其标记为wikiword.该特性仅针对英文.

3.2 Vimwiki的一些缺点

  • 没有下划线的wiki语法
  • 由于是基于文本处理软件所开发的插件,所以无法支持导入图像、音频、视频等格式,同时也无法添加附件,但可以通过添加文件链接、或是网络链接的方式变通

5.0 回顾与总结

5.1 缘起Vim

在08年的时候,我就听过这“神的编辑器”的大名了。当时,也曾下载过一次,但是尝试的结果很不如意,打开了之后竟然无法输入中文!心里面想“见鬼 了!这是什么玩意儿!”。但是,因为内心中希望有朝一日能够用上这个东西装逼,我还是没有把它从硬盘里面删去。之后过了很久,我都没有用过Vim,我用了 其它的软件来作为我日常编辑的工具。后来能够用上Vim,还是拜托自已那不折腾会死星人的臭脾气。

在09年的开始,我开始对如何用电脑来记笔记感兴趣。在看过大量文章之余,也尝试了大量的工具。从小巧的Treepad、CintaNote、 PinPKM到以同步而著名的Evernote,这些尝试都无疾而终,不是它们不好而是我想要的方式并不是这样。于是,开始把目光投向了Wiki这个形 式。

同样是尝试了很多Wiki工具,比如xbeta介绍过的WikidPad、ZIM、单机版的MoinMoin、DokuWiki等等,还是觉得太麻烦了。为什么要有该死的后台?为什么不能直接编辑呢?

怀着这样的想法,我的目光又一次投向了Vim,这次我从滇狐1那里知道了Vim上一个叫Viki的插件,可以当把Vim变成Wiki。我很兴奋,但是尝试了之后不得不放弃了Viki,因为把它装上了之后总是出现莫明其妙的错误,这些错误在Windows的环境下又无法解决。

难道Vim上就只有Viki这个插件才能让Vim成为Wiki吗?我又开始了新一轮的找寻。很幸运,我找到了Vimwiki。在艰难地啃了它的英文说明书 之后。很容易就装上了。而有鉴于当时Vimwiki中文的资料的匮乏,我就写了一篇Vimwiki的中文文档,投稿给善用佳软。之后,我就很欣喜的看到在 善用佳软那强大的影响力之下,越来越多人2喜欢上Vimwiki,有的人还把Vimiwiki的帮助文档整个翻译成中文即3

而我在用Vimiwiki的时候,基本只用Vimwiki,偶尔会用到Calendar来记日记,Wiki的词条写了50个左右,最大的Wiki文档大概有30KB这样。但是并没有很好的坚持下去。于是,Vim用得越来越少了。

5.2 转到Emacs

在听说Vim的同时,我也听说过Emacs,但是Emacs在国内不如Vim流行,中文资料比Vim少,所以我一开始的选择是用Vim。但是在一次浏览网页的时候,看到了Emacs下Org-mode的演示视频4,非常的震憾,我没有想到文本编辑器还可以如此华丽!究竟有多华丽,大家看演示视频就知道。视

于是我在今年的6月份开始折腾Emacs。不过最初的目的是用Org-mode来管理自已的日程。折腾着折腾着,发现Org-mode的标记语言,可以很方便的组织文章的结构,于是开始用Emacs来记笔记5,写文章。

后来,我意外地发现原来Org-mode本身就具有Wiki功能,于是开始尝试用Emacs来构建我自已的Wiki。在这个过程中,我又受到 Zoom.Quite的启发,Wiki应该是每日记,在上面积累自已的想法和疑问,并一一解答,自然而然个人Wiki就可以坚持下来了。

如图所示:

http://farm5.static.flickr.com/4076/4865667606_db89b7a4a4.jpg

5.3 下面是我的一思考的总结:

  • 我为何对Vim、Emacs这类程序员用的工具感兴趣?
    • 程序员的工作其实就是编辑文本
    • 电脑已经成为编辑文本最主要的工具
    • 选择高效的文本工具,自然要考虑程序员用的工具
    • 最重要的是我本来就对Vim感兴趣
    • 专注于内容建设要比排版重要,而Word显然做不到
  • 为何用Vim、Emacs来塔建个人的Wiki?
    • 这是最经济、最绿色的选择。因为它们是免费的,同时安装的时候不需要依赖其他的东西,不会给系统增加进程
    • 不需要考虑版面的问题,可以专心于内容的编写
    • 直接编写内容,不用进入什么后台之类的,很方便
    • 输入即输出,所想即所得,这是最高境界
  • 个人的Wiki该如何编写?
    • 每天都记录,一直坚持
    • 在Wiki上记录自己想解决的问题,在解决问题时用Wiki记录过程
    • 不必预先分类,当你解决不同领域的问题时再分类

注:

1 滇狐的主页:http://edyfox.codecarver.org/html/index.html

2 来自Gracecode的推荐:http://www.gracecode.com/archives/3022/ 闲耘用Vimwiki塔建的Wiki:http://hotoo.github.com/vimwiki/index.html

3 闲耘翻译的Vimwiki文档:http://code.google.com/p/vim-script-cn/source/browse/trunk/doc/vimwiki.cnx

4 Org-mode演示视频:http://jaderholm.com/screencasts/org-mode/

5 这里有我用Org-mode做的笔记(不完全是):http://www.gtdstudy.com/?cat=297

2009-12:初稿,介绍VimWiki;
2010-08:增加回顾与总结部分。>

Vim 7.3正式版:新功能介绍(附视频、中文帮助文件)

2010年8月15日,超级经典的文本编辑器 Vim(官网介绍) 发布了 7.3 正式版。本文试对Vim 7.3的一些特性进行分析和直观介绍。欢迎Vim爱好者补充指正。
gvim: text editor

1. Vim 7.3 新特性总体介绍

1.1 Vim 7.3 下载

gVim 7.3 Windows直接下载:http://ftp.vim.org/pub/vim/pc/gvim73.exe
更多下载:http://www.vim.org/download.php

1.2 升级安装注意事项

– 安装程序会自动卸载旧版Vim:如果你不放心,也可暂不卸载。
– 安装程序会询问是否保留vimfiles:当然要保留!

更新:中文帮助文件

Vim 7.3 的中文帮助文件已经发布,下载、使用如下:
– 下载:链接
– 解压到合适路径,如 d:\soft\Vim\vimfiles\doc\
– 更新帮助文件的tags,如::helptags d:\soft\Vim\vimfiles\doc\
– 测试新特性的中文帮助,如 :h ‘rnu’@cn

1.3 官方重点强调的新特性:

The biggest additions since 7.2:
– Persistent undo, undo for reload
– Blowfish encryption, also encrypt the swap file
– Conceal text (note: since 7.3a ‘conc’ was renamed to ‘cole’)
– Lua interface
– Python 3 interface

1.4 更多新特性

请在安装新版Vim后,运行 :ver 查看。

2. 隐藏文字(Conceal text)

Vim支持语法高亮,有的语法高亮需要一些额外的标注符,它们并不是文本内容的一部分。比如用VOoM实现带折叠的双栏树状文本管理时,需要用 {{{1、{{{2 这样的符号表示标题级别。这些额外的标注符,最好比较低调。比如,上文就采用了零宽断言(:h zero-width)或contain来区分标注符,然后用link 到 ignore(文字前景色=背景色)的方式来“不显示”。但这里的不显示,只是一种前背景同色的障眼法。相比之下,Vim 7.3的conceal text具备了更强大的功能;某种程度上,相当于inline folding。

2.1 conceal text 功能介绍

Conceal text,直译为“隐藏文字”。不过,译为“可隐藏文字”更符合原意。因为,它的最终效果——是否隐藏、如何隐藏——取决于如下属性/参数:

① syn命令的conceal参数
语句:sy match test_conceal “(善用佳软.*)” conceal
表示:括号内以善用佳软开头的字符串,命名为 test_conceal 组,具备了conceal属性。
更多参见::h conceal

② conceallevel(简称cole)选项值
具备conceal属性的字符串,并不一定是隐藏的。其具体表现取决于conceallevel的值。
☆ 0:默认值,显示。 因此,只设定conceal,并没有任何隐藏效果。
☆ 1:短线高亮。 匹配的字符串缩略显示为一个“-”符号(取决于listchars设定),并采用conceal组的高亮方案。
☆ 2:不显示,除非定义了cchar变量。 举个例子就明白了,如下语句
:syntax match Entity “&amp;”?conceal cchar=&
可以把实体字符显示为原字符,更易于阅读。
☆ 3:完全不显示。
更多参见::h cole

③ concealcursor(简称cocu)参数
该值默认为空,效果就是无论如何隐藏,当光标位于该行时,conceal文字仍会显示。
如果想取消此效果,可设定相应值:n v i c。vim帮助文件中的设定值为nc。
更多参见::h cocu

2.2 conceal text 应用举例

上面的文字已经隐含了两个例子:
– 任何额外标记符的隐藏,如Voom中的 {{{1。还可扩展到vim的帮助文件、vimwiki……
– html源代码中,实体字符的还原显示。

我能想到的例子:
– 用来背单词。比如把英文单词后面的所有释义设为隐藏;光标移在该行时,再显示释义。
– txt格式的读书笔记:参见下面的视频
隐藏 xml/html 标签,只显示文字。示例:

1、如下内容保存为 d:\1.vim
sy match tag_conceal “<.\{-}>” conceal
se cole=3
2、打开html文件,再 :so d:\1.vim ,成功:所有html tag标签隐藏,只显示文字。
3、副作用是原html高亮失效,或许通过其他conclude, transparent参数能控制,但无精力/兴趣继续研究。

3. 相对行号(’relativenumber’ ‘rnu’)

以前,输入 :set nu 会显示行号;现在,输入 :set rnu 会显示相对行号。
所谓相对行号,就是光标所在行为第0行,然后,向上向下分别1、2、3……行标示。
其主要用途,可方便计算移动距离。
但由于翻页/滚屏时,当前行会移动,所以,相对行号只能在一屏内使用。
操作方法:
:set rnu
:set nornu
(nu与rnu不能同时使用)

更多说明::h rnu

4. 彩色列(colorcolumn)

例1:
:set cc=10,20,30
表示把第10、20、30列,进行高亮。

例2:
:set cc=-20,+10,120
表示把 textwidth-20、textwidth+10、第120列,进行高亮。

例3:
:hi colorcolumn guibg=lightgreen
定义高亮列为亮绿色。

功能说明:
– cc列标可以是绝对值,也可以是相对值,如例2所示。
– 会降低屏幕刷新速度。
– 对换行、中文,可能会不连续。

使用说明:
– 我觉得colorcolumn有一个最实用的功能,set cc=81,可以提醒自己写得代码别超过80列 (by ankyhe)

5. 持久性撤销 (更新)

功能介绍:
Vim此前的撤销(u: undo)功能,与大多数软件一样,局限于本次打开文件后所做的编辑。而Vim 7.3新增的持久性撤销(persistence undo),即使文件多次关闭又重新打开编辑,所有的修改都可以u还原回去(当然不能超过’undolevel’的限制)。

相关参数:
– :set undofile。 undofile(udf),缺省关闭,局部于缓冲区。设定后,Vim 在把缓冲区写入文件时,自动保存撤销历史到撤销文件。读入文件到缓冲区时,自动恢复撤销历史。
– ‘undolevels'(‘ul’):可以撤销的最大改变次数。缺省为100或1000。例 set ul=500。
– 指定 undodir。’undodir’指定撤销文件存放的目录。默认是当前目录,为全局变量。 undodir可以是目录名列表,以逗号分隔,格式参见 backupdir。但是,在写入时,会使用第一个存在的目录。因为 “.” 总是可用, 所以”.” 之后的目录不会用来写入。在读取修改历史时,会查找所有的项目来寻找对应的撤销文件,并使用第一个找到的撤销文件。如果该文件不可读,报错,但不再继续查找。

关于撤销文件:
文件名:”.” 代表文件所在的目录。此时,”file.txt” 对应的撤销文件名是 “.file.txt.un~”。如使用其他目录,撤销文件名是被编辑文件的完整路径,但路径分隔符以 “%”代替。
文件保护:撤销树文件中会包含这个文件内容的hash值,这样当一个文件有了撤销树文件后,如果它被其他程序编辑过,Vim会忽略撤销树文件,而不会因此让撤销使文件乱掉。
不会自动删除: 目前Vim只会去创建撤销树文件,而永远不会去删除它们,需要手动删除。因此,我只好把它们放到自己的tmpfs临时目录中,关机自动清除好了。

原有命令的增强:earlier和:later:
这两个命令也增加了一个单位:f——写入次数。比如说,我打开了一个配置文件,编辑N久,保存并测试后不满意,想恢复到原来的样子。怎么办呢?以前我会一直按着u键直到Vim告诉我不能撤销了,或者用备份文件(*~)来覆盖当前文件。现在可以使用命令:earlier 1f直接恢复到上次写入时了。

如何只对某些类型的文件启用undofile:
-通过 BufReadPre autocmd 方式进行设定。
-使用现成的 undofile.vim 脚本。

6. +cursorbind

在比较文件的时候,有个scrollbind功能,可以让被比较的文件同步滚动。但是,在之前的版本中,光标经常并不在同一行。从一个窗口跳转到另一个窗口时,我经常找不到光标的位置了。。。现在好了,有了这个特性,光标的位置也同步了。

7. 是否升级到Vim 7.3的考虑

收益:
– 客观上,提供了新特性;
– 主观上,需要判断这些新特性是否是自己所需要的。

成本:
– 下载、升级;
– 修改gvim路径,从vim72改为vim73。比如:TC中F4编辑器的设定;再比如win+r某些快捷方式的属性(“D:\soft\Vim\vim73\gvim.exe -p –remote-tab-silent f:\now\now\now.htm”)。更好的设置方式是把gvim.exe所在目录写入path变量,在引用时不加路径,直接写为gvim.exe(可以带参数)。
– python兼容性问题。vim7.2对应python2.6,而vim7.3默认需要python2.7,如果某些扩展需要python支持,则需要升级python。

我的建议:
总有一款程序让你如此信任,而随着它同步升级。对我而言,Vim就是如此。

附:视频演示-Vim 7.3 新特性之Conceal text、rnu、cc

用Wink录制的flash演示:492×451, 100+KB.
如无法查看,请检查浏览器设置,或在这里下载附件。

附:文章更新历史

2012-06-07:补充 隐藏html标签。
2010-08-16:更新至 vim 7.3 正式版;补充 undofile.vim 脚本;补充中文帮助
2010-08-01:初稿。
鸣谢:依云ankyhe、yeskky等。

TxtBrowser: 在Vim中高效处理纯文本(更新)

  TxtBrowser是一款Vim插件,旨在提供更好的txt浏览体验。主要功能有:为纯文本自动生成目录树侧边栏(taglist窗口)、语法高亮、多项扩展功能(执行url、网络搜索当前词等)。TxtBrowser由国内网友ypguo开发,近期更新活跃,并且解决了taglist.vim插件不能处理中文文件路径的问题,值得关注。
TxtBrowser: 在Vim中高效处理纯文本。支持中文路径!

一、TxtBrowser功能展示

  以下是功能简介,更多请参见作者介绍,以及官方下载包中的 txtbrowser.cnx 文件。
  上图展示了目录树功能,更多截屏参见此处

1. 目录树侧边栏

  用Vim打开纯文本类型的文件(.txt 或 :se ft=txt),键入一条命令(:Tlist)或按下对应热键(可自定义,示例如下),会生成目录树侧边栏(即taglist窗口)。在目录栏点击相应标签,正文会相应跳转。
  目录栏的内容既包括正文目录,也包括图片目录、表格目录,并可进一步自定义。
  更新正文后,键入命令(:TlistUpdate)或按下对应热键(可自定义,示例如下),即可刷新目录栏。

:nmap <silent> <F8> <ESC>:Tlist<RETURN>
:noremap <silent> <F5> <ESC>:TlistUpdate<RETURN>

2. 语法高亮

  纯文本也可以“多姿多彩”!TxtBrowser可以使关键文字高亮显示,突出显示标题、关键字、列举项。可以提高效率,愉悦心情。通过 :colorscheme colorname 命令,可以尝试不同的着色方案。

3. 其他扩展功能

  * 把光标放到 URL上,执行 :TxtbrowserUrl (或 ←leader→g)打开所在处的URL,包括网址、各种文件(包括pdf、mp3等)、Email地址。
  * 把光标放到单词上,执行 :TxtbrowserWord (或 ←leader→f)打开网络字典查单词。
  * 把光标放到单词上,执行 :TxtbrowserSearch (或 ←leader→s)打开google搜索。

二、TxtBrowser点评及与VOOF对比

1. 对TxtBrowser的评价

  我认为,TxtBrowser是值得关注和支持的一款Vim扩展。推荐有需求的网友试用、使用。理由如下:
  * TxtBrowser立志要成为vim txt的集成解决方案,无论对编程人员查看技术文档,还是非编程人员记录笔记,都十分有益。
  * 作者ypguo系国内网友,诚心听取意见、积极更新程序。
  * 非常难得的是,作者从开始使用Vim到写出这款扩展竟然不到两年时间(via)。或许,这也反过来证明了vim的强大和作者的开发功力吧。

2. TxtBrowser几项功能的内部比较

  TxtBrowser插件的最大亮点功能是目录侧边栏。这对于查看长篇技术文档,或自己做笔记,很有帮助。
  至于语法高亮和其他扩展功能,早已经在其他扩展中得以实现。用户可以把TxtBrowser作为txt的集大成解决方案,来使用这些功能。也可以进行自定义、修改,或选用更强大的专门扩展。

3. TxtBrowser vs VOOF (更新)

a. 从目录导航功能看,两者差别不大,但运行环境分别需要taglist和python。
  从目录导航功能来看,TxtBrowser与VOOF(主页介绍)算是同类。我认为两者的长处与短处都是相对的,大家可根据自己的需要进行选择。
  各有长短:TxtBrowser依赖ctags、taglist;VOOF依赖Python。
  TxtBrowser胜出:其标题行来自.ctags文件定义,默认是“数字打头,后跟标题”等这样的形式,不需额外标注。而VOOF需要手工增加{{{这样的标识符。
  速度与功能:似乎VOOF的Python更快一些(未做严格测试),并且VOOF可以通过目录栏对正文段落进行前后调整、级别调整。
  中文兼容:如果采用官方taglist.vim,则TxtBrowser在Windows下,当文件或路径中含有中文空格时,目录不能正常显示(Linux下正常)。但是,ypguo对taglist.vim进行了修正,解决了此问题。
b. TxtBrowser附带了文本辅助功能,而VOOF则具备实用的节点管理功能
  TxtBrowser还具备txt语法高亮、快速打开url、搜索、翻译功能。但这些功能与目录功能实际上并无直接关系,也可以拆为两个扩展,或换用其他扩展实现。
  VOOF的优势则体现在节点管理上,VOOF的目录树不仅可以导航,也能进行节点操作。比如,节点位置的前后移动、提高或降低层级(默认是ctrl+方向键),这对资料库管理是非常实用的。
c. 结论是 TxtBrowser适用于阅读txt;VOOF适用于管理txt资料库
  从实用选择角度,我认为这两款扩展面向的对象并不相同。TxtBrowser适用于阅读txt,尤其是他人的长文本;而VOOF适用于建立和管理自己的txt资料库,可以有很多节点,并不断调整其结构。

三、安装及使用笔记

重要说明:以下内容为xbeta试用当时的记录,有些地方不适用于后续版本TxtBrowser。比如,taglist插件出了修正版,.ctags文件不再需要……

  说明:编程人员对tag、ctags、taglist都很熟悉。但对于象我这样不编程的用户来说,因为TxtBrowser而第一次安装、使用这些东西,还是比较复杂的。记录如下,并提供对初学者友好地解释。

1. 安装ctags(http://ctags.sourceforge.net/
  ctags是一款程序(exe),用来生成tag文件。tag文件可以理解成索引——某个目录项、关键词……出现在哪个文件的哪一行。
  下载 Source and binary for Windows 98/NT/2000/XP,即 ctags58.zip。只需要把其中的 ctags.exe(约300KB)解压到 windows 目录(或其他在path的目录)。

2. 安装taglist(http://www.vim.org/scripts/script.php?script_id=273
  重要说明:由于官方taglist.vim对中文支持有问题,推荐修订版本
  把插件的内容复制到 vim安装目录/vimfiles/中。以我为例,新增如下内容:

d:\soft\Vim\vimfiles\plugin\taglist.vim
d:\soft\Vim\vimfiles\doc\taglist.txt

3. 安装TxtBrowser(http://www.vim.org/scripts/script.php?script_id=2899
  除了大部分内容复制到vimfiles目录,一定要注意 .ctags 文件要复制到 “$Home”目录。$home可以简单地理解为 c:\Documents and Settings\用户ID\。以我为例,新增如下内容:

d:\soft\Vim\vimfiles\plugin\txtbrowser.vim (生成目录、扩展功能所用的插件)
d:\soft\Vim\vimfiles\doc\txtbrowser.cnx (帮助文档)
d:\soft\Vim\vimfiles\doc\txtbrowser.txt (帮助文档)
d:\soft\Vim\vimfiles\syntax\txt.vim (语法高亮文件)
c:\Documents and Settings\zyx\.ctags (重要:定义文件文件中,哪些文本生成tag)

4. 在.vimrc文件里加入:

syntax on
let tlist_txt_settings = 'txt;c:content;f:figures;t:tables'
au BufRead,BufNewFile *.txt setlocal ft=txt

5. 重启vim,打开 http://www.rfc-editor.org/rfc/rfc959.txt ,执行命令 :Tlist,应该能看到效果了。

附:文章更新历史

  2010-03-25:更新txtbrowser与VOOF的比较部分;修正一些过时说法。
  2010-02-20:更新taglist中文路径问题。
  2010-02-16:初稿。

CreaWriter: 可用AutoHotkey模仿之

  电脑玩物 介绍CreaWriter 软件。价值是通过“全屏图片背景+背景音乐+半透明的编辑窗口”,来实现或专心致志、或激发灵感的高效写作。如果我需要类似功能,会如何做呢?请 AutoHotkey(介绍) 作大厨,以几款常用经典软件为主料,则 CreaWriter 的替代套餐出炉了。效果图及代码分别见下:
[image]

SetTitleMatchMode, 2
run "d:\music\we-are-the-champion.mp3"
run "d:\Program Files\pic\IrfanView\i_view32.exe" "d:\pic\费德勒2010澳网再夺冠.jpg" /fs
run d:\Program Files\vim\vim72\gvim.exe "d:\xbeta-test\note.txt"
WinWait, vim
winmove, vim,,300, 100, 800, 600
WinSet, Style, -0xC00000, vim
WinSet, Transparent, 190, vim

  赤尊信退回己阵,心内一阵犹豫,不知要选取那种武器。浪翻云的剑势可柔可刚,可拙可巧,已经超越了长剑的限制。
  赤尊信是以天下兵器为己用。浪翻云却以手中一剑尽天下兵器的变化。一个由博入简。一个由简达博。
  在无数次的战斗,赤尊信都能迅速决定选用最佳的兵器,但这次面对可怕的覆雨剑,他第一次犹豫起来。赤尊信心中忽然醒觉自己已经输了,浪翻云专心一意,以剑制敌。自己却要在选取武器上,三心两意,甚至还不知道应要选取什么武器,以致气散神弛。
  ——黄易 《翻云覆雨·第9章》