vim-plugでSwiftとRustのプラグインを導入
VimにSwiftとRustのシンタックスカラーリングが欲しかったのでvim-plugでプラグインをインストールしてみた。Vimのプラグインマネージャは色々つくられているけれど、vim-plugはファイル1つで導入でき、記法もシンプルで軽いようです。
GitHub - junegunn/vim-plug: Minimalist Vim Plugin Manager
vim-plug のインストール
GitHubの公式ページに書かれているコマンドをコピペして実行する。プラグインのVimファイルをautoloadディレクトリにコピーするだけ。とても簡単です。
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Vimのコマンド
Vimの紹介
ブログに書けば忘れない気がする。VimはUnix系のOSなら大抵どこでも最初から入っている軽量なエディタ。普通のエディタと同じように使える入力モードと、コマンドを打つことで操作するコマンドモードがあって、iとEscで切り替えられる。最初は奇妙に感じるかもしれないが、慣れるとコマンドモードでの編集がとても便利なことに気づくはず。
基本コマンド
vi [file] "fileを開く view [file] "fileを読み込みモードで開く i "入力モードに (insert) Esc "コマンドモードに :w "保存 (write) :q "終了 (quit) :e [file] "fileを開く (edit) :e! "変更をすべて取り消す :q! "変更をすべて取り消して終了 :wq! "読み込みモードで開いていても書き込んで終了
[]はオプションまたは変数とする。:wと:qで:wqのようにコマンドは大体組み合わせて使える。!を付けると、強制的に実行する意味合いが付加される。また、:付きのコマンドは最後にEnterをタイプする。
:r [file] "現在の位置にfileを読み込み :![cmd] "シェルのcmdを実行
移動
Vimの強みのひとつは、コードやテキストの構造をある程度理解してくれるので、構造単位で操作ができること。後で紹介する編集コマンドを移動コマンドと組み合わせることで、その範囲のテキストを一気に編集することができる。
←↓↑→ "それぞれ左下上右に移動 hjkl "それぞれ左下上右に移動 w "次の単語に b "前の単語に % "対応する括弧に [] () {} などの対の間で移動する 0 "行頭に $ "行末に ^ "最初の空白でない文字に { "前の段落に } "次の段落に Ctrl + F "次の画面に Ctrl + B "前の画面に gg "1行目に [num]G "num行目に G "最終行に
また、コマンドは数字と組み合わせることで繰り返せる。
5j "5行下に移動 7w "7語右に移動
ここまでの機能でも、入力モードしか持たない普通のエディタよりも強力そうな気がしてくる。覚えることは多いが、一度覚えてしまえば操作はとても速くなるはず。
編集
実は入力モードへの切り替えが行われるのはiだけではない。
i "現在の位置から入力 I "行頭から入力 a "次の位置から入力 A "行末から入力 o "次の行から入力 O "前の行から入力 r "1文字を置換 (上書き) R "置換 (上書き) モードに Escでコマンドモードに戻る c[移動コマンド] "移動範囲を置換 その範囲の文字が消されて入力モードに S "行を置換 現在の行が消えて入力モードに J "次の行と現在の行を連結 ~ "大文字と小文字を変換 x "1文字削除 d[移動コマンド] "移動範囲を削除 dd "現在の行を削除
どちらのモードにいるのかわからなくなったら、とりあえずEscを押せばいい。
u "undo 1つ前の変更を取り消す 繰り返せる Ctrl + R "redo uで取り消した変更を取り消す 繰り返せる . "直前のコマンドを繰り返す
ここまでくるともう後戻りはできないのではないだろうか。普通のエディタを使っている時にも、Vimのコマンドが使いたくなってしまうかも。
ヤンク (コピー) とプット (ペースト)
コピーとペーストはヤンクとプットと呼ばれている。削除したテキストは自動的にヤンクされておりプットできる。
y[移動コマンド] "移動範囲をヤンク yy "現在の行をヤンク p "現在の位置にプット
Vimでは名前付きのバッファを使うことができ、名前を指定してヤンクやプットすることができる。コードがVimモードなので"以降がすべてコメントになってしまった。
"[name]y[移動コマンド] "移動範囲をnameバッファにヤンク "[name]p "nameバッファをプット
検索と置換
ここではregはすべて正規表現が使える。
/[reg] "正規表現regを検索 n "次の一致した検索結果に N "前の一致した検索結果に :/[reg] "regを含む行を検索 :g/[reg] "regを含むすべての行を検索 :g/[reg]/d "regを含むすべての行を削除 :s/[reg]/[to] "regをtoに置換 :s/[reg]/[to]/g "現在の行のすべてのregをtoに置換 :%s/[reg]/[to]/g "ファイル中のすべてのregをtoに置換 :noh "検索のハイライトを消す
:コマンドは行の位置や範囲の指定に使うことができる。編集コマンドと組み合わせることで、指定された行の範囲を編集できる。
:[start],[end][編集コマンド] "start行からend行までを編集 :7,$d "7行からファイル末尾までを削除 :0,.y "ファイル先頭から現在の行までをヤンク :%y "ファイル全体をヤンク
使える正規表現は以下のようなもの。
[0-9] "数字 [a-z] "文字 \+ "1回以上の繰り返し \{n} "n回の繰り返し \{n,m} "n回以上m回以下の繰り返し \s "空白文字 \t "タブ \n "改行
画面分割とタブ
Vimでも画面を分割したりタブを使ったりできる。
:sp "水平方向に分割 :vs "垂直方向に分割 Ctrl + h "左の画面に移動 Ctrl + j "下の画面に移動 Ctrl + k "上の画面に移動 Ctrl + l "右の画面に移動 :tabnew "新しいタブを開く :gt "次のタブに :gT "前のタブに
カーソルがいる時、それぞれの画面やタブは、1つのスクリーンの時と同じように操作できる。
VimとAtom
コードを書くのにずっとEclipseとVimを使ってきたのだが、最近Swiftを書いてみたくなったのをきっかけにXcodeも使いはじめた。そうしたら新しいエディタも色々と試してみたくなった。
Sublime Text、Light Table、Brackets、Atomなどなど、Vimのかわりに使ってもいいかなと思えるくらい高機能で拡張性にも優れたエディタが最近では色々と開発されているらしい。ここではAtomを使ってみることにした。AtomはGitHubがつくったエディタで基本的にC++とCoffeeScriptで書かれているらしい。コミュニティによって開発された拡張パッケージを追加していくことで、IDEのような機能も追加していくことができる。
言語のシンタックスなどはlanguage-haskellなどの名前のパッケージでだいたい提供されているようだ。最初に入れてみた言語対応以外のパッケージは以下のようなもの。
少し重いのとアップデートのたびに色々な拡張パッケージが動かなくなったりするらしいのが難点だが、綺麗だし高機能だし直感的に使えるし、vim-mode-plusを入れれば操作性もVimとそんなに変わらないので気に入った。しばらく使ってみようと思う。