Vim 設定ファイルを github で管理する
Vimの設定を各環境で統一するために設定ファイルを github で管理する。
Google で "dotfiles" で検索すると大量に出てくる方法である。
方針
ファイル構成
ファイル構成は以下のようになる。
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 コマンドでシンボリックリンクを作成
>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 のプラグイン管理を 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点。
- vimfilesフォルダが ~/.vim という前提で動作していた
- vundle#rc() が引数なしで call されるとそうなるらしい
- vundle#rc に bundle フォルダのパスを指定して call することで解決
- 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
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を試してみる。
例えばカレントフォルダにある *.c 拡張子のファイルから"hoge"というキーワードを検索する場合は以下のコマンドを実行する。
:vimgrep /hoge/ *.c
しかし、そのままではエラーとなってしまう。
どうもそのままではカレントフォルダはgvim.exeを実行したフォルダになっているようだ。
そこで、現在開いているファイルのフォルダをカレントフォルダに設定するために以下のコマンドを実行する。
:cd %:h
その上で :vimgrep を実行するとカレントフォルダ内でgrepが実行される。
更に :copen コマンドを実行すると検索結果が別ウィンドウで表示される。
表示された検索結果内でカーソルのある行で
以下のコマンドを実行することでgrepの実行と検索結果ウィンドウの表示が自動的に行える。
:vimgrep /hoge/j *.c | cw
おまけ
- 日付を挿入する方法
:r !date /t