title: "善用Vim:设为任意程序的外部编辑器-a"
date: 2009-02-06
categories:
- "office-work"
- "text-editor"
draft: true
善用Vim:设为任意程序的外部编辑器-a
Vim(官网|入门教程)作为超级好用的编辑器,能否让它与任意Windows程序集成,作为通用的外部编辑器呢?当然可以。方法一是Vim加vbs,方法二是利用AutoHotkey类脚本语言。 一种方法是Vim几款扩展是如此好用,以致于很多用户希望把所有文本编辑工作都交给Vim来做。据说,这种“一款程序只做一件事但做到极致”、“其他程序有此需求则调用该程序”的思路,是UNIX的精髓之一。但很不幸,Windows下的软件却往往不是这样。比如很多资料管理软件,花费精力去做编辑功能,却不肯支持外部编辑器——这种做法,一直是善用佳软这样甘于Vim“毒害”的用户心病。再明确点说,很多优秀的笔记软件、资料管理软件,之所以没能成为xbeta的首选工具,就是因为不支持Vim作为外部编辑器。
善用佳软曾试图用AutoHotkey实现“在某软件中ctrl+a,ctrl+c;粘贴到Vim中编辑;然后再复制回该软件”的做法,但效果不是很好。后来干脆放弃自动化,在有需要时就手工复制到vim中处理。
最近,终于发现了解决方案(via vim.wikia),可以让Vim成为Windows下任意程序的外部编辑器——只要该程序支持全选/复制/粘贴功能。使用起来很方便。比如,我用EverNote处理一则笔记,按下ctrl+alt+e(自定义的热键:e表示edit,便于记忆),则Vim启动并载入当前文字,编辑完成后:wq y则Vim关闭,并更新EverNote中的文本。
其原理是利用了Vim的几款插件,另加vbs以及桌面快捷方式(便于热键调用)。具体步骤和注意事项如下:
1. 下载必要的vim脚本,解压到vimfiles/plugin目录 - clipbrd.vim script#1014 - genutils.vim script#197 - multvals.vim script#171
2. 把如下内容保存为vbs文件,比如vimfiles/all2vim.vbs。注意把第5行中gvim.exe的路径按你的安装情况进行修改。
set oShell = CreateObject("WScript.Shell") oShell.SendKeys"^a" oShell.SendKeys"^c" oShell.SendKeys"^{Home}" ReturnCode = oShell.run ("""d:Program Filesgvimvim72gvim.exe"" +ClipBrd +only",0,True) oShell.SendKeys"^a" oShell.SendKeys"^v" oShell.SendKeys"^{Home}"
[提示]:为方便读者,上述脚本和vbs文件已打包为all2vim.zip,请下载后解压到vimfiles目录。
3. 为all2vim.vbs(再次提醒检查第5行中gvim.exe的路径)文件创建一个桌面快捷方式,并在“属性”→“快捷键”设定为ctrl+alt+e,见图。注意,设定时,只需按下e键,不要按下ctrl+alt键。
4. 设定完成,你就可以进入任一程序,比如notepad.exe,或者邮件客户端、网页输入框中,进行体验了。编辑完成后,在vim中键入:wq回车,出现提示后,按y即退出了vim并更新文本。
注意事项: 请不要在“原程序→vim编辑→返回原程序”过程中,操作其他程序,否则有可能更新失败。如果发生这种情况,也不用担心,因为最新文字保存在剪贴板上,只要手工粘贴到原程序即可。
(完。初稿2009-02-06)
很久以前,我就开始探索gvim成为windows任意程序外部编辑器的方法。在vim.org上搜索,未果。自己动手,想到过利用AutoHotkey,但限于自己的水平,最终效果不理想。后来,读到了 Use_gvim_as_an_external_editor_for_Windows_apps 一文,大喜,立即开始采用。这正是“吾尝终日而思矣,不如须臾之所学也”。再后来,因为所谓的任意程序与vim集成,对我而言,仍然主要是浏览器写博客的需求,Firefox插件……再学到AutoHotkey小众…… >