All Projects → pi314 → ime.vim

pi314 / ime.vim

Licence: BSD-2-Clause license
A Vim input method engine

Programming Languages

Vim Script
2826 projects

Projects that are alternatives of or similar to ime.vim

Pime
Develop input methods for Windows easily with Python and node.js
Stars: ✭ 1,051 (+1320.27%)
Mutual labels:  ime, chinese
Trime
同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
Stars: ✭ 1,032 (+1294.59%)
Mutual labels:  ime, chinese
Sublime-Fanhuaji
繁化姬的 Sublime Text 插件
Stars: ✭ 48 (-35.14%)
Mutual labels:  chinese
vim-strip-trailing-whitespace
🎞️ Vim plugin that removes trailing whitespace from *modified* lines on save
Stars: ✭ 66 (-10.81%)
Mutual labels:  vim-plugin
eslint-config-mingelz
A shared ESLint configuration with Chinese comments. 一份带有完整中文注释的 ESLint 规则。
Stars: ✭ 15 (-79.73%)
Mutual labels:  chinese
vim-pairs
Punctuation text objects: ci/ da; vi@ yiq da<space> ...
Stars: ✭ 35 (-52.7%)
Mutual labels:  vim-plugin
embedding study
中文预训练模型生成字向量学习,测试BERT,ELMO的中文效果
Stars: ✭ 94 (+27.03%)
Mutual labels:  chinese
Email-newsletter-RSS
邮箱 📧 newsletter RSS 荟萃 News
Stars: ✭ 1,225 (+1555.41%)
Mutual labels:  chinese
vim-viler
Editable file explorer for Vim
Stars: ✭ 24 (-67.57%)
Mutual labels:  vim-plugin
yaml-vim
YAML syntax/indent plugin for Vim
Stars: ✭ 37 (-50%)
Mutual labels:  vim-plugin
skim.vim
vim support for skim
Stars: ✭ 127 (+71.62%)
Mutual labels:  vim-plugin
chinese-learner
A desktop web application for learning Mandarin Chinese and its character stroke order.
Stars: ✭ 22 (-70.27%)
Mutual labels:  chinese
vim-mdnquery
Query the Mozilla Developer Network documentation without leaving Vim
Stars: ✭ 19 (-74.32%)
Mutual labels:  vim-plugin
vim9-stargate
modern alternative to easymotion written in vim9
Stars: ✭ 76 (+2.7%)
Mutual labels:  vim-plugin
next-qrcode
React hooks for generating QRCode for your next React apps.
Stars: ✭ 87 (+17.57%)
Mutual labels:  chinese
word2vec-movies
Bag of words meets bags of popcorn in Python 3 中文教程
Stars: ✭ 54 (-27.03%)
Mutual labels:  chinese
miniSnip
Lightweight snippet plugin for Vim
Stars: ✭ 45 (-39.19%)
Mutual labels:  vim-plugin
vim-plugin-ruscmd
Vim plugin: support command mode in Russian keyboard layout
Stars: ✭ 60 (-18.92%)
Mutual labels:  vim-plugin
stable-windows
Keeps vim windows stable on layout changes
Stars: ✭ 41 (-44.59%)
Mutual labels:  vim-plugin
Extract
👻 Neovim yank ring plugin with completion for registers, ring, pinning, and replacing with register.
Stars: ✭ 39 (-47.3%)
Mutual labels:  vim-plugin

ime.vim

Read this document in English.

介紹

在 Vim 裡面輸入中文一直都是件麻煩事。

有在使用中文輸入法的人都會知道,每個中文輸入法都有兩種狀態:

  • 英文
  • 中文

Vim 也有兩種狀態:

  • Insert mode (以及 replace 和類似的狀態)
  • 非 insert mode (例如 normal mode 和 command mode 等等)

這些狀態在使用時會疊在一起,如下表:

Vim 輸入法 英文 中文
Insert Mode :) :)
非 Insert Mode :) :(

這四種狀況中,中文 + 非 insert mode 非常討厭,按下的按鍵是中文的字根, 會被輸入法攔截下來,不會直接進入 Vim。

如果能把這個狀況去除,就可以避免 「需要不斷的按下 shift 或是 ctrl + space 」 (在 macOS 上也許是 + space )的狀況。 要達到這個目標,最好的方式就是在 Vim 中嵌入一個中文輸入法。

ime.vim 透過純 VimScript 實作了一個嘸蝦米輸入法引擎, 不需要外部程式,不需要網路, 安裝以後就能馬上開始使用。

安裝

ime.vim 可以使用 Vundle 或是 vim-plug 安裝,請參考它們的安裝教學。

在某些環境下,你可能沒有辦法正常使用 plugin manager, 此時仍然可以手動安裝,請參考 手動安裝 ime.vim

ime.vim 在以下環境測試過:

  • Vim 7.4 / Mac OS X
  • Vim 8.0 / macOS Sierra
  • Vim 7.4 / FreeBSD
  • Vim 8.0 / FreeBSD
  • gVim 7.3 / Windows 7

相關前作

個人是嘸蝦米的使用者,但目前能力不足,不便購買行易公司的嘸蝦米輸入法, 所以先尋找前人的作品。

  • VimIM
    • 據說很強大的中文輸入法
    • 支援相當多的中文輸入法 (包含數種雲端輸入法)
  • boshiamy-cue
    • 感覺很輕量,但很老舊的 Plugin
  • vim-boshiamy
    • 從 VimIM 0.9.9.9.6 fork 出來,並為嘸蝦米做了調整

VimIM 的功能非常強大,但個人覺得強大的軟體就會很肥大,所以沒有嘗試。 我希望找到一個剛好符合需求,不要有太多彩蛋或不必要功能的軟體。

boshiamy-cue 則是年代久遠,在 2013 年初發佈第一個版本後就沒有再更新, 也因此這個 Plugin 並沒有考慮 Pathogen/Vundle。 此外嘸蝦米還是需要選字的,而 boshiamy-cue 沒有提供這個功能。

vim-boshiamy 是暫時的 work around,2012 年中釋出後就沒有再更新。

使用

  • ime#mode() 函式回傳輸入法當前的狀態,你可以在自己的 statusline 中顯示這個資訊:

    set statusline=%<%{ime#mode()}%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
    
    • 這行 statusline 看起來會像 [嘸]README.rst [+] 75,67-59 53%

    • 在 Vim 7.4.1711 之前,直接把它放在 statusline 裡面可能會導致 statusline 被重設。包裝一層函式可以暫時解決這個問題:

      function! IMEStatusString ()
          if exists('*ime#mode')
              return ime#mode()
          endif
          return ''
      endfunction
      set statusline=%{IMEStatusString()}
      
  • 切換輸入法/英文:

    let g:ime_toggle_english = ',,'
    
    • 在英文與目前選定的輸入模式之間切換
    • 如果目前的模式是日文,用 ,, 切換回英文再切換回來仍會是日文
  • 選擇主要輸入模式:

    let g:ime_select_mode = ',m'
    
    • 設定 g:ime_select_mode_style 以使用不同的風格:
      • let g:ime_select_mode_style = 'popup' - (預設) 透過補完選單切換模式
      • let g:ime_select_mode_style = 'interactive' - 透過互動式選單切換模式
  • 交換主要/次要輸入模式:

    let g:ime_switch_2nd = ',.'
    
    • 若不想在 statusline 顯示兩個輸入模式:

      let g:ime_show_2nd_mode = 0
      
  • 取消輸入,回復為輸入前的字串:

    let g:ime_cancel_input = '<C-h>'
    
    • 有些英文單字如 are 是某些字的字根,如果開著中文模式輸入英文,會讓這些英文單字變成中文,此時按下 <C-h> 就可以把字打回英文,並在後方加上一個空白字元
  • 開啟輸入法設定選單:

    let g:ime_menu = ';;'
    
    • 有些輸入模式會提供設定選單,讓使用者隨時調整輸入法的行為
      • 例如全形/半形
      • 例如平假名/片假名
    • 如果可以調的功能只有一種,按下 g:ime_menu 以後,設定選單可能不會出現,而是設定直接生效
    • 不一定每個模式都有設定選單,請參考它們的說明文件
  • 內建輸入模式

    • 中文 [嘸]
      • 可直接輸入嘸蝦米,按下空白鍵送字
      • 輸入 ; 後可直接以注音輸入(有些字真的臨時忘了怎麼寫)
        • 輸入 ;hk4 ,按下空白鍵送字以後會跳出 的同音字選單
      • 輸入 \u 後可使用 Unicode Code Point 輸入 Unicode 字元
      • \u[字] 可把 解碼為 \u5b57
    • 日文假名 [あ] / [ア]
      • g:ime_menu 可在平假名與片假名之間切換
      • 按下 v 可把前一個假名改為促音
      • 平假名範例
        • a ->
        • あv ->
        • buiaiemu -> ぶいあいえむ
  • 自訂字根表

    • 使用者可以自訂字根表,這個字根表的優先度比內建的表格高,使用者可以用來新增甚至修改組字規則

    • 自訂字根表的檔名:

      let g:ime_boshiamy_custom_table = '~/.boshiamy.table'
      
      • 此全城變數 沒有 預設值,請在需要使用時再設定
    • 自訂字根表格式為 字串 字根 字根 ... ,中間以空白字元分隔:

      (((°Д°;))  ,face
      (ಥ_ಥ)      ,face
      ಠ_ಠ        ,face ,stare
      ఠ_ఠ        ,face ,stare
      (ゝω・)    ,face
      (〃∀〃)    ,face
      (¦3[▓▓]    ,face ,sleep
      (눈‸눈)    ,face
      ㅍ_ㅍ      ,face
      
      • 先後順序和選字選單的順序相同
  • 載入第三方套件(後述):

    let g:ime_plugins = ['emoji', 'runes']
    
  • 啟用 ime buffer

    let g:ime_enable_ime_buffer = 1
    
    • ime buffer 的效果為

      • 在 Insert mode 按下 Enter 會直接剪下並複製一行
      • 在 Visual mode 按下 Enter 會剪下並複製多行
      • 若該行是空的,Enter 會貼上先前複製的文字
    • 透過指定 filetype 來啟動 ime buffer

      :set ft=ime
      

詳細的文件請參考 :help ime.vim

對嘸蝦米字表的改動

為了方便,我自己更改了嘸蝦米的字表,新增/刪除了一些項目,此處不細述,只大概列出一些比較重要的改動。

  • 全型格線的輸入都使用 ,g 開頭,接上形狀: t / l / i / c
    • ,gt -> (其他方向的符號在選單中會列出)
    • ,gl ->
    • ,gi ->
    • ,gc ->
    • 重覆形狀可以輸入雙線的格線符號,最多三次
      • ,gttt ->
  • 嘸蝦米模式中的日文片假名、平假名被我刪除,否則 u, 會無法正常輸入
  • 新增 Mac OS X 相關的特殊符號
    • ,cmd / ,command ->
    • ,shift ->
    • ,option / ,alt ->

第三方套件

ime.vim 能夠載入第三方套件,以擴充自己的輸入能力。

目前已經有的套件有:

這些套件原本都是 ime.vim 的一部份,現在拔出核心,更加彈性。

要注意 ime.vim 本身並不管理套件,請手動安裝,或是透過 Vundlevim-plug 等套件管理系統安裝。

第三方套件的開發請參考 :help ime-plugins 或是 doc/ime-plugins.txt

可以配合 vim 使用的技巧

在取代模式中,一個字元只會覆蓋一個字元,無論寬度。

在繪製 ASCII 圖片時,如果用中文字去覆蓋空白字元,會讓那行變得越來越長, 因為一個兩格寬的中文字卻只覆蓋了一個空白字元。

此時 vim 內建的 gR 變得很有用,它可以根據字元的寬度覆蓋字元。

特別感謝

  • honglong0420 - 在 twitter 上提到 𡦀 這個字
  • <anonymous> - 在 twitter 上提到 這兩個字

授權

本軟體使用 2-clause BSD license 發佈,請參考 LICENSE.txt


2017/03/30 pi314 @ HsinChu

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].