この文章は、http://yannesposito.com/Scratch/en/blog/Vim-as-IDE/ で掲載されている﹁Vim as IDE﹂の翻訳文です。
文内の全てはの筆者による物であり、訳文の内容については私による物となります。意訳が若干入っています。間違い等あればご連絡下さい。
tl;dr: 如何に Vim を効率の良い IDE として使いこなすか
Learn Vim Progressively (訳者注: 日本語訳)では Vim が如何にテキスト編集に優れ、かつファイルを操縦できる偉大なテキストエディタであるかについて示した。この短い記事では、私が如何にして Vim を IDE として使っているかについて見る事が出来るだろう。そう、主に幾つかの素晴らしいプラグインを使う事により。
何よりも前に、読みやすくコントラストの低いカラースキームを使って目を守るべきだ。
その為に私は solarized dark を使っている(訳者注: mattn も使っています)。これを追加するには
もし何か変になったら
最後のコミット以降の変更行が見れる。
4.3. 基本的な自動補完:
Vim 基本的な自動補完システムを備えている。ショートカットは挿入モードで
私はリーダー(訳者注: キープレフィックス) に
私の仕事上での主言語のは Clojure だ。そして私の現在の vim 環境はまったくもって良い。
Vim as IDE
![Main image](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/vim_spock.jpg)
1. Vim Plugin Manager
Vim のプラグインは たくさん プラグインがある。それらを管理するのに私はvim-plug
を使っている。
インストール方法:
mkdir -p ~/.vim/autoload
curl -fLo ~/.vim/autoload/plug.v
im \
https://raw.githubu
sercontent.com/junegunn/vim-plug
/master/plug.vim
☞ 私の .vimrc
には2つの役割がある。まず一つが私のプラグインの全てが含まれている部分。そして二つ目がそれらのプラグインの為に行っている個人的な設定が含まれている部分。以下のコードではそれを ...
で分けて記載する。
2. 生き残る
2.1. カラースキーム
![Solarized theme](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/solarized.png)
~/.vi
mrc
に次の様に追加する必要がある:
call plug#begin('~/.vim/plugged')
Plug 'altercation/vim-colors-sol
arized'
call plug#end()
" -- solarized personal conf
set background=dark
try
colorscheme solarized
catch
endtry
2.2. 最低限のエチケット
行の後ろに空白を見かけたら削除しているはずだ。![Trim whitespaces](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/trim.gif)
Plug 'bronson/vim-trailing-white
space'
:FixWhitespace
で余計な空白を掃除出来る。
そしてもう一つ、80カラム問題。
if (exists('+colorcolumn'))
set colorcolumn=80
highlight ColorColumn ctermb
g=9
endif
![80th column](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/80thcolumn.png)
3. File Management
プログラミングにとって密かに重要なスキル、それはプロジェクトの中からファイルを探し、そして見つけ出す能力だ。 巷ではNERDTree
の様な物が好まれて使われている。これは古典的な左カラムにプロジェクトのファイルをツリー表示する。私はこれを使うのは辞めてしまった し、君たちもそのはずだ。
私は unite に移行した。左カラムは無くなっている。ファイルを見つけるのが速い。だいたい OS X の Spotlight の様に動作する。
まず ag
(the silver search) をインストールする。もし ack
か ag
のどちも知らなかったのであれば、君の人生はとても良くなるはずだ。これは単純だがとても本質的なツールだ。言うなればホルモン注射をした grep
だ。
" Unite
" depend on vimproc
" ------------- VERY IMPORTANT
------------
" you have to go to .vim/plugi
n/vimproc.vim and do a ./make
" ----------------------------
-------------
Plug 'Shougo/vimproc.vim'
Plug 'Shougo/unite.vim'
...
let g:unite_source_history_yank_
enable = 1
try
let g:unite_source_rec_async_c
ommand='ag --nocolor --nogroup -
g ""'
call unite#filters#matcher_def
ault#use(['matcher_fuzzy'])
catch
endtry
" search a file in the filetree
nnoremap <space><space> :split<cr
> :<C-u>Unite -start-insert file
_rec/async<cr>
" reset not it is <C-l> normally
:nnoremap <space>r <Plug>(unite_
restart)
スペースを2回タイプする。ファイルの一覧が現れる。探したいファイルの文字をいくらかタイプしてみよう。選んでリターンをタイプするとビンゴしたファイルが横分割で開くはずだ。
![Unite example](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/unite.gif)
<space>r
をタイプして unite のキャッシュをリセットしよう。
これで簡単にかつ効率的にファイルを名前で検索出来る様になったはずだ。
多くのファイルからテキストを探す。それには ag
だ:
Plug 'rking/ag.vim'
...
" --- type ° to search the word
in all files in the current dir
nmap ° :Ag <c-r>=expand("<cword>
")<cr><cr>
nnoremap <space>/ :Ag
:Ag
の後に空白を入れるのを忘れずに。
訳者注: ° は azerty キーボード配列だと装飾キーと1つのキーで押せる物です。日本語キーボードでは別の物で代用すべきです。
この2つはプロジェクトで最もパワフルに働くショートカットだ。°
は私の azerty
キーボードだととてもいい位置にある。*
の近くのキーを使うべきだ。
では °
はどの様に動作するのか?カーソルの下の文字列を読み取り、全てのファイルから検索する。関数がどこで使われているか探すのにとても便利だ。
<space>/
をタイプすると、続く文字列で検索。プロジェクト内の全てのファイルから、そのテキストが現れる部分を検索する。
これでファイル間の操縦がとても簡単に出来る様になったはずだ。
4. 言語にとらわれないプラグイン
4.1. Git
![Show modified lines](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/git-gutter.png)
Plug 'airblade/vim-gitgutter'
And the “defacto” git plugin:
Plug 'tpope/vim-fugitive'
最後のコミットからくわえられた変更は :Gread
でリセット出来る。:Gwrite
で変更が登録出来る。
![Reset changes](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/Gread.gif)
4.2. Align things
Plug 'junegunn/vim-easy-align'
...
" Easy align interactive
vnoremap <silent> <Enter> :EasyA
lign<cr>
選んで Return
、そして space
だ。Return
を多めにタイプするとアライメントが変更される。
2つ目のコロンで揃えたいなら、Return
そして 2
、最後に space
だ。
![Easy align example](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/easy-align.gif)
4.3. 基本的な自動補完: C-n
& C-p
Vim 基本的な自動補完システムを備えている。ショートカットは挿入モードで C-n
と C-p
だ。殆どのケースにおいてこれらは、ほぼ申し分ないくらい良く動作する。例えば言語の構成済みではないファイルを開く場合など。
5. Haskell
私の現在の Haskell プログラミング環境はグレイトだ! 私はファイルを保存するたびに、エラーや、どのように自分のコードを改善すべきかといった提案をコメントに書いている。 だったらこれだ: ☞cabal install ghc-mod
で ghc-m
od
をインストールするのを忘れるなよ:
" ---------- VERY IMPORTANT ----
-------
" Don't forget to install ghc-mo
d with:
" cabal install ghc-mod
" ------------------------------
-------
Plug 'scrooloose/syntastic'
" syntax checker
" --- Haskell
Plug 'yogsototh/haskell-vim'
" syntax indentation / h
ighlight
Plug 'enomsg/vim-haskellConcealP
lus' " unicode for haskell op
erators
Plug 'eagletmt/ghcmod-vim'
Plug 'eagletmt/neco-ghc'
Plug 'Twinside/vim-hoogle'
Plug 'pbrisbin/html-template-syn
tax' " Yesod templates
...
" -------------------
" Haskell
" -------------------
let mapleader="-"
let g:mapleader="-"
set tm=2000
nmap <silent> <leader>ht :GhcMod
Type<CR>
nmap <silent> <leader>hh :GhcMod
TypeClear<CR>
nmap <silent> <leader>hT :GhcMod
TypeInsert<CR>
nmap <silent> <leader>hc :Syntas
ticCheck ghc_mod<CR>:lopen<CR>
let g:syntastic_mode_map={'mode'
: 'active', 'passive_filetypes':
['haskell']}
let g:syntastic_always_populate_
loc_list = 1
nmap <silent> <leader>hl :Syntas
ticCheck hlint<CR>:lopen<CR>
" Auto-checking on writing
autocmd BufWritePost *.hs,*.lhs
GhcModCheckAndLintAsync
" neocomplcache (advanced compl
etion)
autocmd BufEnter *.hs,*.lhs let
g:neocomplcache_enable_at_startu
p = 1
function! SetToCabalBuild()
if glob("*.cabal") != ''
set makeprg=cabal\ build
endif
endfunction
autocmd BufEnter *.hs,*.lhs :cal
l SetToCabalBuild()
" -- neco-ghc
let $PATH=$PATH.':'.expand("~/.c
abal/bin")
では楽もう!
![hlint on save](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/vim-lint.gif)
-
を使う。,
は本来の仕様方法として良く使うからだ。
●-ht
はカーソル下にあるブロックの型をハイライト表示する。
●-hT
は現在のブロックの型を挿入する。
●-hh
は選択のハイライトを消す。
![Auto typing on save](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/auto-typing.gif)
6. Clojure
![Rainbow parenthesis](http://yannesposito.com/Scratch/img/blog/Vim-as-IDE/clojure.gif)
lein-kibit
の自動化に関する統合が足りていない。いつの日か勇気が湧けばやるつもりだ。しかし、原因である Clojure の非常に長い起動時間を考えると、便利な vim プラグインを作ることが出来るのか疑わしい。
実際に虹のカッコを見る事が出来るだろう(デフォルト値は solarized で壊れているけども)。
私は以前は paredit
プラグインを使っていた。しかしそれはとても限定的だった。今は vim の概念をより首尾一貫した se
xp
を使っている。
" " -- Clojure
Plug 'kien/rainbow_parentheses.v
im'
Plug 'guns/vim-clojure-static'
Plug 'guns/vim-sexp'
Plug 'tpope/vim-repeat'
Plug 'tpope/vim-fireplace'
...
autocmd BufEnter *.cljs,*.clj,*.
cljs.hl RainbowParenthesesActiva
te
autocmd BufEnter *.cljs,*.clj,*.
cljs.hl RainbowParenthesesLoadRo
und
autocmd BufEnter *.cljs,*.clj,*.
cljs.hl RainbowParenthesesLoadSq
uare
autocmd BufEnter *.cljs,*.clj,*.
cljs.hl RainbowParenthesesLoadBr
aces
autocmd BufEnter *.cljs,*.clj,*.
cljs.hl setlocal iskeyword+=?,-,
*,!,+,/,=,<,>,.,:
" -- Rainbow parenthesis options
let g:rbpt_colorpairs = [
\ ['darkyellow', 'RoyalBlue
3'],
\ ['darkgreen', 'SeaGreen3
'],
\ ['darkcyan', 'DarkOrchi
d3'],
\ ['Darkblue', 'firebrick
3'],
\ ['DarkMagenta', 'RoyalBlue
3'],
\ ['darkred', 'SeaGreen3
'],
\ ['darkyellow', 'DarkOrchi
d3'],
\ ['darkgreen', 'firebrick
3'],
\ ['darkcyan', 'RoyalBlue
3'],
\ ['Darkblue', 'SeaGreen3
'],
\ ['DarkMagenta', 'DarkOrchi
d3'],
\ ['Darkblue', 'firebrick
3'],
\ ['darkcyan', 'SeaGreen3
'],
\ ['darkgreen', 'RoyalBlue
3'],
\ ['darkyellow', 'DarkOrchi
d3'],
\ ['darkred', 'firebrick
3'],
\ ]
Clojure での作業が非常にスムーズになる。コードの任意の部分を eval することができる。別の端末で Clojure REPL を手動で起動しておく必要がある。