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

DroidVimとGboardの組み合わせでちょっとだけ楽をしたい

$
0
0

楽しいですよね、DroidVim。……いや正直ただのオモチャにしている感じなんですがまぁ、楽しんでいます。ただ、フルキーを駆使するのが前提のVimをタッチデバイスで扱うのは流石にストレスを感じることも多いんです…特に記号とか、特に記号とか!というわけで、少しでも改善できそうな方法を探して、何とかしてやろうというやつです。というよりまたスクリプトを増やしてしまいました。

OLLIE

最近DroidVimに少しだけ変更がありまして、IMEの処理にiminsertが使えるようになりました。それに伴い、ファンクションバー1<C-^>をアサインすることが出来るようになり、マニュアルにはGboardの為のコンフィグの例まである感じで……これ自体はモード遷移での恩恵なんですが。

ノーマルモード中の<C-^>はデフォルトで「代替ファイルの編集」がマップされており、ノーマルモード中のIME処理に影響はなく、またそもそもこのマップを知らなかったので、必要なときには:e #を使っています。むしろモードに気が付かずにバッファが変わってしまうのに苛立ちを……まぁ誤爆して苛立つキーなら潰すまではともかく、より使いたい機能をマップしてしまえばいいわけですよ。例えば<C-^>[a-z]でgboardの右肩の記号がロングタップなしで打てるとか。

スケボーキング

plugin/gboard.vim
scriptencoding utf-8function gboard#map(IFSize) abort
    nnoremap <C-^><C-^><C-^>forlin keys(g:longTap)
        execute 'noremap <C-^>'.lg:longTap[l][a:IFSize]endforendfunctionfunction gboard#unmap() abort
    try
        nunmap <C-^><C-^>catch/E31/endtryforlin keys(g:longTap)try
            execute 'unmap <C-^>'.lcatch/E31/
            continue
        endtryendforendfunctionfunction gboard#main(isBang,...) abort
    ifa:isBang!=? '!'ifa:0>0&& a:1=~? '^\(large\|small\)$'ifa:1==? 'large'let IFSize =1elselet IFSize =0endifcall gboard#map(IFSize)ifv:vim_did_enter
                echo printf('[gboard]: Mapped for %s display.', tolower(a:1))endifelse
            echo '[gboard]: Maps from gboard.vim'
            nmap <C-^>endifelsecall gboard#unmap()
        echo '[gboard]: Unmapped.'endifendfunction
plugin/gboard.vim
scriptencoding utf-8if!exists('g:longTap')letg:longTap={        \'q':['%','^'],        \'w':['\', ','],        \'e':['\|','\|'],        \'r':['=','='],        \'t':['[','['],        \'y':[']',']'],        \'u':['<','<'],        \'i':['>','>'],        \'o':['{','{'],        \'p':['}','}'],        \'a':['@','@'],        \'s':['#','#'],        \'d':['$','$'],        \'f':['_','_'],        \'g':['&','&'],        \'h':['-','-'],        \'j':['+','+'],        \'k':['(','('],        \'l':[')',')'],        \'z':['*','\'],        \'x':['"','%'],        \'c':["'",'*'],        \'v':[':','"'],        \'b':[';',"'"],        \'n':['!',':'],        \'m':['?',';'],        \'.':['/','/']    \}endif

command -nargs=? -bang Gboard call gboard#main('<bang>',<f-args>)

まぁ、アルファベット全部にnoremapするわけで必然的にやぼったい設定が必要になります……仕方ないね。

METHOD

基本的にforループをブン回してnoremapするだけなんですが、gboardの仕様が画面サイズによってロングタップの文字が変わるので、両方の設定に対応できるようにしています。正直「他は知らん」でも良かった気がするのですが、一応カスタム出来るようにしておきました。ちょっとした気の利かせ的に.のロングタップで出せる、というより何故かロングタップしないと出せない/<C-^>.で打てる気遣いをしているんですが、/自体はDroidVimのファンクションバーにアサインできるので必要ないかもしれないです。一応<C-^>のもとの機能は<C-^><C-^>に振り直しています。


  1. キーボードの近くに、ある程度カスタマイズできるオンスクリーンキーが……この説明やぼったいなぁ。Playストアからスクショ見てください。マニュアルで言うところのを活用したいという話をしています。 


Viewing all articles
Browse latest Browse all 5608

Trending Articles