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

paiza開発日誌

paiza(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

凄腕エンジニアが選んだAtom・Vim・Emacsの超便利プラグインと設定34選

f:id:paiza:20160520145831p:plain
Picture by ITエンジニアを目指す女子高生たちの学園ライフ4コマ漫画『ぱいじょ!』
f:id:paiza:20140916135428p:plainこんにちは、谷口です。

皆さんは普段どんなエディタを使っていますか?「今のエディタに不満がある」「乗り換えを考えている」という方もいるかと思います。

弊社でpaizaを作っている凄腕エンジニアたちに聞いたところ、Atom派とVim派とEmacsがいたので、各エディタを使うメリット・デメリット、また実際に開発で使っていて便利なプラグインや設定の小技などをみっちり聞いてきました。

エディタの設定や乗り換えの参考にしていただければと思います。

■その前にpaizaを作っているエンジニアが使うエディタの割合

f:id:paiza:20160520145742p:plain
Picture by ITエンジニアを目指す女子高生たちの学園ライフ4コマ漫画『ぱいじょ!』
Atomユーザー:2名
Vimユーザー:2名
Emacsユーザー:1名

もちろんみんな一つのエディタ単体で全てを済ませているわけではないので、いろいろ使ってる人もいました。あとintellijユーザーとSublime Textユーザーもいました。

Atom

f:id:paiza:20160519180233p:plain
Atomは2014年からGitHubが公開しているオープンソースのWebエンジニア向けエディタです。

WindowsMacLinux環境で無料で使えて、拡張性が高く、テーマやパッケージをインストールすることでどんどん便利にカスタマイズしていくことができます。

操作性はSublime Textとかなり似ています。そしてテーマやパッケージをインストールすることで、外見や機能をSublime Textに近づけることができます。弊社でもSublime Textユーザーだったエンジニアが、気付いたらAtomに浮気していた…という感じです。(下記でSublime Textからの移行に適したパッケージもご紹介しています)

◆弊社のAtomユーザーに聞いたAtomを使うメリット

・無料なところ
Sublime Textを一瞬使ってたけど、「買ってね」ダイアログが思ったよりストレスだった……。

・shift-cmd-pで起動するコマンドパレットがめっちゃ便利
キーバインド覚えられない。

・かゆいところに手が届くプラグインがたくさんある!
ブラウザがベースになっているエディタなので、Webエンジニアであればプラグインの作成が容易→プラグインを作成出来る人が多ければ良いプラグインも充実しやすいという好循環です。

・素の状態でterminalからファイルを開いたり、プロジェクトを開いたりできる
後で紹介しますが、terminalを組み込めるプラグインもあります。

Rubyが書きやすい

・意外とクラッシュしない

GitHub謹製な安心感がある

◆弊社のAtomユーザーに聞いたAtomを使うデメリット

全文検索が遅い

・新規作成したファイルが検索候補に上がるまでにタイムラグがある

プラグインの管理画面の起動が遅い……

Atomの便利なプラグインなど

Rubocop Auto Correct

atom.io
rubocopのauto-correctをコマンド一つで実行できるようになります。個人的には最も重宝しているパッケージです!!

terminal-plus

atom.io
Atom上でterminalを開くことができます。

ruby-block

atom.io
選択した単語をハイライトしてくれます。Rubyを書いていると何かとたくさんのendが出てきますが、どこと対応しているのかハイライトしてくれて便利です。

Sublime Style Column Selection

atom.io
Sublime Textから移行したユーザー向けのパッケージです。altキーを押しながらマウスで範囲選択をすると、矩形選択ができます。

Monokai

atom.io
Sublime Textから移行したユーザー向けのThemesです。Sublime Text標準のsyntaxカラーAtomで再現できます。

Sort Lines

atom.io
テキストのソートができます。ソート後に重複した行を削除したりもできます。自分がかつてSublime TextやSakura Editorを使っていた頃に重宝していた機能なので、Atomに移行したあと真っ先に入れました。

Split Diff

atom.io
2ファイル間の差分を表示してくれます。WinMergeを多用していた人は、これで少し幸せになれるかも……。

local-history

atom.io
エディタ上の編集履歴を取っておいてくれます。commit前にクラッシュしたら目も当てられないので、保険として入れています。

sync-settings

atom.io
GIST経由で設定を共有できます。自宅と職場で同期するために使っています。

project-manager

atom.io
開発するプロジェクトの切り替えに使っています。

Vim

f:id:paiza:20160519180543p:plain
VimUNIX標準エディタviの派生エディタです。

CUIベースなので基本的にキーボードだけで全ての操作をすることができ、高機能で軽くて動作も早いため、91年の初公開から今なお多くのエンジニアに愛されています。

弊社ではSublime Text派だったエンジニアがAtomにすぐ乗り換えたのに対し、Vim派は「え、Vimでいいし……いやVimがいいし……」という感じでした。

welcome home : vim online

◆弊社のVimユーザーに聞いたVimを使うメリット

ホームポジションを崩さなくていい
自分は面倒くさがりなので、キーボードとマウスやトラックパッドを行き来する回数を極力減らしたいという理由でVimを使っています。thinkpadキーボードのトラックポイントVimがあれば腕を移動しなくていいのでVimを使うようになりました。

・(多分)プログラミングに強くなれる(ような気がする)
Vimはちょっとしたコマンドの組み合わせて様々なテキスト編集ができるので、最終的なテキスト編集結果が同じ場合でもいろいろな編集方法があり、考えながら編集することになる(慣れると無意識的にできるようになる)ので、プログラミングに通ずる所が多い→プログラミングに強くなれる気がします。

・設定がポータブル
他のエディタもそうかもしれないですが、.vimrcとか.gvimrcという設定ファイルがあれば大体同じようなエディタ環境ができあがります。

巷ではこれらの設定ファイルをGitHubとかでdotfilesとして管理するのが流行っているようです。有名な開発者が使っている設定などもGitHubに転がっていることが多いので、それをベースに使い始めるのも有用です。

・軽い!!
もちろんプラグインを入れまくれば重くなりますが…。

・歴史が長いのでプラグインが多い
他のエディタのプラグインを移植してくれる人もたくさんいるので、いろいろな機能を簡単に拡張することができます。

・設定の自由度が高い
後から詳しく説明しますが、インデントやタブ設定などなど、プラグインなしでも自分で結構いろいろ自由に設定することができます。

◆弊社のVimユーザーに聞いたVimを使うデメリット

・ある程度コマンドを覚えないと使えない
Vimはマウスでぽちぽちできないし、ありがちなショートカットも割り当てられていません。保存がctrl+sでは無くコマンドで:wだったりするので、慣れるまでは大変かもしれないです。

プラグインや設定などでマウス対応をさせることも可能ですが、カーソル移動とかスクロールとかは基本キーボードでするので……。カーソル移動ではhjklを使います。矢印キーも使えるのですが、VimユーザーやVimに関する記事等はhjklで説明することがほとんどなので、最初はちょっと戸惑うかもしれません。

・他の人が触れない
弊社はVimユーザーじゃない人の方が多いので、自分のマシンでコードレビューをしてもらうような場合はVimではなく他のGUIエディタで見せる必要があります。(レビュアーに見せて操作してもらうような場合も多いのですが、コマンド操作に慣れてないといじれないので……)

・なんとなく気持ち悪い……?
Vimを触ってみて挫折した人とか、Vimがトラウマになっている人も多いと思いますが、そういう人たちからすると、Vimイコールわけわかんなくて使いにくいエディタ」という認識になっていると思うので……何というか気持ち悪がられるというか引かれるような気がします……。

Vimの便利なプラグインなど

unite

github.com
ファイラー兼ランチャー的なプラグインです。各種ファイル操作(検索やファイルの使用履歴、お気に入りフォルダの確認、開いているタブの移動などなど…)を、このプラグインがラッピングしてくれることで、統一的なインタフェースで操作できるようになります。

このプラグインのデフォルトでできることも多いですがが、デフォルトで提供されていないものは、さらに別のプラグインを取得して活用します。

fugitive

github.com
Vim上からGitを操作できるプラグインです。

lightline

github.com
ステータス行をいい感じに表示してくれるプラグインです。

neocomplete

github.com
コード補完をしてくれます。

NeoBundle

github.com
Vimプラグインを管理してくれるプラグインです。(現在は新しく開発が進んでいるDeinが推奨されているようです。)

vim-gitgutter

github.com
Gitの差分をVim上に表示してくれます。

vim-rails

github.com
Railsプロジェクト用プラグインです。Rails向けの便利なコマンドが使えるようになります。

Vimの便利な設定・小技など

◇ファイルタイプごとの設定

VimPythonを書いてますが、こんな設定をしています。

filetype on
autocmd FileType python setl autoindent textwidth=99                         
autocmd FileType python setl smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
autocmd FileType python setl expandtab tabstop=8 shiftwidth=4 softtabstop=4

一行ずつ解説していきます。

・行幅

autocmd FileType python setl autoindent textwidth=99                         

自動インデントをオンにして、1行の幅を99文字までに制限する設定です。コードを横長にしすぎないための対策です。


・インデント

autocmd FileType python setl smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class                         

"smartindent"(インデントをいい感じにしてくれる機能)をオンにしています。

この際、キーワードとなる"cinwords"を設定しています。デフォルトの場合は"if,else,while,do,for,switch" だけなので、自分はPython用に"elif"とか"def"とかを加えたものに変更しています。設定する際は自分のよく使う言語に合わせて変更してください。


・タブ設定

autocmd FileType python setl expandtab tabstop=8 shiftwidth=4 softtabstop=4

"expandtab"は、タブが半角スペースとして入力されるように変更するものです。"tabstop"では、タブを含むファイルを開いた場合の表示文字幅を設定しています。(Python2とかだと8文字認識されるために8にしています)

"shiftwidth=4"は、自動インデント時の設定です。

"softtabstop"は、タブ入力した際、スペース4文字となるように変更する設定です。


もちろん言語ごとに補完などもしてくれる高機能なプラグインもあるので、それは必要に応じて適宜導入すればいいかと思いますが、単純なインデント等は、特に外部のプラグインとかに頼らなくてもこういった設定をするだけでほとんどの言語に対応することができます。

上記はPythonに適した設定例ですが、"cinwords"や"softtabstop"などを調整するだけで、すぐに他の言語でも何となく書ける状態にすることができます。


・横長コード対策

if exists('&colorcolumn')
    set colorcolumn=+1
endif

これを設定しておくと、"textwidth"に設定した値+1の行に、縦に目印みたいなのを出すことができます。("textwidth"は上記で出てきましたが横長コード対策の制限です)


・スクロール

set scrolloff=10

スクロールする位置の調整をすることができます。


・ カーソル行

set cursorline

カーソルのある行が表示されます。(個人的にはあまり好きじゃないのでオフしてますが…)


・ 改行やタブの置換

set list
set listchar=eol:↓,tab:>>-,extends:»

改行やタブを好きな文字に置き換えることができます。"extends"は、ウィンドウの幅が狭くて右に省略された文字がある場合に表示されます。

Vim操作上の小技

・暗号化

:X

ファイルを開いて↑を入力すると、パスワードの入力画面が出てきます。ここでパスワードを入力すると、そのファイルは暗号化されて、Vimで開く度にパスワードを聞かれるように設定されます。


・暗号化のアルゴリズム指定

set cryptmethod=blowfish2

↑さらにプラスで暗号化のアルゴリズムを指定することも可能です。デフォルトでは、zip・blowfish・blowfish2を指定することができます。


・よく使う便利な矩形選択
ctrl+v→hjklで移動
これで矩形選択をすることができます。

例えば
ctrl+v → k押して縦長に選択 → Iでインサートモード → スペース4入れてインデント調整 → esc
で、選択した範囲内の各行に同じ内容を挿入することができます。挿入とか削除とかコピーとかしたいときに便利です。

Emacs

f:id:paiza:20160520144300p:plain
Emacs高機能でカスタマイズ性の高いテキストエディタとして、Unix系の開発者を中心に普及しました。文字入力が一元化されることや外部プログラムとの連携が得意といった特徴があり、強力な拡張言語であるEmacs Lispを使うことで様々な機能を追加することができます。

Vim(vi)とEmacsは伝統的なエディタ戦争における対抗勢力として位置付けられていると思いますが、現在弊社でEmacsを使っているのは4月から入社した新卒エンジニア一人だけです。先輩たちに負けず大事にしてあげてほしい…(?)。

GNU Emacs For Mac OS X

◆弊社のEmacsユーザーに聞いたEmacsを使うメリット

・独特のキーバインドに中毒性がある

・terminalからno windowで使える!

・どこまでも自由にカスタマイズできる!!

◆弊社のEmacsユーザーに聞いたEmacsを使うデメリット

・Controlキーを乱用するので左の小指が痛くなる……

Emacsの便利なプラグインなど

helm:

EmacsWiki: Helm

補完候補の表示や選択のインタフェース改善のために入れています。

migemo

EmacsWiki: Migemo

日本語テキストをローマ字で検索することができます。

multi-term

EmacsWiki: Multi Term

Emacs上でshell実行をするために入れています。

neotree

EmacsWiki: Neo Tree

フォルダをツリー表示させることができます。

wanderlust

EmacsWiki: Wander Lust

imap対応のメールクライアントです。

flymake, flycheck:

EmacsWiki: Fly Make

EmacsWiki: Flycheck

この2つはリアルタイムで動的に文法エラーチェックをしてくれます。

Cask

github.com
Caskはシンプルで便利なパッケージ管理ツールです。

■まとめ

エンジニアにとって、エディタは毎日長い時間を一緒に過ごす恋人のようなものだと思います(※ただしもっとよさそうなのを見つけるとすぐに浮気する)

「そろそろエディタ乗り換えたいな」「どのエディタがどういいのかいまいちわからない」という方が、自分に合ったエディタを見つけ、カスタマイズをするための参考になればと思います。

Atom
welcome home : vim online
GNU Emacs For Mac OS X

最初に出てきた画像のWeb漫画はこちら
paiza.jp

■paizaについて

f:id:paiza:20150730172136p:plain
paizaでは、プログラミングスキルチェック問題(9言語に対応)を多数ご用意いたしております。上記ランキングにあるような多数の言語に対応しておりますので、「プログラミング問題を解いてみたい」「自分のスキルを試してみたい」という方にもピッタリです!

paizaでプログラミング問題を解くと、結果によりS・A・B・C・D・Eの6段階で自分のスキルのランクが分かります。問題はレベルごとに分かれており、初心者から上級者の方まで挑戦していただけますので、自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください!!

プログラミング問題による学習コンテンツ(paiza Learning)もございますので、「まったくのプログラミング未経験者なのでプログラミング学習から始めたいな」という方もぜひご利用ください。

さらに、paizaが運営する無料オンラインプログラミング実行環境サービス「paiza.IO (パイザ・アイオー)では、多数の言語におけるプログラミングが面倒な環境構築なしに無料でできますのでぜひご利用ください!




paizaではITエンジニアとしてのスキルレベル測定(9言語に対応)や、プログラミング問題による学習コンテンツ(paiza Learning)を提供(こちらは21言語に対応)しています。テストの結果によりS,A,B,C,D,Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編