皆さん初めまして。今年の4月からシナプスにジョインしました、丸野 公輝と申します。
前職ではITツールの営業をしておりまして、転職を機にシステムエンジニアに転向しました。
転職してから日々新しいことを勉強していますが、(社内であんまり使われていないにも関わらず) Vimにドはまりし、今日まで使い続けて来ました。
そこで、今回はこれまでに理解したVimの魅力、おすすめのカスタマイズ、おすすめのプラグインについてご紹介させていただきます。
分かり始めたVimの魅力
今更ですが、皆さんはVimを使ってますか?
すでに使いこなしているかたは、是非とも最初に使った時のことを思い出していただきたいのですが、
- エディターなのに、なぜか文字が入力されない(起動時はノーマルモード)
- エディターなのに、保存の仕方も終了方法も分からない(StackOverflowでもこんな記事が出てました) stackoverflow.blog
:qa
で終われると思ったのに... 「バッファ」ってなに?
という感じで、ずいぶんと面倒なエディターだと思ったのではないでしょうか?
ただ、Vimに慣れていくと、だんだんとその素晴らしさが見えてきます。
- 「クォーテーションの中の文字を編集する(
ci'
)」や、「カーソル位置より前方にあるxの文字までを削除する(dFx
)」といった風に、思考のスピードで編集できるようになる。 www.kadokawa.co.jp - バッファやレジスタ、アンドゥツリーなど、裏側の仕組みを理解すればするほどできることが増えていく
- いくらでもカスタマイズできるし、便利なプラグインがたくさん出回っている
- ターミナルですべての作業を完結できる
.
コマンド(ノーマルモード)や;
コマンド(ノーマルモードでの移動)、@:
コマンド(Exコマンド)、@
マクロといった繰り返し同じ作業を行うための機能が充実している
といった感じで、慣れれば慣れるほど編集効率が向上し、だんだん手放せなくなってくるエディターだと考えています。
Vimのおすすめ設定について
日本語入力を快適にする設定
さて、そんな魅力的なVimですが、デフォルトではどうしても日本語入力が面倒になります。 ノーマルモードでのコマンドのほとんどが単体のキー入力であるため、日本語IMのままでは操作が出来ないからです。
この問題にある程度対処するための設定を2つご紹介させていただきます。
一つはこちらの設定になります。
nnoremap あ a nnoremap い i nnoremap お o if has('win32') nnoremap A A nnoremap I I endif
こちらの設定を行うと、日本語入力モードのままでも、そのままEnterを押せば挿入モードに移行できるようになります。
また、デフォルトのWindows環境では、日本語IMでアルファベットを入力すると全角文字になるので、A
(行末に移動して挿入モード)とI
(行頭に移動して挿入モード)も利用できます。
ですので、if has('OS名') endif
という構文を使って、Windows環境でのみ有効になるように設定にしてあります。
二つ目はこちらの設定です。
if has('mac') inoremap <ESC> <ESC>:call ImInActivate()<CR> function! ImInActivate() call system("im-select 'com.apple.keylayout.ABC'") endfunction endif
こちらの設定は、Mac限定かつim-selectという、ターミナル上でIMを切り替えるためのツールをインストールしておく必要がありますのでご注意ください。
ここではfunction! endfunction
という、関数を新たに設定できる構文を使っています。
その中でcall system()
のコマンドを設定し、「挿入モードでEscキーを押したときにIMを切り替えるシェルコマンドを実行する」という機能を実装しています。
Windowsでもim-selectを利用可能ですが、GvimであればデフォルトでIMが切り替わる機能が実装されているので、こちらの利用をおすすめします。
バッファ操作を快適にする設定
初心者が理解しにくいVim機能の一つに、「バッファ」というものがあります。
普通のエディターでは、ウィンドウやタブを使って複数のファイルを開けるようになっていますが、Vimではこれらに加えてバッファという機能が存在しています。
バッファとは、言ってみれば「表に出てこないタブ」みたいなもので、なんだか使いづらそうに思えますが、Vimではこちらのほうが好まれているので、使いやすいようにしておくと幸せになれます。
set hidden nnoremap <C-j> :bprev<CR> nnoremap <C-k> :bnext<CR>
こちらの設定を解説させていただくと、
set hidden
を設定しておくと、現在開いているバッファが編集中でも切替ができるようになります。
nnoremap <C-j> :bprev<CR>
という設定は、ノーマルモードでCtrl+j
を押した時に、:bprev
というコマンドを実行する設定です。
:bprev
と:bnext
は、どちらもバッファを移動するコマンドで、この二つを設定しておけばサクサクとバッファを切替ながら複数ファイルを編集できるようになります。
おすすめのVimプラグインについて
Vimの一つの魅力は、世界中の人がVimの便利機能を作成していて、それをプラグインという形で利用できるという点にあります。
ここでは私が最近よく利用しているプラグインを2つ紹介させていただきます。
NERDTree
Visual Studio Codeにあるような、ディレクトリツリーを開けるようになるプラグインです。
:e
コマンドでもファイルを開くことができますが、ディレクトリ構成を見ながらファイル編集を行えるので、開発に非常に役立つ機能になります。
ツリー上でファイルを選択して、Enterキーを押すと、新しいバッファでファイルを開くことができ、mキーを押すことでファイルの削除や追加、移動などの基本的な操作が行えるようになっています。
私は以下のような設定を作成して、スペースキーを二回押すことで開閉できるように設定しています。
nnoremap <Space><Space> :NERDTreeToggle<CR>
Undotree
ツリー上になっているアンドゥ履歴を簡単に操作できるプラグインです。
Vimでは、アンドゥ履歴がツリー上に記録されるようになっており、さらに別ファイルで保存できるようになっています。
Undotreeはこのアンドゥ履歴を分かりやすく操作できるようになるプラグインになります。
こちらもツリー上で戻りたい時点を選択して、Enterキーを押すだけで編集をもとに戻すことができます。
ここまで細かくアンドゥ履歴を管理できるエディターはなかなか存在しないので、これだけでもVimを活用する価値はあるかと思います。
" undofileの機能を有効化 set undofile " undofileを保存するディレクトリを指定 set undodir=/path/to/save/undofile nnoremap <F5> :UndotreeToggle<CR>
Coc.nvim
すごく簡単に説明すると、Visual Studio Codeを含む多くのIDEのように、イイ感じにコード補完をしてくれるプラグインです。
Visual Studio Codeで言語のプラグインをインストールするような感覚で、CocInstall 対象の拡張機能名
というExコマンドを実行することでLanguage Serverをインストールすることができます。
例えば、Coc.nvimでC#を利用するには、Coc.nvimをインストールした後に:CocInstall coc-omnisharp
のコマンドを実行すると利用できるようになります。
こちらのプラグインを導入すると、Vimは単なるエディターではなく「ターミナル上でも起動する超軽量IDE」になるのでおすすめです。
ほかの言語の拡張機能は、npmの公式ページから探してみてください。
おわりに
ということで、まだまだVimを使いこなせているわけではないですが、おすすめ設定などを紹介させていただきました。
これからVimを使おうとしている方や、Vimをもっと使いこなしていきたい!と思っている方に響いたら良いなと思っています。
皆さんの快適Vimライフを応援します!