さくらVPSのVNCコンソールでコロンが入力できなかったので対策した話

あけましておめでとうございます。 今年もよろしくお願いいたします。

新年早々、微妙にハマったので、自分への備忘録として記事に残します。

公式ページちゃんと読めよという話かもしれませんが、初期の何も設定していない状態では、さくらVPSVNCコンソールでコロンが入力できませんでした。

初期だとこんな感じだそうです。

完全にVimmerを殺しに来ている感じがしてとても趣を感じました。

で、ちょっと調べた結果、VNCコンソールと、CentOS(今回はCentOSなので)で設定することで、MacbookのUS配列でもちゃんと入力できるようになりました。

VNCコンソールの設定

さくら公式サイトのよくある質問に設定方法が書いていました。

上記サイトにも書いていますが、設定後はshutdownが必要なので注意しましょう。

(VNCコンソール側の設定で、US配列でもJIS配列っぽく入力できるようになります。)

CentOSの設定

CentOS側の設定は以下のサイトが参考になります。

CentOS/コンソール上の英語キーボード・日本語キーボードの切替方法 - Linuxと過ごす

毎回、loadkeys usでもいいかもしれませんが、面倒なので、/etc/sysconfig/keyboardいじっておいたほうが後々楽だと思います。

個人的には、初期設定JIS配列にするの何なんだろと思いますが、きっとUS配列ユーザーだからそう思うだけでしょうね。

スマートフォンで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!

VimConf2014に参加しました

11/8(土)に株式会社ミクシィで開催されたVimConf2014に参加してきたので感想レポートを書きました。

運営側として動いた話

今回は懇親会担当として若干運営側にまわっていたので開催前から色々動いていました。

懇親会担当として以下のようなことで動いていました。

  • 収支計算表の作成
  • 懇親会で調達する料理の調整
  • 開催場所を提供いただいた方との調整
  • 当日お手伝いしてくれる方の募集
  • 微妙に会計周りも

懇親会担当役を受けた時は、会社の飲み会準備の延長くらいで余裕だろうとたかをくくっていたのですが、 当日の参加人数の多さとドタキャン率の読めなさや、開催会場の 不明確点(および私の確認不足)の多さ(宅配可能なのか、冷蔵庫は使えるのかetc)など、 あらかじめ検討しておく必要があることが多く、私の段取りの悪さもあり、 当日までずっとバタバタしていました。

正直、改善点も多く、スムースできたとはとても言いがたいですが、 色々な方にお手伝いいただいて、無事VimConfを終えることができました。

Lingrで相談にのっていただいた方、当日買い出しのお手伝いをしていただいた方、お寿司調達をしていただいた つくしさん、本当に助かりました。この場を借りて御礼申し上げます。

ありがとうございました。

開催当日

正直、懇親会準備あり、LT発表準備ありで前日から懇親会が始まるまで 気持ちの余裕が全然ありませんでした。

特に当日午前中は、あれもこれもやらなきゃとかなりテンパっていた気がします。

発表中も懇親会準備に微妙に追われており、見れなかった発表もあるため 発表内容の感想は詳細に書かれている他の参加者の皆さんにお任せして、私のLT発表の感想だけ簡単にご紹介します。 (ちなみに、発表はどれも非常に面白く勉強になるものばかりでした。皆さん大体一笑いを混ぜてくるので私も精進しなければと思いました。)

LT発表

色々ネタはあったはずなのですが、VimConf開催1ヶ月前ほどにMONSTER HUNTER 4Gという悪魔のゲームを 手にしてしまい、ここ1ヶ月ほどほとんどVim活ができていませんでした。 (ujihisaさんが当日の発表で、civ5プレイ期間はgithubのContributionsがスカスカになってしまい ヤバイという話をされていましたが、私もそれと似たような感じでした。モンハンやばい)

そこで、発表候補としていくつかあげていたうち、事前準備がほとんどいらないマクロの入門的な話をしました。

発表スライドは以下にあげています

本当はデモとかしたかったんですが、時間的な関係上無理でした。 マクロのいい例が浮かばずかなり単純な実例の紹介だけとなってしまったのが若干心残りです。

上のスライドの最後の方にあげたVimGolfの厳選マクロ練習用で、 少し高度な?例をまとめているのでそちらをご参考の上、試してみてください。

なお、完全に個人的な話(余談)になりますが、本発表はustで妻も見てくれていたそうです(一応技術系の人なので)。

ちょっと恥ずかしいですが、いい感じのコメントをもらえたので、発表が終わったあとの妻との会話の一部を載せます(妻了承済み)。

f:id:deris:20141109230035j:plain

私の発表はほどほどだったそうです。かなりの高評価ですね。

最後のアイコンが小さくて見づらいですが拡大するとこんな感じ

f:id:deris:20141109191005j:plain

このアイコンからもとても興味を持って見てくれていたことが伝わると思います。

雑多な感想

他の発表者の方の感想は、他の参加者の方が色々上げているので、雑多な感想を

  • 懇親会準備は予想以上に大変でした
  • 色々な方に手伝っていただき、無事乗り切ることができました。皆様ありがとうございます
  • 様々なVimmerの方々と交流出来て楽しすぎました
  • Lindanさんの発表で、私が作ったvim-shot-fというpluginを紹介していただきました。発表内容は図を多用していて非常にわかりやすかったです
  • haya14busaさんの発表で私の名前が出ていたような気がしますが、懇親会の調整中でちゃんと聞けなく残念でした。動画が配信されたら見れなかった方の発表はちゃんと見直す予定です
  • 名札のアイコンがわかりやすかったです(rbtnn++)
  • 懇親会でKaoriyaさんと色々お話させていただき(主に私からの質問)、非常に勉強になりました。Kaoriyaさんはあまり勉強会に参加されないと思うので、完全にVimConfならではのメリットだと思います。Kaoriyaさんありがとうございました
  • 懇親会で受付を担当していただいたデニスさん(not デリスさん)から発表の質問をしていただき色々交流でき非常に楽しかったので、ネタはなんであれ発表することは重要だと改めて感じました
  • 今回は若干運営側にまわっていたので大変ではありましたが、最終的には終始楽しめて感極まった1日でした
  • githubのvimconfリポジトリのissuesを見ればわかると思いますが、今回のVimConfでは主催のthincaさんはもちろんのこと、見えないところで様々な方がVimConf運営に協力していました。みんなで協力して開催して無事成功できたということは大変意義深いことだと思います。次につなげたいですね

終わりに

まだ、当日の余韻に浸っていますが、非常に濃い1日を過ごすことができました。

主催のthincaさん、VimConf2014運営にかかわられた皆さん、懇親会の買い出しなどのお手伝いをしていただいた皆さん、 参加者の皆さん、会場を貸していただいた株式会社ミクシィさん、皆さん本当にありがとうございました。

またどこかのVim関係の勉強会でお会いしましょう!

Happy Vim Life!

momonga.vim#6に参加しました

8/2(土)にドワンゴのセミナールーム(歌舞伎座タワー)で開催された momonga.vim#6に参加したので、感想レポートをば

0次会(PRONTOにて)

もくもく会自体は13:30からだったのですが、Vim熱が高まりすぎた数名 (主催のsupermomongaさん、thincaさん、Lindanさん、rbtnnさん、Shougoさん、私) が9〜10時くらいから、会場近くのPRONTOでティーを片手にもくもくしてました。

supermomongaさんは高まり過ぎたのか大分早起きしてしまったらしく 9時(前日の21時)に起きたため終始ウトウトしてました。

途中でたまたまお昼を食べに来た、りひにーさんと合流し一緒にランチを食べました。

流石に午前中から来ているだけあって、皆わくわく盛り上がっていました。

会場入り(ドワンゴ歌舞伎座タワーにて)

会場はドワンゴのセミナールームで、100人規模が入るらしくかなり広かったです (そもそも歌舞伎座タワーが巨大...)。

主催の江添さんがちょうどいらっしゃっていて、セミナールームに入れていただき、 会場設営を手伝ったり、もくもくしたり、rbtnnさんのmario.vimの原型を 見せてもらったりしていました。

40人規模のもくもく会を目の前に、わくわくが最高潮に達していました。

1次会(もくもく会)

もくもく会の細かい話は他の方の参加レポでも紹介されると思うので、 私はもくもく会でやったことだけレポします。

neco-rubymfをneocomplete対応した

前回のmomonga.vim同様、もくもく会のネタがなかったので、前回の続きでLingr のYo botでも 改良しようかなぁと思っていました。

で、Yo botをいじりつつ、LingrRubyVimプラグインについて話を聞いていたりしていたら、 ujihisaさんからこんなVim plugin(ujihisaさん作) があるよーと教えていただきました。

で、試そうとしたら動かず。。。 どうやらこのplugin、neocompleteの前身である neocomplcache依存で作られたもので、neocompleteには対応していませんでした。

そして、気づいたらこのpluginのneocomplete対応をするべくコード を書き始めていました。

何というyak shaving! yak shavingコワイ...

ということで対応して以下のリポジトリのmasterに直接pushしました。

neco-rubymf

ujihisaさんにコミット権を頂いたので、リポジトリはujihisaさんが作られた リポジトリにそのままコミットしています。

neocomplcacheとneocompleteで参照するパスが異なるため、 どちらにも対応する形となります。

正直、作っては見たものの自分が使うかどうかは微妙ですが、 気になる方は試してみてください。

あ、あとこれを作る際、わからないことが多々あり、neocompleteの作者であるShougoさんに 色々と質問させていただきました。(2次会に向かう電車の途中でも色々聞いてしまいました)

Shougoさん丁寧にご説明いただきありがとうございました。

もくもく会は直接Face to Faceで質問できたりするのでいいですね。

2次会(妖怪ハウスにて)

もくもく会の興奮も冷めやらぬ中、主催の江添さんがお住まいの シェアハウスである妖怪ハウスにおじゃましました。

妖怪ハウスではもくもくしたり、アイスを食べたり、江添さんに作っていただいたピザを 食べたり、仕事の辛い話を聞いていたりしました。

仕事 is つらい

仕事がつらい皆さんは、Vim pluginを書くと幸せになれると思うので皆さんどんどん書きましょう。

そんなこんなで、終電間近となり、momonga.vim#6 の興奮が冷めやらぬまま一人家路につきました。

雑多な感想

  • mario.vimすごい(rbtnnさんどこに向かってるのw)
  • Lindanさんの英語のやつ便利そう
  • basyuraさんに進捗プレッシャーを掛けるなどした
  • Shougoさんは相変わらず歌ってた
  • mittanさんに発売日前のVim scriptテクニックバイブルを見せていただいた
  • 今回は珍しく女性Vimmerがいらっしゃっていたので頑張って欲しい。女性Vimmerツチノコ並にレアなので、もっと女性Vimmerの参加者増えたらいいと思う
  • 折角テーブル単位で分かれてたんだから、もっと積極的に初対面の人ともコミュニケーションとればよかった
  • 40人でもくもく会って前代未聞じゃないの...

終わりに

主催の江添さんとsupermomongaさん、参加者の皆さん、ありがとうございました。

40人規模のもくもく会でどうなることかと思いましたが、 皆さん盛り上がっていて楽しいもくもく会を過ごすことが出来ました。

またどこかのXXX.vimでお会いしましょう。

Happy Vim Life!

momonga.vim#5に参加しました - LingrのYo bot作りました

7/26(土)に東京某所で開催されたmomonga.vim#5に参加したので、感想レポートをば

momonga.vim#6まであと数時間。間に合った...

もくもく会

はじめもくもく会のネタがなく、Vim本体のコードリーディングでもしようかなぁと考えていました。

しかし、気づいたらRubyLingr のYo bot作ってました。

まさに何を言っているのかわからねーと思うが状態でした...

LingrのYo bot

作成を進めたLingrのYo botについて簡単にご説明を

bot作成背景

最近、Lingrに入り浸っているのですが、仕事柄常時アクセスできるような環境ではなく 気づいたらLingr部屋がすごい盛り上がっていて話に乗りそびれてつらいみたいなことが 多々ありました。

そこでLingr部屋が盛り上がっていたら、最近話題?のYoを使ってYo通知するbotを作ろう と考えました。

botの機能

現在もちょこちょこ機能追加しているところですが、現状用意出来ている主要機能はざっくり以下です。

  • Lingr部屋が盛り上がってきたらYo allで通知する
  • !Yo [Yoアカウント]で、指定したYoアカウントにYo通知する
  • !Yo -pattern /パターン/で、パターンにマッチしたときに自分のYoアカウントにYo通知する
  • !Yo -waitfor [Lingr ID]で、指定したLingrユーザが発言したら自分のYoアカウントにYo通知する

ソースは以下に置いています

yo-lingrbot

食事会(2次会)

食事は近くのサイゼリヤでムシャムシャしました。

十数人いたので席がバラバラだったのがアレでしたが、 初参加の方とかと交流出来てよかったです。

初対面の方とVimの話するとき、どんな話をしたらVimレベルがわかるかそんな話を して、thincaさんが質問してもらえばいいのではという話をしてました。

momonga.vim#5.1(3次会)

主催のsupermomongaさん宅でもくもく3次会。

遅くなってしまうので最初は行く気はなかったのですが、 折角なので...と思い参加しました。

もくもく会(1次会)で作りきれなかったYo botをsupermomongaさんに色々相談しながら ちまちま更新していました。

勉強会はわからないところを既に経験されている方に色々聞けて ステップアップできるのでとても良いと思います。

一家に一匹モモンガが必要だと思いました。

雑多な感想

  • 今回も進捗プレッシャー強かった
  • 自己紹介のときに「ネタがなくて...」と言ったら、突っ込み入って完全にVimmer怖いと思った
  • Ruby力がなくて辛かった
  • Vimネタが枯渇してきている...
  • VimVim

終わりに

初参加の方とお話したり、いつもの面々と交流出来たりで良かったです。

主催のsupermomongaさん、参加者の皆さん、ありがとうございました。

本日のmomonga.vim#6に来られる方はまたよろしくお願いします!

Happy Vim Life!