Vim 設定ファイルを github で管理する

Vimの設定を各環境で統一するために設定ファイルを github で管理する。
Google で "dotfiles" で検索すると大量に出てくる方法である。

方針

    • vimfiles/, _vimrc, _gvimrc を dotfiles/ 以下に配置して github に登録
    • それぞれの環境では HOME ディレクトリにこれらのファイル/ディレクトリへのシンボリックリンクを作成
    • プラグインについては NeoBundle で管理する
      • neobundle.vim は git submodule で vimfiles/bundle に登録

ファイル構成

ファイル構成は以下のようになる。

  dotfiles/
    +--vimfiles/
    |    +--bundle/  プラグイン管理用
    |    +--backup/  バックアップファイル保存先
    |    `--swp/     スワップファイル保存先
    +--_vimrc
    `--_gvimrc

git 管理のための細かい事

無視設定

git管理したくないファイルのために .gitignore ファイルに以下を記載する

# bundle ディレクトリ以下のファイルを無視
vimfiles/bundle/

# バックアップ、スワップファイルを無視
.*~
*~
*.swp
空ディレクトリの管理

git は空のディレクトリを管理してくれない。
そのため、バックアップファイル保存先などの空ディレクトリを git 管理に追加する際は、そのディレクトリに空ファイルを置く。
私は .gitkeep というファイルを置いている。

シンボリックリンクの作成

dotfiles/ ディレクトリを ~/projects ディレクトリ以下にクローンした場合以下のようにシンボリックリンクを作成する。

Windows 7 環境の場合
  • 管理者権限でコマンドプロンプトを開く
    • [Windows]キーを押してスタートメニューを表示
    • [プログラムとファイルの検索]に"cmd"と入力
    • プログラム一覧に表示される "cmd.exe" にカーソルを移動させて[Ctrl]と[Shift]キーを同時に押しながら[Enter]キーを押す
  • HOME ディレクトリへ移動する
    • 環境変数 HOME を設定している場合以下のコマンドを入力
>cd %HOME%
>mklink /D vimfiles projects\dotfiles\vimfiles
>mklink _vimrc projects\dotfiles\_vimrc
>mklink _gvimrc projects\dotfiles\_gvimrc

NeoBundle を取得

git submodule で登録している NeoBundle は dotfiles をクローンした時点では中身がないので、以下の手順で取得する必要がある。

$ cd dotfiles
$ git submodule init
$ git submodule update

Vimの起動

この後おもむろに gvim を起動すると、「Install bundles now?」というようなメッセージが表示される。
ここで[Yes]を選択すると、NeoBundle に設定設定している各プラグインが取得され、それぞれの環境で同じ設定のVimが実行することができるようになる。

Vim のプラグイン管理を Vundle から NeoBundle に変更

つい先日 Vim プラグインの管理に Vundle を使用するようにしたのだが、
いろいろと調べていると Vundle を改良した NeoBundle というプラグインが
あるということでこちらを使うように方向転換した。


良いと思える所は以下。

  • shellslash を設定していても動作する
  • Subversion に対応している
  • リビジョン指定ができる

などなど...


NeoBundle は以下の GitHub から取得。
https://github.com/Shougo/neobundle.vim

必要十分な設定手順が README に記載されているので、基本的にはその内容に従って設定。

私の環境の _vimrc には以下のように設定している。

"------------------------------------------------------------
" environment dependence
"------------------------------------------------------------
if has('win32') || has('win64')
	set shellslash
	let $DOTVIM = expand('~/vimfiles')
else
	let $DOTVIM = expand('~/.vim')
endif


"------------------------------------------------------------
" NeoBundle setting
"------------------------------------------------------------
filetype off

if has('vim_starting')
	set runtimepath+=$DOTVIM/bundle/neobundle.vim/
endif

call neobundle#rc( expand('$DOTVIM/bundle/') )

NeoBundleFetch 'Shougo/neobundle.vim'

NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vimfiler'
NeoBundle 'fuenor/qfixhowm'
NeoBundle 'taglist.vim'

filetype plugin indent on

NeoBundleCheck

Vim プラグインを Git で管理するプラグイン Vundle を使ってみる。

Vimの設定ファイル管理をEmacsの時と同様にGitHubへ持って行こうとしていろいろ調べていたところ
プラグインの管理には Vundle というプラグインを使うと便利だという情報に行き当たった。

Vundle はプラグインを Git で管理するものらしい。
せっかくなのでプラグイン管理を Vundle で行うことも含めてVimの設定管理を検討することにした。

Vundle

Vundle は以下の GitHub で開発されているようである。
https://github.com/gmarik/vundle

まずは、設定を GitHub へ移動する前にローカル環境で実験をした。
Windows環境ということもありいろいろはまったりもしたのだが、最終的には以下のようになった。

Gitの再インストールと設定

以下を参照してGitの再インストールと設定
https://github.com/gmarik/vundle/wiki/Vundle-for-Windows
コマンドプロンプトから git を実行する必要があるので、Git を再インストールした。
元々は、GitBash からの実行のみ有効にしていたためだ。
また、Curlコマンドプロンプトから実行できるようにするために curl.cmd を作成。

Vundleを取得

まず、~/vimfiles フォルダに bundle フォルダを作成する。
GitBash から以下のコマンドを実行して Vundle をクローンする。

$ git clone https://github.com/gmarik/vundle.git ~/vimfiles/bundle/vundle
_vimrc に設定を記述

_vimrc に以下の設定を追記
さしあたって、unite.vim, qfixhowm, taglist.vim を追加してみた。

" OSによる違いを吸収する
if has('win32') || has('win64')
    let $DOTVIM = expand('~/vimfiles')
else
    let $DOTVIM = expand('~/.vim')
endif

" vundle setting
set nocompatible
filetype off

set runtimepath+=$DOTVIM/bundle/vundle
call vundle#rc('$DOTVIM/bundle')

Bundle 'gmarik/vundle'

Bundle 'Shougo/unite.vim'
Bundle 'fuenor/qfixhowm'
Bundle 'taglist.vim'

filetype plugin indent on
BundleInstall実行

vimを起動して :BundleInstall を実行。

Wiindows環境のためにはまったこと

2点。

  1. vimfilesフォルダが ~/.vim という前提で動作していた
    • vundle#rc() が引数なしで call されるとそうなるらしい
    • vundle#rc に bundle フォルダのパスを指定して call することで解決
  2. BundleInstallでのgit cloneに失敗する
    • shellslash が設定されていたため
参考にさせて頂いたURL

南極の図書館
「そろそろしっかりvimを使う。dotfilesのgithub管理とvundleの導入。」
http://holypp.hatenablog.com/entry/20110515/1305443997

まだ決めてない
「WindowsでVundleを使うときにはまったこと」
http://d.hatena.ne.jp/furu33/20110430/1304159522

さようならEmacs

職場のVimhowmプラグインを導入。
これにより、全くEmacsを起動することなく業務が進められた。
Vim快適。

howmメモ

howm を導入するにあたって一つだけはまったのでメモ。
Windows環境でGVimを起動する際に以下のファイルに対する警告メッセージが表示されていた。

howm_schedule.vim

いろいろ試してみた結果 _vimrc に以下の設定をする必要があるようだ。

set shellslash

Windows環境ではパス区切りが \ であるが、元々Unix系のソフトであるVimはパス区切りを / で扱うため問題が発生することがあり、その対策としてパス区切りを / に強制するオプションらしい。

howm

秀丸エディタ使用時からずっとhowm(一人お手軽 Wiki もどき)howm: Hitori Otegaru Wiki Modokiを利用しているので、やはりVim上でも利用したい。
ということで、こちらfudistのサイトを参考にQFixHowmをインストールしてみた。
秀丸エディタEmacsのものとは若干使い勝手が違うが悪くない。


これで、少なくともEmacsは手放せる状態になった。
Vimを少しコーディングやコード解析に使用してみたが、かなり快適である。
もっと早く手を出すべきだったかな。
まあ、これもEmacsを使った経緯があっての感想かも知れないので、Emacsを使っていた時期も無駄ではなかったと思っている。

プログラミングに必要な機能(関数一覧)

プログラミング業務に必要な機能として大事な物を忘れてたわ。
ということで、関数一覧を追加。

  • 関数一覧
  • ファイル内検索
  • grep
  • 置換
  • タグジャンプ

関数一覧(taglist)

Vimで関数一覧を表示する方法の一つとして taglist プラグインを使う方法がある。

ダウンロード

taglistプラグインは以下のサイトから入手。
taglist.vim - Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc) : vim online

インストール

taglist.vim を $VIMRUNTIME/plugin フォルダにコピーする。
$VIMRUNTIME のパスは Vim 上で以下のコマンドを実行することで表示される。

:echo $VIMRUNTIME

実行

taglist を実行するにあたって事前にタグファイルを作成しておく必要がある。
※タグファイルの作成方法についてはまた後ほど整理しよう。

ソースコードを開いている状態で以下のコマンドを実行する。

:Tlist

すると標準ではウィンドウの左側に関数一覧が表示される。
関数一覧上で関数名の行にカーソルを移動させてEnterキーを入力するとその関数の位置へジャンプできる。
また、F1キーを入力すると関数一覧の上部にヘルプが表示されるので便利。

プログラミングに必要な機能(grep)

プログラミング業務に使用するテキストエディタとしてどのような機能が必要であるかを考える

  • ファイル内検索
  • grep
  • 置換
  • タグジャンプ

他にもあるだろうが今のところぱっと思いつくのはこれぐらい。

grep について

まず、grep について軽く調べてみた。


vimには内部grepと外部grepの2つの方法が用意されているようだ。

  • 内部grep
    • :vimgrep コマンドで実行
  • 外部grep
    • :grep コマンドで実行

内部grepを試してみる。
例えばカレントフォルダにある *.c 拡張子のファイルから"hoge"というキーワードを検索する場合は以下のコマンドを実行する。

:vimgrep /hoge/ *.c

しかし、そのままではエラーとなってしまう。
どうもそのままではカレントフォルダはgvim.exeを実行したフォルダになっているようだ。
そこで、現在開いているファイルのフォルダをカレントフォルダに設定するために以下のコマンドを実行する。

:cd %:h

その上で :vimgrep を実行するとカレントフォルダ内でgrepが実行される。
更に :copen コマンドを実行すると検索結果が別ウィンドウで表示される。
表示された検索結果内でカーソルのある行でキーを押すことでその位置へジャンプする。


以下のコマンドを実行することでgrepの実行と検索結果ウィンドウの表示が自動的に行える。

:vimgrep /hoge/j *.c | cw

おまけ

  • 日付を挿入する方法

:r !date /t