読者です 読者をやめる 読者になる 読者になる

スマートフォンでVimを操作するためにやっておいたほうがいいこと

vim vim

この記事はVim Advent Calendar 2014の13日目の記事です。
12日目はokuramasafumiさんによるVimを体系的に学ぶつもりのない人のためのVim講座―Exコマンド編でした。

はじめに

なぜスマートフォンVimを操作する必要があるのか?

当たり前ですが、VimはPC用キーボードでの操作用に最適化されており 他の入力機器での操作は想定されておりません。

では、なぜそんなVimスマートフォンで操作する必要があるのか、 それには例えば以下のような理由があります。

  • VPS設定中だけどもう出かける時間だ。外でノートPCいじる時間もないし…
  • 自鯖の調子がおかしいので設定確認して再起動したい。でもあと2時間は帰れない…
  • Vimが触りたくて禁断症状がでそう。でも今満員電車の中だ…

こんなときスマートフォン(とサーバーをいじるためのSSHクライアント)が あれば解決できそうです。

しかし、スマートフォンでコンソールおよびVimを扱うのは中々 難しいことです。今回はこういう状況のためにどのように備えて おくべきかをご紹介したいと思います。

なお、Bluetoothキーボードはもちろん、両手を使えないような 状況を想定してお話します。 (満員電車の中でBluetoothキーボードはもちろん、両手は自由にならないですよね)

なぜVimなのか?

Vimmerにとっては完全に愚問ですが、Vimmer以外の方にとっても 今回想定するケースではVimを使うのが一番現実的な解となると思います。

  1. 大抵の環境(UNIX系)にVimは確実に入っている
  2. Vimならスマートフォンキーボードでもある程度の操作に耐えうる操作体系を備えている

2 については後述しますが、スマートフォンで端末に接続して文書を参照・編集したいと 思った場合は、Vimmer以外の方もVimを使うことをおすすめします。

今回話さないこと

今回話す対象とするのは、SSHでどこかの端末に接続してVimを操作する ケースに限ります。

このため、iOS用のVimアプリや、 Android用のVimアプリで の話は出てきませんのであらかじめご了承ください。

下準備

スマートフォンSSHクライアントを入れる

何はともあれSSHクライアントがなければ始まりません。 SSHクライアントは好きなアプリを使ってもらえばいいです。

私はスマートフォンiPhoneなので有料アプリのPrompt のバージョン1を使っています。

本題とは関係ないのですが、今回記事を書いている時に Promptのバージョン2が出ていることに気づきました。 スマフォアプリにしてはそこそこお高いですが、 バージョン1には大分お世話になったので お布施の意味で購入しようと思います。 なお、本記事執筆時点ではまだバージョン2を使っていないため、 バージョン2の使い勝手はまだわかりません。

他のSSHクライアントを使ったことがないので、比較はできませんが Promptは以下の点が気に入ってます。

  • 秘密鍵ファイルをアプリフォルダに突っ込んで指定するだけで公開鍵暗号方式で接続できる
  • 過去に実行したコマンドの補完がポップアップで表示される
  • (今回は関係ないですが) Bluetoothキーボードにも対応している
  • あまり落ちたりせずそこそこ安定している

上記はバージョン1の評価です。

今回はSSHクライアントの紹介記事ではないのでスクリーンショットを貼って 紹介を終わります。

f:id:deris:20141213163548p:plain

スマートフォンでのソフトウェアキーボード操作になれる

大体の人はスマートフォンでの操作に慣れていると思いますが、 スマートフォンでのキータイプに慣れていない人は以下のアプリなどで 練習を積んでおくといいかと思います。 当然ですがスマートフォンでのキータイプがおぼつかなければ、 スマートフォンでのVim操作もおぼつかないものになります。

タイピングの神様 iOS版

タイピングの神様 Android版

練習する際は、日本語入力ではなく言語をEnglishで練習しましょう。 端末操作では日本語入力速度はあまり関係ないので。

なお、片手で操作するのであれば、フリック入力がお勧めです。 なれるとqwertyのソフトウェアキーボードよりも若干早くタイプ出来ます。 (と思って試してみたけど実際トントンくらいでした… ただ、日本語入力であれば慣れるとフリック入力の方断然が早いです。 慣れている方を使えばいいかと思います。)

参考までに私のタイプ成績を載せておきます。上がフリック入力、下がqwertyです。 どちらも利き手親指のみで操作しています。 (ほとんど変わりませんね…)

f:id:deris:20141213162947p:plain

f:id:deris:20141213162954p:plain

指1つでVimを操作するための設定

さて、ここからが本題です。

と言っても、実は普通にPC用キーボードでVimを操作する時と 意識することはそこまで変わりません。

ただ、スマートフォンで操作するという性質上、より強く意識したほうがいいこと いくつかあります。 また、スマートフォンのソフトウェアキーボードの性質なども 考慮に入れる必要があります。

Vimの基礎を忠実に

最近のスマートフォンは高性能だし、ネットワークも高速なので そこまで気にしないかもしれませんが、スマートフォンでのSSH接続は、 リアルタイムにレスポンスが帰ってこず、数100ミリ秒、 場合によっては数秒レスポンスに時間がかかることがあります。

特に電波が悪いところで作業をすると、レスポンスまでの時間が 数秒単位になります。

一つ一つの操作のレスポンスが遅いと、例えば普段h, j, k, lの 連打などで移動していると、1行、1文字ごとの移動で、レスポンスを待たされ 目に見えて操作効率が落ちます。

このため、スマートフォンでは単体でのh, j, k, lは極力使わないようにし、 よりタイプ数が少なくてすむ以下のような操作を極力使うようにした方がいいです。 つまりVimの基礎を忠実にということですね。 タイプ数(端末への要求数)が少なくなれば、それだけレスポンスに待たされる時間 も減ります。

移動内容 入力キー
単語移動 w, b, e
指定文字移動 f, t
行末行頭移動 ^, $
ファイルの先頭、末尾移動 gg, G
指定行移動 [指定行の数]gg
ページ移動 <C-f><C-b>
段落移動 {, }
検索 /
単語検索 *, #, g*, g#
カウント指定 5h, 5j, 5k, 5lなど

ここら辺は、普通のVimmerなら無意識でやっていることかもしれませんが、 キーリピートを高速化して操作している方もいると思うので特に そういう方は注意をしましょう。 全然使いこなせていない方は、日頃から意識して使うようにしましょう。

このような、1キーストロークでの移動の機能がデフォルトで多く用意されているため、 スマートフォンでの編集は、他のエディタよりもVimの方が優位性が あると思います。

極力Ctrl, Shiftなどを使わないようにする

スマートフォンでタイプするとわかると思いますが、 スマートフォンのソフトウェアキーボードはPC用キーボードと 比較して記号が非常に打ちづらいです。 また、SSHクライアント端末では用意されていることもありますが、 スマートフォンのデフォルトのソフトウェアキーボードはCtrlが ありません。

上記のことを考慮し、極力、記号、Ctrlを使用しないような キーマッピングをしておくことをおすすめします。

例えば、上記で上げた行末行頭移動の^, $は記号ですし、 ページ前方後方移動の<C-f>, <C-b>Ctrlを使うので 記号、Ctrlを使わないキーにキーマッピングしておくといいでしょう。

また、よく使うコマンドも合わせてキーマッピングしておくと いいでしょう。

下記設定例は、よく使うコマンド(ファイル保存、ウィンドウを閉じる) 記号、Ctrlを使う移動をキーマッピングしています。 (<Space>はソフトウェアキーボードでもローマ字と合わせて最初から 表示されている貴重なキーなのでprefixとして使うことをおすすめします。 なお、PC用キーボードでも同様に押しやすかったりします。)

" ファイル保存
nnoremap <Space>w  :<C-u>w<CR>
" ウィンドウを閉じる
nnoremap <Space>q  :<C-u>q<CR>

" 行頭、行末移動
nnoremap <Space>h  ^
vnoremap <Space>h  ^
nnoremap <Space>l  $
vnoremap <Space>l  $

" ページ前方、後方移動
nnoremap <Space>j  <C-f>
vnoremap <Space>j  <C-f>
nnoremap <Space>k  <C-b>
vnoremap <Space>k  <C-b>

また、submodeプラグインを使って、 移動専用のモードを用意するのもお勧めです。

submodeは、Vimの normalモードやinsertモードのようなモードを、擬似的に 作り、そのモードでだけ使用できるキーマッピングを設定する事ができます。

以下の設定では、submodeを使って、 縦方向移動効率化モードを作っています。

" 縦移動の効率化(要submode pluginインストール)
call submode#enter_with('ex-move', 'nv', '', '<Space><Space>', '<Nop>')
call submode#leave_with('ex-move', 'nv', '', '<Space>')
call submode#map('ex-move', 'nv', '', 'j', '<C-f>zz')
call submode#map('ex-move', 'nv', '', 'k', '<C-b>zz')
call submode#map('ex-move', 'nv', '', 'n', '5jzz')
call submode#map('ex-move', 'nv', '', 'm', '5kzz')
call submode#map('ex-move', 'nv', '', 'l', '}zz')
call submode#map('ex-move', 'nv', '', 'h', '{zz')

<Space>を2回タイプすることにより、縦方向移動効率化モードに入ります。 縦方向移動効率化モードに入っている間は、j, kでページ前後方向スクロール、 n, m5j, 5kl, hで段落前後移動ができます。 移動操作が終わったら、<Space>を1回タイプすることでモードを抜けます。

それぞれ1キーストロークで目的の操作を可能にしており 押しづらいキーのタイプ数を大分抑えられることがわかると思います。

上記設定はPC用キーボードでも有用ですが、入力効率が落ちるスマートフォンでは 更に有用になります。

このように、よく使いそうだけどタイプしづらいキーはキーマッピングしておく とスマートフォンでの操作がグッとやりやすくなります。

Ctrlを極力使わないような設定が簡単にかけることも、 スマートフォンでの編集が、他のエディタよりもVimの方が 優位性がある理由の一つとなります。

おまけ

自分は常用していないので、詳しくご紹介出来ないのですが、 vim-easymotionというプラグインを入れると 移動時のキータイプ数がかなり減らせそうなので、スマートフォンでのVim操作にあっている かも知れません。

vim-easymotionについては、現メンテナである haya14busaさんの記事が詳しいのでご紹介までにリンクを張っておきます

Vim-EasyMotionでカーソル移動を爆速にして生産性をもっと向上させる

まとめ

以上が、スマートフォンVimを操作するためにやっておいたほうがいいことです。

何かあった時のために、スマートフォンからVimをさわれるよう普段から準備を してはいかがでしょうか?

それではVim Advent Calendar 2014の13日目の記事を終わります。

Happy Vim Life!