/vime

Vim 输入法

Primary LanguageVim Script

用法

安装

若用 vim 的插件管理器 vim-plug ,在 .vimrc

call plug#begin(...)

中加入

    Plug 'jagd/vime'

制定快捷键

比如用 Ctrl+_ (有些OS中需要设置imap <silent><C-S-_> <C-_>):

  • 汉 / Latin 切换(插入模式)
    inoremap <silent><C-_>  <C-R>=VimeSwitch()<CR>
  • 半角 / 全角(插入模式)
    inoremap <silent><C-_>. <C-R>=VimeToggleFullPunct()<CR>
  • 反查码表(普通模式)
    nnoremap <silent><C-_>  :call VimeInverseLookup()<CR>

拼音

  • 输入法打开装态下, # 后跟着小写拼音字母

全角

  • 默认关闭全角,若设为默认开启:
    let g:vimeDefaultFullPunct = 1
  • 全角时 LaTeX 自动关闭,以方便数学输入。

数学符号

  • 输入法打开并且半角时 \ 后跟 LaTeX command。与LaTeX不同之处在于所有符号都需要 \ 引导,如
    • 德文引号 \glqq\grqq„“,而英文引号仍需要 \ 符号以区分非数学输入,如 \``\''“”
    • 上下标需要 \,如 CO\_2CO₂H\^+H⁺
    • Italic 或其它风格的拉丁/希腊字符例如 \mathitpsi\_p𝜓ₚ
    • Umlaute 如 \"uü\"eë
    • 其它数学或非数学的符号如 \cmark\xmark

其它

  • 空格上屏,<C-N><C-P> 选择候选字词
  • Vim 中 q/ 可用此插件输入待搜索的字符,而 q: 可用此插件输入包涵汉字的命令(如替换,grep,打开文件)
  • 设 vim 为 readline 的 EDITOR,便可以在 Shell 中输入汉字路径名

自定义码表

默认附帯了我自己用的郑码单字码表。

自定义码表名字为 vime-table.txt,放在 ~/.vim 或其它 runtime 目录下。 由于 runtime 依序寻找文件,故不必存于此插件的文件夹中。 码表是一个从小到大编码排列有序的平面一维数组,两个元素一组用二分查找编码。 重码时越靠前的字词候选也越排前。 例如:

let g:vimeTable = [
  \'a','啊',
  \'a','阿',
  \'ba','吧',
  \'ba','把',
  \'ba','八',
  \'zun','尊',
  \'zun','遵',
  \'zun','樽',
\]

拼音码表亦是如是,只需将文件命名为 vim-table-pinyin.txt

码表转换

Transforming from a format like https://raw.githubusercontent.com/jagd/Zhengma-Single-Character/master/table.txt

awk '{printf("%s %05d %s\n",$1,n++,$2)}' | sort  | awk "{printf(\"\\\\'%s','%s',\\n\",\$1,\$3)}

Transforming from RIME style table:

awk '{printf("%s %08d %08d %s\n",$2,99999999-$3,n++,$1)}' | sort  | awk "{printf(\"\\\\'%s','%s',\\n\",\$1,\$4)}"

Known Issues

  • 一些 Unicode 符号(比如粗体/Fraktur字母)与一些国标扩展的汉字在 GVim 中有残影,set rop 无法解决。NeoVim-Qt 中渲染正常。

Implementation Notes:

  • lmap is not helpful in this case, as complete() function cannot be invoked in command line mode nor useless in search mode.