iPadでもVimを使いたい！

# まとめ
- iOS用のVimであるiVimの紹介
- Mac版のVimなどと設定を共有したい
- .vimrcやプラグインの共有に成功

# 動作環境
- iPad Pro 12.5inch(iOS11.2.6)
- iMac5K(HighSierra10.13.3 + iTunes12.7.3.46)
 + このためmacOSとの連携方法のみ記述します

# この記事を読んでもわからないこと
- iPadを使った「開発環境」構築でSSHを使った手法
- SSHでサーバに接続する方法
- 動作するプラグインと動作しないプラグインの一覧
- ヘルプファイルの日本語化の詳細
- plugin管理方法の詳細
- iFunBoxを使うなどの「裏技的」ファイル転送方法
- macOSで不可視ファイルを常時表示させる設定方法

# iVimとは？
これまでもiPadやChromebookで仕事ができないか実験してきました。GoogleCloudEngineの無料枠ができたことで、GCE上に開発環境を構築しておけばPromptなどを利用することでiPadでも一定の開発ができるようになったと思います。ネットへの常時接続環境が整いつつあることも、「素直にサーバに接続すればいい」という発想を後押しします。
それでも、iPad単体でVimを使いたい、というイバラの道をついつい選んでしまうのがオタクの性というものです。2012年頃からiOSで使えるVimの存在は知られていました。[http://www.atmarkit.co.jp/ait/articles/1201/25/news149.html]
リリースされてすぐに試してみたのですが、色々うまくいかないことも多く（デフォルト設定では日本語が文字化けするというところで、すぐに心砕けました）、その時はあきらめてしまいました。年始に.vimrcの大掃除をしたのを機に、再びiOS用のVimを試したくなり、先人たちのお知恵を拝借していた過程でiOS版VimからフォークされたiVimというのを発見しました（[Githubのリポジトリはこちら](https://github.com/terrychou/iVim)）。
幸いなことにコンパイルされたものが[AppStoreで配布](https://itunes.apple.com/us/app/ivim/id1266544660?mt=8)されています。

# iOS版VimとiVimの比較
## iOS版Vimの特徴
- setenc=utf-8 しないかぎり、日本語が文字化け
- netrwでリターンキーが効かない（ディレクトリやファイルが開けない）
 - 後述するように設定ファイル等を転送後にリネームしないといけないのでかなり致命的
- サンドボックス内のファイルしかいじれないので、いちいち母艦とつながないといけない
- Vimのバージョンは7.4.1211
- Escキーはバックスラッシュに割り当て
- iOS標準の「ファイル」アプリからアクセスできない

## iVimのいいところ
- .vimrcを設置できる
- プラグインなども使用可能
 + pathogen.vimを使ったプラグイン管理に成功
 + vim-plugでは失敗（おそらくgitコマンドを使っているため）
- OpenInAppが使える
- 「ファイル」アプリからアクセス可能
 + 「このiPad」の中にあるiVimフォルダ内でタップすると直接iVimが起動
![IMG_0104.png](https://qiita-image-store.s3.amazonaws.com/0/81187/2ccf617c-1334-ed8c-d009-ad49d1390f9e.png)
- GoodReaderなどと連携するとファイルを自在に扱える
![IMG_0105.png](https://qiita-image-store.s3.amazonaws.com/0/81187/27e7db80-99fa-9ab8-d2f1-ba3924823e42.png)
- splitviewにも対応している
![IMG_0106.png](https://qiita-image-store.s3.amazonaws.com/0/81187/41e7548f-ae03-469d-6cad-3fdaa0b690d2.png)
- フォントの大きさを変更できる
 + ifont 1 20などと.vimrcで設定すると20ptのデフォルトフォントで表示できる
 + 詳しくは:help ifont
- 独自キーでEscなどが簡単入力
 + インターフェースは逆側に引っ張って入力という少々クセのあるインターフェース
 + フリック入力は指定の文字位置に指を動かす方式だがiVimは文字をキーの真ん中に持ってくるイメージ
![IMG_0103.png](https://qiita-image-store.s3.amazonaws.com/0/81187/0f717033-8bb2-4c65-3ad4-e6190ac1309b.png)
![IMG_0103 2.png](https://qiita-image-store.s3.amazonaws.com/0/81187/5a3e20d1-d559-0b92-3031-d8162d4cf5a6.png)
- プラグイン管理プラグインには注意が必要
 + vim-plugのように、gitを使うものは読み込みそのものができない
 + pathogen.vimは起動した(プラグインは.vim/bundle以下に手動で置くこと)

## iVimの残念なとこ
- 外付けキーボードでは、日本語変換が不思議なところに出る。入力は問題ない
- appstoreでvimで検索しても、出てこない
- バージョンは7.4.900
- ヘルプの日本語化はプラグイン管理プラグインではなく、手作業で行う必要がある（pathogen.vim 側の制限？）

# 設定ファイル移設時などに気をつけること
ドットから始まるファイル名にはファイルが対応していないので、ドットファイルはiVim 上で変更する必要があります。iTunesのファイル共有を使っても同様です。これはiVimの制限というよりかはiOSやmacOS側の制限です。
このため例えば、
1. Mac側でdotvimなどの名称でフォルダを作成
2. その中に必要なファイル等を配置（autoload, bundle, doc, syntaxなど）
3. フォルダごとiTunesファイル共有でiPadのiVim内にコピー
4. netrw(:e . で起動)などで.vimにリネーム(R)
5. iVimを再起動
などの手順が必要です。.vimrcについても同様です。なお、iVim側はサンドボックスのルートが$HOMEになってますので、そのままMac側からコピーすれば大丈夫です。

# 現状でわかっていること
- iOS標準の日本語入力が使える
- eskkも適切にプラグイン設定すれば使用可能
 + .skk-jisyoは手動であらかじめ作って置く必要がある
 + 辞書ファイルはEUC-JPではエラーになる。あらかじめUTF-8に変換しておけば問題ない
- 当然のことながら、外部コマンドを使うようなプラグインやVimScriptは使用不可能
 + gitやgrepは使えない。vimgrepなどVim内で完結するものは使用可能
 + 新規でファイルなどを作るものも無理っぽい。書き換えは可能
- ヘルプファイル日本語化は注意が必要
 + プラグインによるのではなく、手動でdoc フォルダにコピーする必要がある
 + コピー後、hepltagsコマンド実行
 + .vimrc にはset helplang=ja,en を追加しておくとよい
- iVimからのディレクトリの削除は難しそう
 + itunesファイル共有からdeleteキーで削除は可能
- dotvim コピー時は古い .vim をoldvim などにリネームし、新しいdotvim	を.vimにリネーム

## コンパイルオプションなど
```
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Feb 13 2018 14:34:01)
iVim version 1.32(2)
Included patches: 1-900
Modified by Boogaloo
Big version with iOS GUI.
  Features included (+) or not (-):
+acl             +insert_expand   -ruby
+arabic          +jumplist        +scrollbind
+autocmd         +keymap          +signs
-balloon_eval    +langmap         +smartindent
+browse          -libcall         -sniff
++builtin_terms  +linebreak       -startuptime
+byte_offset     +lispindent      +statusline
+cindent         +listcmds        -sun_workshop
-clientserver    +localmap        +syntax
+clipboard       -lua             +tag_binary
+cmdline_compl   +menu            +tag_old_static
+cmdline_hist    +mksession       -tag_any_white
+cmdline_info    +modify_fname    -tcl
+comments        +mouse           -terminfo
+conceal         -mouseshape      -termresponse
+cryptv          +mouse_dec       +textobjects
-cscope          -mouse_gpm       +title
+cursorbind      -mouse_jsbterm   -toolbar
+cursorshape     +mouse_netterm   +user_commands
+dialog_con_gui  +mouse_sgr       +vertsplit
+diff            -mouse_sysmouse  +virtualedit
+digraphs        +mouse_urxvt     +visual
-dnd             +mouse_xterm     +visualextra
-ebcdic          +multi_byte      +viminfo
+emacs_tags      +multi_lang      +vreplace
+eval            -mzscheme        +wildignore
+ex_extra        -netbeans_intg   +wildmenu
+extra_search    +path_extra      +windows
+farsi           -perl            +writebackup
+file_in_path    +persistent_undo -X11
+find_in_path    +postscript      -xfontset
+float           +printer         -xim
+folding         -profile         -xsmp
-footer          -python          -xterm_clipboard
+fork()          -python3         -xterm_save
-gettext         +quickfix        -xpm
-hangul_input    -reltime         
-iconv           +rightleft       
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
```

## 最後に
現状ではかなり普通のVimとして使えています。最新の機能やプラグイン管理などは使えませんが、割り切れば問題ありません。特に、GoodReaderからFTP接続すればウェブがらみの開発はiVim だけでできそうです。
ただし、最初からiPadだけで設定するのは少々困難かもしれません。iCloudなどにvimrcの内容を記述したテキストファイルを用意し、vimrcにコピペするだけくらいならいけるかもしれません。しかしプラグインがらみになってくると、できなくはないかもしれないがかなり面倒くさいのを覚悟しなければなりません。やはり、ドットファイルが見えなくなるのはきびしいです。この辺は素直に母艦と接続した方が良いと思います。