—— 子曰:“工欲善其事,必先利其器。”
设置
“热键设置”选项 g:vimim_map (可以自由增减)
| :let g:vimim_map='c-bslash' | " Ctrl-\ 开关输入法 |
| :let g:vimim_map='m-space' | " Alt-空格键 开关输入法 |
| :let g:vimim_map='c-space' | " Ctrl-空格键 开关输入法 |
| :let g:vimim_map='no-search' | " 关闭 正斜杠 search |
| :let g:vimim_map='no-gi' | " 关闭 gi 无菜单窗 |
| :let g:vimim_map='tab_as_gi' | " Tab键 为 gi 无菜单窗 |
| :let g:vimim_map='tab_as_onekey' | " Tab键 为 点石成金 |
“中文模式”选项 g:vimim_mode
| :let g:vimim_mode='dynamic' | " 动态输入模式(缺省) |
| :let g:vimim_mode='static' | " 静态输入模式 |
“中文标点”选项 g:vimim_punctuation
| :let g:vimim_punctuation=1 | " 基本中文标点 |
| :let g:vimim_punctuation=2 | " 常用中文标点(缺省) |
| :let g:vimim_punctuation=3 | " 包括单双引号反斜杠 |
| :let g:vimim_punctuation=0 | " 不用中文标点 |
| :let g:vimim_punctuation=-1 | " 彻底关闭中文标点 |
“插件位置”选项 g:vimim_plugin
| :let g:vimim_plugin=0 | " 缺省是vim plugin |
“输入法循环”选项 g:vimim_toggle
| :let g:vimim_toggle='wubi,pinyin' | " 设定循环次序 |
| :let g:vimim_toggle=-1 | " 彻底关闭循环键 |
“双拼”选项 g:vimim_shuangpin
| :let g:vimim_shuangpin='abc' | " 双拼:智能ABC |
| :let g:vimim_shuangpin='ms' | " 双拼:微软 |
| :let g:vimim_shuangpin='nature' | " 双拼:自然码 |
| :let g:vimim_shuangpin='plusplus' | " 双拼:拼音加加 |
| :let g:vimim_shuangpin='purple' | " 双拼:紫光 |
| :let g:vimim_shuangpin='flypy' | " 双拼:小鹤 |
“云输入”选项 g:vimim_cloud
| :let g:vimim_cloud='baidu' | " 缺省:百度云输入 |
| :let g:vimim_cloud='google' | " 谷歌云输入 |
| :let g:vimim_cloud='sogou' | " 搜狗云输入 |
| :let g:vimim_cloud='qq' | " QQ云输入 |
| :let g:vimim_cloud='sogou.dynamic' | " 搜狗纯云输入,动态 |
| :let g:vimim_cloud='sogou.static' | " 搜狗纯云输入,静态 |
| :let g:vimim_cloud='qq.fanti' | " QQ云输入,开启繁体 |
| :let g:vimim_cloud='qq.mixture' | " QQ云输入,开启混合模式 |
| :let g:vimim_cloud='qq.fuzzy' | " QQ云输入,开启模糊音 |
| :let g:vimim_cloud='qq.wubi' | " QQ云输入,五笔 |
| :let g:vimim_cloud='qq.shuangpin.abc' | " QQ云输入,双拼智能ABC |
| :let g:vimim_cloud='qq.shuangpin.ms' | " QQ云输入,双拼微软2003 |
| :let g:vimim_cloud='qq.shuangpin.plusplus' | " QQ云输入,双拼拼音加加 |
| :let g:vimim_cloud='qq.shuangpin.purple' | " QQ云输入,双拼紫光拼音 |
| :let g:vimim_cloud='qq.shuangpin.flypy' | " QQ云输入,双拼小鹤双拼 |
| :let g:vimim_cloud='qq.shuangpin.nature' | " QQ云输入,双拼自然码 |
| :let g:vimim_cloud=-1 | " 彻底关闭云输入 |
“自己的云”样本 g:vimim_mycloud
| py | :let g:vimim_mycloud = "py:127.0.0.1" |
| dll | :let g:vimim_mycloud = "dll:/data/libvimim.so:192.168.0.1" |
| dll | :let g:vimim_mycloud = "dll:/home/im/plugin/libmyplugin.so:arg:func" |
| dll | :let g:vimim_mycloud = "dll:".$HOME."/plugin/libvimim.so" |
| dll | :let g:vimim_mycloud = "dll:".$HOME."/plugin/cygvimim.dll" |
| app | :let g:vimim_mycloud = "app:".$VIM."/src/mycloud/mycloud" |
| app | :let g:vimim_mycloud = "app:python d:/mycloud/mycloud.py" |
| http | :let g:vimim_mycloud = "http://pim-cloud.appspot.com/ms/" |
| http | :let g:vimim_mycloud = "http://pim-cloud.appspot.com/abc/" |
| http | :let g:vimim_mycloud = "http://pim-cloud.appspot.com/qp/" |
DISCLAIMER
点石成金 hjkl
- 进入: 进入Vim插入模式,在英文编码或标点之后,按CTRL-^
- 退出: 按CTRL-^, 回到Vim插入模式
- 退出: 按Esc, 回到Vim正常模式
中文输入模式
汉字搜索
按照Vim的规矩,所有插件文件都置于plugin目录之下。
| 前端 | 后端 | 关系 | 优点 | 缺点 |
|---|---|---|---|---|
| VimIM | 〖云〗 | 外挂 | 创新前端,六种双拼 | 依赖联网 |
| VimIM | 〖自己的云〗 | 外挂 | 自己的云,自己的梦 | 需先启动 |
| VimIM | 〖内码〗 | 天生 | 无需词库,无需联网 | 记忆量大 |
| VimIM | 〖文件词库〗 | 内嵌 | 即插即用,想删就删 | 占内存 |
| VimIM | 〖目录词库〗 | 内嵌 | 海量词库,不耗内存 | 占磁盘 |
| VimIM | 〖数据库〗 | 内嵌 | 即插即用,海量词库 | 需python |
| 模式 | 功能 | 快捷键 | 设置 |
|---|---|---|---|
| 【中文动态模式】 | 输入过程中一直出选择项目 | CTRL-_ | 缺省 |
| 【中文静态模式】 | 输入完后按空格出选择项目 | CTRL-_ | static |
| 【点石成金】 | 传说中的无模式之模式 | CTRL-^ | 缺省 |
| 【汉字搜索】 | 正斜杠无菜单中文搜索 | n | 缺省 |
英文字母为“石”,中文汉字为“金”。
中文输入
- 〖列表高低〗 l 可切换 for label height
- 〖首拼分字〗 m 可切换 sssss => s's's's's
- 〖列表宽窄〗 h 可切换
- 〖清零重设〗 n 刷新 refresh
- 〖汉字搜索〗 / 或 ?
- 〖字母标签〗 上字
- 〖输简出繁〗 s 可切换,需cjk标准字库
- 〖动态模式〗 ABCDEFGHIJKLMNOPQRSTUVWXYZ (不退出中文菜单)
- 〖字母过滤〗 qwertyuiop => 1234567890 (四角号码:字母键替代数字键)
文件浏览
- 〖右左排列〗 h 可切换,列表从右到左排列
- 〖下上排列〗 l 可切换,列表从下到上排列
- 〖中文旋转〗 m 可切换:每按一次m,中文列表顺时针旋转90度
- 〖清零重设〗 n 刷新 refresh
- 〖输简出繁〗 s 可切换,需cjk标准字库
- 〖自制窗口〗 visual 高亮选择,按CTRL-^
- 〖文件竖排〗 :ViMiM
gi 无菜单窗中文输入(敲中文犹如敲英文)
体验点石成金
| 彩蛋 | 功能 |
|---|---|
| vimim | 显示环境 |
| vimimhelp | 显示帮助 |
| vimimgame | 游戏 |
| vimimrc | 显示设置 |
| vimimvim | 显示程式目录 |
游戏人生
测试百度云
测试切换五笔输入和拼音输入
>>> " [dream] use VimIM on the fly without plugin
>>> :py url = 'http://vimim.googlecode.com/svn/trunk/plugin/vimim.vim'
>>> :py import vim, urllib
>>> :py vimim = vim.eval('tempname()')+'.vim'
>>> :py urllib.urlretrieve(url, vimim)
>>> :py vim.command("source %s " % vimim)
>>> # wget http://vimim-data.googlecode.com/svn/trunk/data/pinyin1234.txt
>>> # wget http://pimcloud.googlecode.com/hg/server/quanpin2.txt
>>> # wget http://pimcloud.googlecode.com/hg/server/quanpin3.txt
>>> # wget http://pimcloud.googlecode.com/hg/server/quanpin4.txt
>>> # cat quanpin2.txt quanpin3.txt quanpin4.txt | sed "s/'//g" > pinyin.txt
>>> # cat pinyin1234.txt >> pinyin.txt
>>> #
>>> # /bin/db4.5_dump -p vimim.gbk.bsddb | head
>>> #
>>> cd /home/vimim/svn/mycloud/server/
>>> file_in = 'pinyin.txt'
>>> file_out = 'vimim.gbk.bsddb'
>>> import bsddb
>>> db = bsddb.btopen(file_out,'n')
>>> for line in sorted(open(file_in).readlines()):
>>> key, sep, value = line.strip().partition(" ")
>>> if key in db:
>>> if len(value.split()[0]) > len(db[key].split()[0]):
>>> value = db[key] + " " + value
>>> else:
>>> value = value + " " + db[key]
>>> db[key] = value
>>> # db[key] = unicode(value,'utf8').encode('gb18030')
>>> db.close()
>>>
>>> let bsddb = 'vimim.gbk.bsddb'
>>> if has("python")
>>> :python import vim, bsddb
>>> :python db = bsddb.btopen(vim.eval('bsddb'),'r')
>>> " :python db = anydbm.open(vim.eval('bsddb'),'r')
>>> " :python3 db = dbm.dumb.open(vim.eval('bsddb'),'r')
>>> endif
>>>
>>> function! g:vimim_get_database()
>>> :sil!python << EOF
>>> import vim, urllib
>>> url = 'http://vimim.googlecode.com/svn/trunk/plugin/vimim.gbk.bsddb'
>>> filename = vim.eval('s:path') + 'vimim.gbk.bsddb'
>>> urllib.urlretrieve(url, filename)
>>> EOF
>>> endfunction
作为私人文件词库,vimim.txt 给VimIM锦上添花。
- 下载插件 vimim.vim
- 下载字库 vimim.cjk.txt
- 把下载文件扔到vim的plugin文件夹里面
经典测试
| 输入方式 | 输出结果 | cjk标准字库 |
|---|---|---|
| i'have'a'dream | 我有一梦 | 英文,单引号分字 |
| wyygm | 我有一个梦 | 首拼,自动分字 |
| woyouyigemeng | 我有一个梦 | 全拼,自动分字 |
| wo3you3yi1ge4meng4 | 我有一个梦 | 全拼,以拼音音调分字 |
| w2y4y1g8m4 | 我有一个梦 | 四角号码,首拼,数码分字 |
| 23554022100080204420 | 我有一个梦 | 四角号码,四数上屏 |
| iwettrpwwqpppipwprrwp | 我有一个梦 | 四角号码,四数上屏,快捷键 |
汉字搜索
数码输入
四数上屏
字母过滤
动态辅码(四角号码)
汉字盲打
见字找码
简繁互换
五笔加拼音(字)
VimIM玩家自己的心得体会,就是VimIM最好的用户手则:
命令行窗口
- 【经典】沿用 vi 搜索键,但 VimIM 推陈出新:
- 【Vim】功能不变:"/"正向搜索或"?"反向搜索。
VimIM 汉字搜索 敲提示菜单 "/" 或"?" 确认 1 【开始】 进入 vim 插入模式 2 点出中文提示菜单 3 【结束】正向搜索:敲菜单 / 键确认 【结束】反向搜索:敲菜单 ? 键确认 4 vim 回归正常,搜索内容不插入 5 可以敲 n 键或者 N 键继续搜索 【自己动手试一试】
【目的】搜索词组“精力”
【操作步骤】
- 用 vim 打开一个文件
- 敲 o 或 i 或 a 进入 vim 插入模式
- 连敲四键: v i m <C-^>
- 敲 l 向下翻页
- 敲 k 光标向下移动
- 敲 / 正向搜索
- 敲 N 反向继续搜索
云输入
【官方介绍】
- 搜狗云输入跨平台、免安装、兼容各个主流操作系统和浏览器。
- 基于JavaScript技术,利用Ajax通信原理,采用B/S架构。
- 强大语言模型(4G 三元模型、trigger模型)和海量词库(200W)。
- 利用服务器的无限量的存储和计算能力,大幅提升输入准确率。
【点评搜狗】
- 搜狗整句识别率惊人,但只能在网页里输入,多有不变。(vimim group)
- 遗憾的就是每打开一个网页都要启动一下搜狗云输入法。(sogou bbs)
- 应用软件使用搜狗云输入法在版权上没问题。(linuxtoy.org)
【云史】
- 2009年11月2日 搜狗宣布推出搜狗云输入法
- 2009年11月11日 VimIM 宣誓入云
- 2009年11月16日 史上第一支持五种双拼的云输入法诞生
- 2009年12月1日 推出〖想云就云〗,不换模式,不限输入法
- 2009年12月25日 支持 〖自己的云〗 既可本地也可远程
【必要条件】
- 入〖云〗必须联网
- 入〖云〗必须借助 Python 或者 libvimim.dll 或者 wget
- 入〖云〗必须使用汉语拼音:全拼或者双拼甚至简拼
【VimIM 云输入】
〖全云输入〗每一个输入都〖云〗游
- 特点:每打一个字母都要向服务器请求一次。
- 手动开启:可设置 :let g:vimim_cloud='sogou'
- 自动开启:如果vim plugin目录下没有词库
〖可控性云输入〗每输入N个〖字〗就云游
- 设置::let :let g:vimim_cloud='sogou,5'
- (长的)诗词曲赋、新闻八卦、完整的句子拜托给〖云〗。
- (短的)私人信息、英文、词组、单字留给VimIM自己处理。
- 长短的定义没有统一的国际标准。玩家自己定标准。
- 例如:如果选项设置为5: 即每敲5个字以上就丢给〖云〗。
- 结果:本地词库和搜狗云端词库智能切换。
支持中文输入模式〖中文静态〗输入风格
- 考虑到网速,这是VimIM云输入推荐的输入模式。
- 设置为 :let g:vimim_static_input_style=1
推出〖想云就云〗 不换模式,不限输入法
- 【卖点】东边日出西边雨,道是无云却有云!
- 【特点】不限于拼音输入法!不需要设置!
- 【条件】只需要联网和Python或libvimim.dll或wget或curl
- 【限于】 点石成金
- 【操作】在输入后加多一个单引号,接着敲<C-^>
- 【例】ajiao' => ajiao 阿娇
- 【例】dbrcxby' => 东边日出西边雨
- 【例】hfpjlswsqy' => 好风凭借力送我上青云
支持彻底关闭云
- 【设置】:let g:vimim_cloud=-1
支持 〖自己的云〗
- 【卖点】自己的云永远是最好的云
- 【本地插件】python
- 【缺省关闭】:let g:vimim_mycloud=0
【设计思路】
- VimIM 决不能被〖云〗和谐
- VimIM 决不能被〖云〗折腾
- VimIM 决不能被〖云〗忽悠
- VimIM 同时坚信:他山之石,可以攻玉
【自己动手试一试】
VimIM Cloud 即插即用 Plug & Play Windows 用户 Linux 用户 1 确认电脑联网 2 下载 libvimim.dll 确认无词库 3 置dll于plugin之下 4 下载新版脚本 vimim.vim 并置于plugin之下 5 打开 vim 6 敲 o 或 i 或 a 进入 vim 插入模式 7 敲 haofengpingjielisongwoshangqingyun 8 敲 点石成金 键 <C-^> 9 默念:〖云〗〖云〗〖云〗 10 〖上屏结果〗 好风凭借力送我上青云
VimIM 拼音输入词库样例:
VimIM 拼音输入总结:
| 【双拼】 选择开启 | |
|---|---|
| :let g:vimim_shuangpin = 'abc' | 智能ABC双拼 |
| :let g:vimim_shuangpin = 'ms' | 微软双拼 |
| :let g:vimim_shuangpin = 'nature' | 自然码双拼 |
| :let g:vimim_shuangpin = 'plusplus' | 拼音加加双拼 |
| :let g:vimim_shuangpin = 'purple' | 紫光双拼 |
| :let g:vimim_shuangpin = 'flypy' | 小鹤双拼 |
VimIM 五笔输入词库样例:
VimIM 五笔输入总结:
中文模式和点石成金
(1) 标点翻页:逗号/句号 或者 减号/等号。 (3) 空格键:上字,开始新的一轮五笔连打,或空格 (2) 数字键:选词 (4) 回车键:或无缝上英文,或回车。
四角号码
| 数码 | 词库 样本 |
|---|---|
| 四角号码 | http://vimim-data.googlecode.com/svn/trunk/data/vimim.cjk.txt |
| 五笔画 | http://vimim-data.googlecode.com/svn/trunk/data/vimim.cjkv.txt |
| 音形码 | 词库 样本 |
|---|---|
| 二笔 | http://vimim-data.googlecode.com/svn/trunk/data/vimim.erbi.txt |
| 永码 | http://vimim-data.googlecode.com/svn/trunk/data/vimim.yong.txt |
【无词库】
【带词库】
- 〖特点〗 即插即用 plug & play
- 用VimIM 打字,只需一个词库。玩家可以从民间词库样例中挑选。
- 如果需要用拼音打花名册,推荐使用 cjk 标准字库
- 如果需要同时使用几种输入法,可以同时插入几种词库
【词库位置】
- 〖特点〗 多个词库: set & play
- 用户可以随意设置自己词库的位置
【多功能词库】
- 〖特点〗一个词库: set & play
- 用户可以在一个词库中混合几种输入法。
http://code.google.com/p/vimim/issues/detail?id=133
又及: 目标是Vim编码与词库编码相同。也即utf8<=>utf8 cp936<=>cp936
VimIM 自然有阿拉伯数字和中文大小写数字和量词的转换能力。
VimIM keeps habit of (1)全拼(2)智能ABC双拼
| 1 | i | 输入小写中文数字的前导字符 |
| 2 | ii | 输入大写中文数字的前导字符 |
中文数字
中文量词
VimIM 可以毫不费力玩智能ABC的样本例子:
| i20090719 | 二〇〇九〇七一九 |
| ii20090719 | 贰零零玖零柒壹玖 |
| i2009n | 二〇〇九年 |
| i7y | 七月 |
| i20r | 二〇日 |
| i2sr | 二十日 |
| i2006n6y3sr | 二〇〇六年六月三十日 |
| ii6b8s2 | 陆佰捌十贰 |
| isw8ql | 十万八千里 |
常用单个量词的定义与智能abc类似:
| a 秒 | f 分 | k 克 | p 磅 | u 微 |
| b 百 | g 个 | l 里 | q 千 | w 万 |
| c 厘 | h 时 | m 米 | r 日 | x 升 |
| d 第 | i 毫 | n 年 | s 十 | y 月 |
| e 亿 | j 斤 | o 度 | t 吨 | z 兆 |
| i2w<C-^> | ii2w<C-^> | |
|---|---|---|
| 1 | 二万 | 贰万 |
| 2 | 二位 | 贰位 |
| 3 | 二味 | 贰味 |
| 4 | 二碗 | 贰碗 |
| 5 | 二窝 | 贰窝 |
内码 encoding 动态列表 UNICODE utf-8 yes GBK chinese yes BIG5 taiwan yes
- 用<C-^>点石键直接点汉字,显示内码列表。
- 以u为十六进制内码输入的前导字符,动态列表:u9999 → 香
- 十进制内码,动态列表: 22221 → 囍
- 一键改错
- 按一次<Esc>键则关闭菜单并全清刚才的输入,
- 再按一次<Esc>键则退出插入模式。
- magic 句号
- 句号是唯一的字符 ==> 标点符号转换
- 句号前后都有英文字符 ==> 逐词匹配 句号分隔,自己定匹配
- magic 单引号
- 单引号在第一个 ==> 小写中文数字 i8 => 八
- 单引号在前两个 ==> 大写中文数字 ii8 => 捌
- 无缝混排
- 在中文英文之间不留空格。
- 回车键确认英文或者数字,随后可以直接上中文。
- (Vim Insert Mode)敲两次CTRL-\后可直接敲中文。
- 翻页选字
- 减号(-) 或 逗号(,) 向上翻页 PageUp
- 等号(=) 或 句号(.) 向下翻页 PageDown
VimIM的作者
见字找码:(需标准字库 vimim.cjk.txt)
VimIM鼎立支持即插即用海量词库: database
VimIM 彩云飘飘
彩云飘飘:VimIM 同时支持四种云输入
VimIM 云输入无插件方案 Python Interview to Vim
- VimIM 上市发行内置 python 版本 mycloud 客户端
- http://code.google.com/p/pimcloud/source/browse/README
- 云里来,雾里去
- 直接在Vim里面发送电邮,条件是(1)Vim连上Python(2)有gmail账号
- http://code.google.com/p/vimim/wiki/VimimCloudGmail
- 想云就云,云完就扔!
精兵简政
- 删掉 :let g:vimim_cloud_mycloud=0
- 删掉 :let g:vimim_cloud_qq=0 " 缺省:QQ云输入
- 删掉 :let g:vimim_cloud_baidu=0 " 缺省:百度云输入
- 删掉 :let g:vimim_cloud_google=0 " 缺省:谷歌云输入
- 删掉 :let g:vimim_cloud_sogou=0 " 缺省:搜狗云输入
- 删掉 :let g:vimim_cloud_sogou=888 " 缺省:想云就云
- 删掉 :let g:vimim_cloud_sogou=8 " 每输入8字就激活
- 删掉 :let vimim_cloud='sogou.8' " 每输入8字就激活
一个选项,调控所有云输入:
| " | :let g:vimim_cloud='sogou' | " 缺省:搜狗云输入 |
| :let g:vimim_cloud='sogou.dynamic' | " 搜狗纯云输入,动态 | |
| :let g:vimim_cloud='sogou.static' | " 搜狗纯云输入,静态 | |
| :let g:vimim_cloud='google' | " 谷歌云输入 | |
| :let g:vimim_cloud='baidu' | " 百度云输入 | |
| :let g:vimim_cloud='qq' | " QQ云输入 | |
| :let g:vimim_cloud='qq.fanti' | " QQ云输入,开启繁体 | |
| :let g:vimim_cloud='qq.mixture' | " QQ云输入,开启混合模式 | |
| :let g:vimim_cloud='qq.fuzzy' | " QQ云输入,开启模糊音 | |
| :let g:vimim_cloud='qq.wubi' | " QQ云输入,五笔 | |
| :let g:vimim_cloud='qq.wubi.dynamic' | " QQ纯云输入,五笔,动态 | |
| :let g:vimim_cloud='qq.shuangpin.abc' | " QQ云输入,双拼智能ABC | |
| :let g:vimim_cloud='qq.shuangpin.ms' | " QQ云输入,双拼微软拼音2003 | |
| :let g:vimim_cloud='qq.shuangpin.plusplus' | " QQ云输入,双拼拼音加加 | |
| :let g:vimim_cloud='qq.shuangpin.purple' | " QQ云输入,双拼紫光拼音 | |
| :let g:vimim_cloud='qq.shuangpin.flypy' | " QQ云输入,双拼小鹤双拼 | |
| :let g:vimim_cloud='qq.shuangpin.nature' | " QQ云输入,双拼自然码 | |
| :let g:vimim_cloud=-1 | " 彻底关闭云输入 |
VimIM 红五月 r7745
VimIM 五月槐花香 r7677
VimIM 人间四月天
- vimim.vim GDP=5049 version=0.9.9.6 release=2011-04-21
- vimim.vim GDP=5170 version=0.9.9.5 release=2011-04-04
- vimim.vim GDP=5502 version=0.9.9.0 release=2011-01-15
- vimim.vim GDP=5608 version=0.9.8.0 release=2011-01-03
- vimim.vim GDP=5779 version=0.9.7.1 release=2010-12-13
- vimim.vim GDP=6326 version=0.9.6.0 release=2010-05-22
VimIM 人间四月天
- 旋转麻将 vimimgame
- 动态排序 vimimsort (only available in version 0.9.9.5)
- 旋转图片 plot sin(x)/x
- (新)彩蛋 vimimrc
- (新)g:vimim_onekey_hit_and_run
- http://vimim.googlecode.com/svn/vimim/vimim.html#vimimrc
- 词库格式,左码右词,一行多词,无需排序。
- 不再支持一码多行。
- 所有民间词库, vimim.*.txt, 都已更新。
- http://vimim.googlecode.com/svn/vimim/vimim.html#hjkl
- :let g:vimim_onekey_hit_and_run=1 " 缺省 hit and run
- 插上VimIM cjk标准字库,犹如插上瑞士军刀。
- 实现VimIM当年的梦想,做个中文打字机,让妈妈也可以打中文。
- http://vimim.googlecode.com/svn/vimim/vimim.html#cjk
【点石成金】更上一层楼
| 问: | VimIM 是什么意思?
|
|---|---|
| 答: | VimIM 的本义应该是 Vim Input Method —— Vim 输入法。
因为本文是中文版本,VimIM 就顺势译成 Vim 中文输入法。
|
| 问: | 在 static 模式中,如何方便的实现“有缝混排”?
|
| 答: | 在 static 模式中,如果按空格之后选择回车,则直接上英文。
如果再按一次回车,就会上空格:实现“有缝混排”。
|
| 问: | VimIM 与 Vim abbreviation 好像有点冲突?
|
| 答: | Yes, but ...
如果不激活 VimIM, Vim 的abbreviation永远不会“被和谐”。
问题好像只出现在用〖点石成金〗上字之后,接着马上敲空格键,
而且敲空格键的目的是激活abbreviation. 不过这时候,再次用
空格键时,空格键又可以激活abbreviation了。
原因:OneKey需要赋予空格键一点智能,以便于上字。
|
| 问: | VimIM 与 latex-suite plugin 好像有点冲突?
|
| 答: | 有玩家反应。Let's wait for solution from those players who
are interested in making both plugins work in harmony.
|
| 问: | 有时候需要在command mode下输入中文,我该怎么做?
command mode对于Vim来说是它的精华所在,
很多高级功能都要在command mode下完成。
|
| 答: | 另一个方案是利用 vim mapping, 归.vimrc控制。
例如: 如下 mapping 可作单行或多行操作:
nmap g: vg:
xnoremap g: :w! /tmp/_<CR>:source /tmp/_<CR>
操作: 如果想把文件中的"谷歌拼音" 换成 "VimIM中文输入":
(Vim Insert Mode) 敲入: :%s/谷歌拼音/VimIM中文输入
(Vim Normal Mode) 敲map: g:
|
| 问: | 可不可以支持CTRL-SPACE?
|
| 答: | 如果所用的vim支持CTRL-SPACE键的mapping,
设置::let g:vimim_ctrl_space_to_toggle=1
It works for GVim.
It works for Console Vim using MinTTY.
|
| 问: | 可不可以支持Tab键作为点石成金?
|
| 答: | :let g:vimim_map='tab_as_onekey'
CTRL-^ 变成 <Tab>
|
| 问: | 可不可以自定义热键?
|
| 答: | 例如在.vimrc中,定义 CTRL-\ 为中文模式开关
:let g:vimim_map='c-bslash'
|
VimIM的词库来源
科普:如何让Vim支持中文?
Vim 支持中文编码的基础
影响 Vim 中文编码的设置项
Vim 具体应用环境的设置:微软视窗(Windows) vimrc 样例
如何用 Vim 插入非 ASCII 字符?
如何解决windows下Vim的中文乱码问题?
【实例】 在GBK Windows中给Vim设置 UTF-8
" -------------------------------------- set encoding=utf-8 set fileencodings=ucs-bom,utf-8,chinese,latin-1 set termencoding=GBK if has("win32") set fileencoding=chinese else set fileencoding=utf-8 endif language messages zh_CN.UTF-8 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim set langmenu=zh_CN.UTF-8 " --------------------------------------
This is for making VimIM backend datafile and directory.
" --------------------------------------------------------
function! g:vimim_tool_one_file_per_line(file_in, dir_out)
" --------------------------------------------------------
" [purpose] to turn datafile into directory
" let dir = s:path
let dir = a:dir_out . '/'
if !exists(dir) && !isdirectory(dir)
call mkdir(dir)
endif
for line in readfile(a:file_in)
let entries = split(line)
let key = get(entries, 0)
if match(key, "'") > -1
let key = substitute(key,"'",'','g')
endif
let key_as_filename = dir . key
let results = entries[1:]
if empty(results)
continue
endif
call writefile(results, key_as_filename)
endfor
endfunction
" --------------------------------------------------------
function! g:vimim_tool_one_line_per_key(file_in, file_out)
" --------------------------------------------------------
" [purpose] to turn multiple lines into single one for one datafile
let hash = {}
for line in readfile(a:file_in)
let lines = split(line)
let key = get(lines,0)
let values = lines[1:]
if has_key(hash, key)
let values = hash[key] + values
let values = g:vimim_remove_duplication(values)
endif
let hash[key] = values
endfor
let results = []
for key in keys(hash)
let line = key . ' ' . join(hash[key])
call add(results, line)
endfor
call writefile(sort(results), a:file_out)
endfunction
" ------------------------------------------
function! g:vimim_remove_duplication(values)
" ------------------------------------------
let cache = {}
let results = []
for char in a:values
if has_key(cache, char) || empty(char)
continue
else
let cache[char] = char
call add(results, char)
endif
endfor
return results
endfunction
参考文献