私はこれまでろくに.vimrc
の設定もろくにやったことがないような薄っぺらい人間でした。
以前の記事で唐突にNeoBundleおよびRuby関連プラグインの導入について述べたのですが、そもそも見よう見まねで何も分かってないので有効活用できてませんでした (当然ですね)。
この記事ではイチから真面目にメモしたいと思います。
記述に間違い等ありましたら教えていただければ幸いです。
目標 (2013 秋)
現時点で一応の動作確認はできています。
- 基本の.vimrc設定を行って(自分が)使いやすい環境に (この記事で記述)
- 外部プラグインの導入
- NeoBundleによるプラグイン管理 (この記事で記述)
- Markdown記法を利用してシンタックスハイライト、ブラウザプレビュー。こちらの記事参照
- NeoComplCacheとNeoSnippetを使って便利に補完
- TBD...
- Vimの日本語IME(挿入モード抜けるときにオフりたい)をキーリマップツールを使って何とかする
- これらの設定を(恥を忍んで)GitHubの公開リポジトリで管理 (この記事で記述)
--
それではやっていきます。
GitHubリポジトリ作成
まずは入れ物を作ってしまいたいと思います。
公開リポジトリ作成まで
上記サイト様に全て書いてあります。
以下の手順をこなします。
- GitHubアカウント登録
- SSH公開鍵設定
- 公開リポジトリの作成 (以下ではdotfilesという名前にしています)
.vimrcを作業ツリーへ
上記で作成したdotfilesを作業PC上にクローンしてきます。
$ git clone https://youraccount/dotfiles
今後.vimrc
をdotfilesで管理するため、ホームから移動し、シンボリックリンクを貼ります。
$ cd
$ mv .vimrc path/to/dotfiles/.vimrc
$ ln -s path/to/dotfiles/.vimrc .
NeoBundleのインストール
ここでVimプラグイン管理プラグインであるNeoBundleを導入します。
こちらもdotfilesで管理しますが、外部リポジトリを参照する形になりますので$ git submodule
で追加しています。
$ cd path/to/dotfiles
$ git submodule add https://github.com/Shougo/neobundle.vim.git .vim/bundle/neobundle.vim
.vim
ディレクトリもホームにシンボリックリンクを貼ります。
$ cd
$ ln -s path/to/dotfiles/.vim .
.vimrc
に以下を追記します。
公式のサンプルとは違っていますので、何か不具合あればご指摘いただければ幸いです。
if has('vim_starting')
set nocompatible " Be iMproved
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#rc(expand('~/.vim/bundle/'))
" Let NeoBundle manage NeoBundle
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'Shougo/unite.vim'
" NeoSnippets
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
" Added For Ruby Programming
NeoBundle 'AndrewRadev/switch.vim'
NeoBundle 'tpope/vim-endwise'
filetype plugin indent on " Required!
NeoBundleCheck
ちなみにProxy環境の場合は以下の行をcall文の後くらいに置いてください。httpsで繋ぎにいってくれます。
let g:neobundle_default_git_protocol='https'
編集が終わったらVimを再起動し、:NeoBundleInstall
でプラグインをインストールします。
※ ちなみにNeoBundleCheck
を書いておけばVim再起動時に対話的にインストールしてくれます(知りませんでした)。
なお、今後必要ないプラグインができた場合は.vimrc
から削除後に:NeoBundleClean
で削除できます。
.gitignoreの記述
こうしてNeoBundleでインストールしたプラグインは.vim/bundle
以下に配置されます(上記でそう指定しました)。
$ git submodule
で追加したneobundle以外は、dotfiles/.gitignore
でリポジトリの管理対象外にしておきます。
.vim/bundle/*
!.vim/bundle/neobundle.vim
リモートリポジトリにpush
ここまでで一旦区切りを付けます。
作業ツリーをステージング(add) -> 変更の確定(commit) -> リモートリポジトリにpush、という流れでGitHubに持っていきます。
$ cd path/to/dotfiles
$ git add .
$ git commit -m 'my first commit'
$ git push
準備は以上です。
基本の.vimrc設定
それでは.vimrc
の設定をやっていきます。
この間のようにいきなり背伸びした真似はせずに、バニラでできる設定をコツコツとやっていきます。
現時点では以下の設定を行っています(自分がやりやすいように、がテーマ)。
そのほかの設定項目はこのサイトがとても参考になると思います。
同サイトのTipsページにもお世話になりっぱなしです。
:setパラメータ一覧
設定項目 | My設定値 | 設定内容の説明 |
---|---|---|
nocompatible | - | Vi互換を切る(便利機能を使いたい) |
encoding | utf-8 | 内部エンコーディングをUTF-8に指定 |
fileencodings | iso-2022-jp,utf-8,cp932,sjis,euc-jp | ファイルの文字エンコード定義(前方から適用、エラーがないものを採用) |
number | - | 行番号を表示 |
backspace | indent,eol,start | backspaceキーの挙動。インデント、改行記号、行頭文字を削除可能に |
tabstop | 4 | <TAB>押下時のインデント幅 |
clipboard | unnamed | クリップボードを使う |
ruler | - | 何行目の何列目かを表示 |
wrap | - | ウインドウより長い行を折り返して表示 |
list | - | 不可視文字を表示 |
listchars | trail:-,tab:>- | listがonの時に使う文字を指定(trail:行末のスペース、tabはタブ。他にもあり) |
smartindent | - | 現在のインデント幅を維持 |
showmatch | - | カッコ記号の対応するものをハイライト |
whichwrap | b,s,<,> | カーソルを行頭/行末で止まらないように(b:backspaceキー,s:spaceキー,<は左、>は右キー) |
textwidth | 0 | 自動改行無効 |
laststatus | 2 | ステータスラインを常に表示 |
statusline | 表外参照 | ステータスラインの書式を指定 |
ignorecase | - | 検索時に大文字、小文字を区別しない |
smartcase | - | 検索時に大文字が指定された場合のみ区別して検索 |
nowrapscan | - | 下まで検索したら最初に戻らない |
hlsearch | - | 検索結果をハイライトする |
wildmode | list,null | <TAB>キーによるコマンドライン補完設定 |
noswapfile | - | スワップファイルを作らない |
backupdir | $HOME/.vimbackup | バックアップファイルを保管するディレクトリを指定 |
ステータスラインの表示設定
このページを参考にさせていただきました、というかマネさせていただきました。
set statusline=%<%f\ %m%r%h%w
set statusline+=%{'['.(&fenc!=''?&fenc:&enc).']['.&fileformat.']'}
set statusline+=%=%l/%L,%c%V%8P
Cygwin向けマッピング
CygwinのVimは+clipboardではないので、ヤンクした文字列を:cb
コマンドでクリップボードに貼り付けられるようにマッピングしました。
Mac向けには以前別の記事を書きました。
noremap :cb :w !cat > /dev/clipboard
追記: 追加プラグインによる対処
上記のコピペはバッファ全体しかコピーできないので現在は追加プラグインのfakeclipで*レジスタとのやりとりを行っています。
NeoBundle 'kana/vim-fakeclip'
vmap ,y "*y
nmap ,p "*p
:source ~/.vimrc
で反映しましょう(NeoBundleCheckが有効ならそのままインストールしてくれます)。
これでy
、p
でクリップボードへのコピペが有効になります。
変更をリモートリポジトリにpush
変更したら初回push時と同様、 addして作業ツリーをステージング -> commitで作業ツリーの変更内容を確定 -> pushでリモートリポジトリにpushすることができます。
今後は…
今後新しい環境に移行しても、落ち着いてこのリポジトリをクローンし、.vim
ディレクトリと.vimrc
のシンボリックリンクを貼ればマイセッティング済になります。(もっと良いやり方があるかもしれませんが…)
追記: Submoduleの導入手順を忘れてました。
$ cd path/to/dotfiles
$ git submodule init
$ git submodule update
以上になります。だんだん便利になってくるのが嬉しいです。
今後メンテすることがあったら適宜追記していきたいと思います。