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

macOSXのVim/Neovimで日本語を入力してみたった

$
0
0

Summary

Vim/Neovimで日本語を入力する

こんな感じ

vimとNeovimとではちょっとやり方が変わります

vimの場合

help通りにやる( :h japanese )

functiong:ImActivateFunc(active) abort
  if!a:activecall system('osascript -e "tell application \"System Events\" to key code 102" &')endifendfunctionfunction!g:ImStatusFunc() abort
  letl:cmd ='ObjC.import("Carbon") ;var current_source = $.TISCopyCurrentKeyboardInputSource(); ;var cfs = $.TISGetInputSourceProperty(current_source, $.kTISPropertyInputSourceID); ;ObjC.bindFunction("CFMakeCollectable", [ "id", [ "void *" ] ]); ;Ref.prototype.toNS = function () { return $.CFMakeCollectable(this) } ;cfs.toNS()'letl:foo = system('osascript -l JavaScript -e "'.l:cmd .'" &')if stridx(l:foo,'Japanese')return1endifendfunctionset iminsert=2set imsearch=2set imcmdline
set imstatusfunc=g:ImStatusFuncset imactivatefunc=g:ImActivateFunc

Neovimの場合

function!s:imStatusFunc() abort
  letl:cmd ='ObjC.import("Carbon") ;var current_source = $.TISCopyCurrentKeyboardInputSource(); ;var cfs = $.TISGetInputSourceProperty(current_source, $.kTISPropertyInputSourceID); ;ObjC.bindFunction("CFMakeCollectable", [ "id", [ "void *" ] ]); ;Ref.prototype.toNS = function () { return $.CFMakeCollectable(this) } ;cfs.toNS()'letl:foo = system('osascript -l JavaScript -e "'.l:cmd .'" &')if stridx(l:foo,'Japanese')return1endifreturn0endfunctionfunctions:imDeactivateFunc() abort
  call system('osascript -e "tell application \"System Events\" to key code 102" &')endfunction

autocmd callmekohei-vimrc InsertLeave * ifs:imStatusFunc()|:calls:imDeactivateFunc()|endif

Vim/Neovim共通
vim
noremap <silent><nowait><ESC><ESC>
\ :nohlsearch<CR><C-l>
\ :<C-u>call <SID>imDeactivateFunc()<CR>

みどころ

IMEの状態を見る関数

13時間ほどぶっ続けでやって結局は stack overflow に書いてあったみたいな(泣)

JavaScriptもOSXのObjective-Cとかもぜんぜんわからずにアタックしましたよwww

辛すぎ〜

see also:How can we reading / coerce CFArray and CFString etc values from within OS X JXA?

// Carbonをインポート;古いAPIを使えるようにするObjC.import('Carbon')varcurrent_source=$.TISCopyCurrentKeyboardInputSource();varcfs=$.TISGetInputSourceProperty(current_source,$.kTISPropertyInputSourceID);ObjC.bindFunction('CFMakeCollectable',['id',['void *']]);Ref.prototype.toNS=function(){return$.CFMakeCollectable(this)}cfs.toNS()

動作的に

日本語切り替えを入れると全体的に動作がもさっとします。とくにインサートからノーマルにいくときに、:wを押す癖がついてるのですが、これができなくなるのですよ。たぶん0.3秒ほどウエイトがかかるんですけどそこにちょっと、あああな感じですけど慣れるしかないんでしょうね・・・。うん、でもそれ以外は今のところ快適ですね。

できれば・・・

いまはIMEの状態チェックでおさを(osascript)。切り替えるときにもおさを(osascript)。もったいないですよね。ここ。なんとか一つにしたいと思ってるところです。どたなたやってみませんか?


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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