Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

`c`,`s`,`r`コマンドで、書き換え前の文字列に応じてIMオン/オフを切り替えるVimプラグインを作りました

$
0
0

c,s,rコマンドで、書き換え前の文字列に応じてIMオン/オフを切り替えるVimプラグインを作りました

Vim Advent Calendar 2013のXXX日目(2014-XX-XX)の記事です。

普段はtutcode keymapを使って日本語を入力しているのですが、
ソースコード編集時に、
関数名書き換え等の際にたびたび日本語入力をオフにする操作を
していることに気づきました。

書き換え前の関数名はASCII文字しか使っていないので、
こういう場合は最初から日本語入力はオフにしておいて欲しい、
と思ったのでプラグインcontextimi.vimを作りました。

以下の機能を提供します。

  • ASCII文字列をcsrで書き換える際は、IMをオフに切り替え
  • 日本語文字列をcsrで書き換える際は、IMをオンに切り替え

使い始めたばかりですが、今のところほとんど違和感なく使えています。
("ASCIIで"を"日本語で"に書き換えようとすると
IMオフになっていらつくことはありました。
書き換え前の文字列に加えて、その前後の文字まで見る方がいいのかも)

IMのオン/オフの切り替え制御

IMのオン/オフの切り替え制御は、デフォルトでは
&iminsertの値を2や0に設定することで行います。(Windowsのgvimの場合など。)

その他のIM切り替え方法に関しては、以下を参考にしてください。

IM切り替え方法のカスタマイズをしたい場合は、
IM切り替えを行う関数を定義して、
その関数名をcontextimi_activatefuncに設定してください
(以下の設定例も参考)。
関数の引数は'imactivatefunc'と同じです。

IMオン/オフ切り替えを行うかどうかの判定方法のカスタマイズ

IMのオンもしくはオフが必要かを判定するための関数を定義して、
その関数名をcontextimi_decideimcfuncに設定してください
(以下の設定例も参考)。

例えば、行末コメント中に日本語がある行で、
行頭からCコマンドを使うとIMオンに切り替えますが、
そうではなく、IMオフに切り替えたい場合、その判定を行う関数を作成して、
contextimi_decideimcfuncオプションに設定してください。

設定例: tcvime(1.5.0)とtutcodep keymapの場合

.vimrc
function! TcvimeActivate(active)ifa:active
    call tcvime#EnableKeymap()elsecall tcvime#DisableKeymap()endifendfunctionlet contextimi_activatefunc ='TcvimeActivate'function! TcvimeDecideImControl(str)ifa:str =~'[^\x00-\x7f]'return1endif" IMEオフにしないと入力が面倒な文字が含まれる場合はオフにする" tutcodep keymapの場合、数字・一部記号・一部大文字はlmapオンでも直接入力可ifa:str =~'[^-0-9 -+:<-@[-`{-~]'return-1endifreturn0endfunctionlet contextimi_decideimcfunc ='TcvimeDecideImControl'

拡張案: a,i,oコマンドへの対応

現状はa,i,oコマンドには未対応です。

このプラグインによるIMオン/オフ制御が、
ユーザの意図と異なる切り替えを頻繁に行うとかえって邪魔なので、
あまり意図から外れなさそうなc,s,rからまず対応しています。

a等に対応するには、カーソル前後の文字に応じて行うことになると思います。
* カーソル前後の文字が両方ともASCIIならIMオフ
* カーソル前後の文字が両方とも日本語ならIMオン
* カーソル前がASCIIで行末の場合はIMオフ
* カーソル前が日本語で行末の場合はIMオン

関連


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>