記事更新しました
ポメラ!お前はポメラになるのだ!
「ポメラほしい。でもUSキーじゃないしじゃあUSキーのネットブックほしい。ぶっちゃけCUIでいい。いっそポメラの代替品ならVimだけ動けばいい。」みたいなことを最近言っていたんですが、少し冷静になりまして、状態もよくわからん中古のネットブック買って、バッテリーがうんちゃらとか変態レイアウトがうんちゃらとか言うくらいだったら、root取れる中華タブとキーボード買うほうがマシよねって気がついたんです。ホラちょうどここにカスタマイズしようとして放っておいたFire7もあるんですよ。ここはちょっと一念発起して、昔チェックだけはして「スマホじゃ無理だな」…と放っておいたDroidVimと、bluetoothキーボードの組み合わせで持ち歩けるVimを作ってしまおうという魂胆なんです。
「俺の答えはこれや」と叫びvimrcを投げつける
新しい端末でvimを使うならまず使い込んだ自分のvimrcを放り込むところから始まるんですが、幸いDroidVimは課金すればbusybox、gitが使えるのでさっさと課金して自分のvimrcをpullします。公式のドキュメントでは「どっか.vimrc
をうまいこと置いてシンボリックリンクで」とのことですが、もちろん.vim
ディレクトリまるごとシンボリックリンクでもほぼ問題なかったです。1.vim
の実ファイル群置く場所は、まぁAndroidだし/storage/emulate/0/
下でいいんじゃないですかね?ここならDroidVimの環境変数$INTERNAL_STORAGE
に入っているので何かのっぴきならないことがあってもそんなに困らないでしょう。
もちろん外部ツールに依存しない前提ですが、殆どのvimscriptは問題なく動きました。プラグインマネージャのvim-plug
も問題無しでした。環境に依存するものもあるのでvimrc
にちょっとした仕掛けをしておくほうが良さそうなので変数を仕掛けておきます。
let g:isDroid = split(&runtimepath, ',')[0] =~? 'droidvim' ? v:true : v:false
変数をbool値としてしか使うつもりがないのでv:true
を使っていますが、そのへんはどうすればいいのか分かっていません。さておき、DroidVimで弾きたい設定がある場合はこれを使って行きます…弾きたいのは…
~/.vim/plugin/**/*.vim
今まで自分で書いたスクリプトはとりあえずplugin
に放り込んでおけばガンガン読んでくれるので安心していたんですけど、ここに放り込むとファイル単位でスクリプトを弾くのがとても面倒なので工夫せざるを得なくなりました。netrw
を使っている手前、ディレクトリ構造で処理しようとするとディレクトリに潜る手順が増えるのが煩わしいし、そもそもplugin
ディレクトリ配下にある*.vim
は何でも読む以上ディレクトリツリーも使えません。しょうがない、オミットするためのスクリプトを書いて乗り切りました。
scriptencoding utf-8
let s:pluginDir = $VIMFILES.'/myplug'
let preloadPlugin = []
" ここに先にロードしたいプラグイン
let g:excludePlugin = {}
let g:excludePlugin.droid = []
" ここにDroidVimで除外したいプラグイン (以下同様)
let g:excludePlugin.win = []
let g:excludePlugin.unix = []
" プラグインの読み込み
let g:myPlug = glob(s:pluginDir.'/*.vim', 0, 1)
let currentTerm = ''
if !g:isDroid
if has('win32')
let currentTerm = 'win'
elseif has('unix')
let currentTerm = 'unix'
endif
else
let currentTerm = 'droid'
endif
for omit in g:excludePlugin[currentTerm] + preloadPlugin
let rgx = omit.'$'
call filter(g:myPlug, 'v:val !~# rgx')
endfor
let g:myPlug = map(preloadPlugin, { idx, val -> s:pluginDir.'/'.val }) + g:myPlug
for script in g:myPlug
execute('source '.script)
endfor
スクリプト中の$VIMFILES
の中身は先のg:isDroid
でも使っていたsplit(&runtimepath, ',')[0]
です。
I・M・E! I・M・E!
日本語入力がある限り日本人のvimmerは永遠にIMEの設定をする運命なのですが、当然のごとくAndroid+H/Wキーボードの環境でも襲ってきますというか、PCベースの環境より更に悪化していると言って差し支えないでしょう。とりあえず「Google日本語入力」を使っているので色々と試しましたが、公式ドキュメントに倣うのが一番無難でそれ以上快適にはならなさそうでした。但し、g:imcontrol_insert
を設定すると入力モードが半角の「単語ベース」の入力になる上、そもそもGoogle日本語入力経由の入力がかなりガタつくのでちょっと使い物にならないなという感じです。日本語入力のために2ストローク使うのはシャクですが「IMEショートカット→入力切替」の手順を踏むのがいいのかなと思います。それとも:TFAMod
で仕込んだり出来るんですかねこれ…
余談
そもそもFire7でDroidVimを使うにあたって、そんじょそこらのH/Wキーボードを買うとCAPS⇔ctrlのスワップが出来なくて2ちっとも快適になりません。実際買ったのはそんじょそこらのやつなので、なんとかせんとならんのですが…Fire7君は立派に戦って文鎮となりました。現環境は中古で買ったQua tabです。Google Playがマトモに入っているならroot取らなくてもH/Wキーボードのレイアウトが変更できるのでまぁ及第点です。IMEでクッソガクガクするのはもしかしたら単純にQua Tabのパワー不足が原因かもしれないですが…