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

$ service ssh0 start

from everything import *

日常に溶け込むVim【自分のPCで使用しているソフトウェア,設定の紹介 #10】

2016環境紹介

昨日は更新できなかったため,1日ぶりとなります。

自分のPCで使用しているソフトウェア,設定の紹介

ということで,Vimについて何回かに分けてまとめていければと思います。

Vim との出会い

僕とVimの出会いの話の前に,それまで僕が使っていたエディタを紹介しておきます。

Windowsを使っていたときは普通にメモ帳かワードパッドを使って文章を作成していました。 プログラミング自体まだ何も知らなかったので,「Windowsでプログラミングするときに使うべきエディタ」みたいな相談を後輩にされて困りました。

それからUbuntuを使うようになって,メモ帳の代わりとしてデフォルトのgeditを使うようになりました。 文章作成は相変わらずLibreOfficeのWriterで。

それから,画面輝度の設定など,設定ファイルを色々いじる必要が出てきたときに,ネットの情報で

vim /etc/hoge

みたいな記述を多く見かけるようになったために,vimをインストールし(デフォルトでインストールされていないなんて!(viはある)),少しずつ基本的な使い方を覚えていきました。

Vim の第一印象

「めんどくさいやつ」

です。「モード」という概念。入力したい文字を打てないもどかしさ。

しかし,vimtutorをやって,基本的な考えを学んでからの印象は

「効率厨」

みたいな印象に変わりました。

Vim のいいところが分かり始める

特にこの印象が強くなったのは,ノーマルモードでのコマンドの扱いについて学んだ時です。

この動画が大変参考になったので,ここにもリンクを張っておきます。

www.youtube.com

ここで紹介されているように,Vimユニークな点は,編集している文字列をテキストオブジェクトとして認識し,任意の操作とそれらの単位に対する移動を組み合わせて編集を行うという設計にあります。

この設計のおかげで,新たに機能を追加したいときに,ユーザーは「操作」と「テキストオブジェクト」それぞれ個別に拡張することによって,爆発的に機能を拡張することができます。

また,動画の15:20あたりで象徴的にまとめられているように,Vimではコマンド(オペレーション)と移動(テキストオブジェクト,f,t,行数,/での検索)を組み合わせて操作を行うので,その組み合わせ数で言えば膨大な数の操作を行うことができることになります。

もしこのような操作を他の(モード編集でない)エディタで実装しようと思ったら,例えばemacsで実装されているように,Ctrl,Alt,Shiftなどとa,b,cなどを組み合わせる必要があります。一般的なキーボードにある文字数は数が限られているがゆえに,当然キーバインドで定義出来るコマンドの数も制限があります。

一方でVimであれば(多くない)コマンドと,(そこまで多くない)移動コマンドを組み合わせて操作を適用するため,キーを押しながら他のキーを押す,という操作自体は少なくなっています。 それに,構造が既定されているために,それぞれで覚えるべきことの量が減って,その分効果的にこれらのコマンドを使いこなせるようになります。

こうなってくると,もう他のエディタには戻れません。 IDEなど,ある言語に特化したアプリケーションと比べると,部分的に劣る部分があると思いますが,その場合にはVimで似た機能を提供しているプラグインを探して感謝して使うか,自分でプラグインを書くか,あるいはそのIDEVimモードにするプラグイン的なものが実装されていれば,IDEVimモードを使うというのも手でしょう(Atomみたいな)。

別にコンソール版のVimにこだわっている,というわけでもないのですが(とはいえなんだかんだ便利),gvimを使うのもいいと思いますし,IDEの機能でVimっぽくなってればそれでもいいいと思います。

大事なのは拡張性と記憶コストの低さです。

Vim ともっと仲良くなりたい。

と,ここまで語ってみましたが,実際のところ自分で書いたプラグインというのもなく,まだまだヘルプを読み切れていない状態なので,Vimの真髄,,知らない部分がまだまだあるかと思います。

これからも永く付き合っていくことになるであろうVimと,もっと仲良くなって,生産的な人間になりたいですね。

(まぁ,厳密には今使ってるのはNeoVimですが。)

まとめ

Vim都の出会い,いいところなど自分なりに簡単にまとめてみました。

次回はVimmerの嗜みvimrcについてまとめてみたいと思います。

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