vimのコメントの色が見づらくて変更したいと思ったので、やり方をまとめてみました。ctermfgに整数を設定してあげる方法もありますが、それだと何色なのかいまいちわかりづらいと思ったので、色の名前で設定する方法を私のブログにまとめてみたので、よかったら読んでみてください!↓
http://infotech776.blog.fc2.com/blog-entry-54.html
VIMのコメントの色の変更
Vimでプロジェクト固有の設定を適用する
基本の設定でははインデントはスペース2つ。
けど、プロジェクトAではインデントをハードタブにしたい。
といった時にプロジェクト固有のVimの設定ができると便利。
もちろんできます。
.vimrc
まずは.vimrcにそれを実現する設定を記述
augroup vimrc-local
autocmd!
autocmd BufNewFile,BufReadPost * call s:vimrc_local(expand('<afile>:p:h'))
augroup END
function! s:vimrc_local(loc)
let files = findfile('.vimrc.local', escape(a:loc, ' ') . ';', -1)
for i in reverse(filter(files, 'filereadable(v:val)'))
source `=i`
endfor
endfunction
これで、.vimrc.local
というファイルがあると、それを読み込んでくれるようになる。
.vimrc.local
あとは、下のようにプロジェクト固有の設定ファイルをつくってやればいい。
set noexpandtab
set tabstop=4
set shiftwidth=4
ついでに
.vimcrc.localをバージョン管理から除く
[core]excludesfile=~/.gitignore
.vimrc.local
Terminal のビープ音がうざいので全カット (仮)
vimのGoサポートが手厚くて打ち震えている
はじめに
タイトルの通りvimで作るGoの開発環境が便利なのでまとめたものです。
特にコードリーディングに便利な設定を紹介します。
参考
本稿を書くに当たって参考になった記事です。
日付が新しい順に並べていますので下の方は古い記述を含んでいます。
Go 1.2.1 の環境構築 Homebrew + Vim 編 (2014.03)
http://qiita.com/methane/items/4905f40e4772afec3e60
Big Sky :: Vimを使ったGo言語開発手法
http://mattn.kaoriya.net/software/vim/20130531000559.htm
goのvimコマンド「Fmt」が、実はquickfixに登録してくれてて最高だった
http://qiita.com/umisama/items/2e38139e0d3f4410446e
Go用のvim設定
http://qiita.com/hnakamur/items/f39fde28bcfe4beaaaba
Vim for Golang
http://www.metal3d.org/ticket/2013/07/07/vim-for-golang
Goの開発環境(Vim + Vundle編)
http://qiita.com/todogzm/items/3c281da10287f7383487
Go言語の初心者が見ると幸せになれる場所
http://qiita.com/tenntenn/items/0e33a4959250d1a55045
VimでGoのコードを書くときにやっておきたいこと
http://qiita.com/methane/items/d82b9f28b97b5c3bd08a
VimFiler で NERDTree のような Explorer を快適に実現する方法
http://hrsh7th.hatenablog.com/entry/20120229/1330525683
できるようになること
VimFiler + Tagbar でIDEのような一覧性
VimFilerで後述する:VimFilerTree
コマンドとTagBarプラグインで:Tagbar
コマンドを実行したものです。
ツリー表示の定番はNERDTreeですが個人的な好みでVimFilerを使っています。
それぞれファイル名や関数名にカーソルを合わせてEnter
を押すとジャンプします。
時にはUnite-outlineも使いたい
:Unite outline
でアウトライン表示もできます。
gdで定義にジャンプ
下のウインドウの15行目のNewAnsiColorWriter
にカーソルを合わせてgd
を入力したものです。
画面分割されて上のウインドウにその定義があるファイルを開いています。
:Godocでドキュメント表示
下のウインドウの17行目のfmt.Println
にカーソルを合わせて:Godoc
コマンドを実行したものです。
画面分割されて上のウインドウにGodocを開いています。
環境構築
環境変数
macでhomebrewの場合
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
windowsの場合
GOROOT=C:\go
GOPATH=%USERPROFILE%\go
PATH=%GOPATH%\bin;%GOROOT%\bin;%PATH%
ツール
$GOPATH/bin
にコマンドがインストールされます。
go get code.google.com/p/go.tools/cmd/goimports
go get code.google.com/p/go.tools/cmd/godoc
go get code.google.com/p/go.tools/cmd/vet
go get code.google.com/p/go.tools/cmd/cover
go get github.com/nsf/gocode
go get github.com/golang/lint
go get code.google.com/p/rog-go/exp/cmd/godef
go get github.com/jstemmer/gotags
vimrc
各種vimプラグイン、Goの設定、VimFilerでツリー表示するための設定です。
" for Neobundle {{{if has('win32')lets:vim_home=expand('~/vimfiles')elselets:vim_home=expand('~/.vim')endifif has('vim_starting')let&runtimepath.=printf(',%s/bundle/neobundle.vim',s:vim_home)endifsetnocompatiblecall neobundle#rc(expand(s:vim_home.'/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'majutsushi/tagbar'
NeoBundle 'Shougo/vimfiler'
NeoBundle 'Shougo/vimproc'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'h1mesuke/unite-outline'
NeoBundle 'soh335/unite-outline-go'
NeoBundle 'dgryski/vim-godef'setrtp^=$GOROOT/misc/vimsetrtp^=$GOPATH/src/github.com/nsf/gocode/vimfiletype plugin indent onsyntaxon
NeoBundleCheck
" }}}" for golang {{{setpath+=$GOPATH/src
letg:gofmt_command ='goimports'auBufWritePre *.go Fmt
auBufNewFile,BufRead *.gosetsw=4noexpandtabts=4completeopt=menu,preview
auFileTypegocompilergo" }}}" VimFilerTree {{{
command! VimFilerTree call VimFilerTree()function VimFilerTree()
exec ':VimFiler -buffer-name=explorer -split -simple -winwidth=45 -toggle -no-quit'wincmdtsetlwinfixwidthendfunction
autocmd!FileType vimfiler callg:my_vimfiler_settings()function!g:my_vimfiler_settings()
nmap <buffer><expr><CR> vimfiler#smart_cursor_map("\<Plug>(vimfiler_expand_tree)","\<Plug>(vimfiler_edit_file)")nnoremap<buffer>s :call vimfiler#mappings#do_action('my_split')<CR>nnoremap<buffer>v :call vimfiler#mappings#do_action('my_vsplit')<CR>endfunctionlet my_action = {'is_selectable' : 1}
function! my_action.func(candidates)wincmdp
exec 'split '. a:candidates[0].action__path
endfunctioncall unite#custom_action('file','my_split', my_action)let my_action = {'is_selectable' : 1}
function! my_action.func(candidates)wincmdp
exec 'vsplit '. a:candidates[0].action__path
endfunctioncall unite#custom_action('file','my_vsplit', my_action)" }}}
" gotags {{{letg:tagbar_type_go = {
\ 'ctagstype' : 'go',
\ 'kinds' : [
\ 'p:package',
\ 'i:imports:1',
\ 'c:constants',
\ 'v:variables',
\ 't:types',
\ 'n:interfaces',
\ 'w:fields',
\ 'e:embedded',
\ 'm:methods',
\ 'r:constructor',
\ 'f:functions'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 't' : 'ctype',
\ 'n' : 'ntype'
\ },
\ 'scope2kind' : {
\ 'ctype' : 't',
\ 'ntype' : 'n'
\ },
\ 'ctagsbin' : 'gotags',
\ 'ctagsargs' : '-sort -silent'
\ }
" }}}
vim with vundle (vim plugin manager)
a little code that I saw long time ago
put it in your .vimrc
then vundle (vim plugin manager) will automatic install if you have git
then your can happly use vundle to mange your vim plugin :)
vundle support three source :
- vim-scripts repos
- original repos on github
- non github repos
let iCanHazVundle=1let vundle_readme=expand('~/.vim/bundle/vundle/README.md')if!filereadable(vundle_readme)
echo "Installing Vundle.."
echo ""silent!mkdir-p~/.vim/bundle
silent!git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
let iCanHazVundle=0endifsetrtp+=~/.vim/bundle/vundle/call vundle#rc()" let Vundle manage Vundle
Bundle 'gmarik/vundle'
Vimで括弧の補完→改行してインデント
Vimで閉じ括弧補完といえば inoremap { {}<Left>
のようにやると思うけど、
俺は 某崇高なテキストエディタのような括弧補完がやりたいんだ!
というわけで、以下を .vimrc
に書けばOK
inoremap {<Enter> {}<Left><CR><ESC><S-o>inoremap [<Enter> []<Left><CR><ESC><S-o>inoremap(<Enter>()<Left><CR><ESC><S-o>
これで、
<?phpfunctiontest()<カーソル>
<カーソル>位置で { + Enter
を押せば
<?phpfunctiontest(){<カーソル位置>}
となる。
1年ほどSublimeに浮気して戻って来たけどやっぱVimたんかあいいよ(最低)
Linux新規インストール時メモ
はじめに
自分用の簡易サーバ立ち上げメモ。
Railsで遊んだり、身内向けサービス公開するための環境構築が目標。
sshログインユーザの制限とか公開鍵認証とかの設定はしない。
記憶を頼りに書いてるんで怪しいところがあるかも。
Zshもよくわからないから入れない。
基本設定
とりあえずsudoできるようにしとく。
su
visudo
して
ユーザ名 ALL=(ALL) ALL
を追加。
次に、SSHが22番のままはまずいんで変更
vi /etc/ssh/sshd_config
Port3843
新しいポートでのアクセスを許可:/etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3843 -j ACCEPT
いろいろrestartする。
sudo /etc/init.d/sshd restart
sudo /etc/init.d/iptables restart
現在の接続そのままにして、新しい接続でつながるか試す。
つながらなかったら全力で頑張る。
つながったらiptablesから22番削除。
とりあえず必要そうな環境構築
sudo yum update
sudo yum install perl perl-devel
sudo yum install php php-devel php-mbstring
sudo yum install git
sudo yum install make gcc
sudo yum install zlib-devel openssl-devel libyaml-devel
sudo yum install libxslt-devel libxml2-devel
sudo yum install nodejs
Ruby環境
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rvenb入ったことを確認
rbenv --version
ruby-buildをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
インストールできるバージョンを確認
rbenv install --list
好きなバージョンのRubyをインストール。
自分はRoRチュートリアルに使うため。2.0.0をインストールしました。
rbenv install -v 2.0.0-p481
再読み込み&確認
rbenv rehash
rbenv versions
インストールした奴に設定
rbenv global 2.0.0-p481
確認
ruby -v
ついでにgemアップデートしとく。
gem update --system
vim
最新版のvimをソースからコンパイルする。
コンパイルに必要な環境を揃える。
sudo yum install mercurial
sudo yum install lua-devel
sudo yum install ncurses-devel
ソースを落としてインストール。
mkdir ~/hg
cd ~/hg
hg clone https://vim.googlecode.com/hg/ vim
cd vim/src
./configure --enable-luainterp
make
sudo make install
参考サイト
http://qiita.com/inouet/items/478f4228dbbcd442bfe8
http://sanrinsha.lolipop.jp/blog/2012/03/vim%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB.html
clang_completeがライブラリのロードに失敗したとき@mac
clang-3.5 via macports
g:clang_library_path
を正しく設定してもロードに失敗する。以下のような感じのエラーがでる。
Referenced from: /opt/local/libexec/llvm-3.5/lib/libclang.dylib
Reason: image not found
dylibの依存関係が解決できないらしい。パスが@executable_path(なんそれ?)からの相対パス。
https://github.com/Rip-Rip/clang_complete/issues/39
install_name_tool
を使うと上を変更できる。
http://mactkg.hateblo.jp/entry/2012/05/03/202549
$ sudo install_name_tool -change '@executable_path/../lib/libLLVM-3.5.dylib' /opt/local/libexec/llvm-3.5/lib/libLLVM-3.5svn.dylib /opt/local/libexec/llvm-3.5/lib/libclang.dylib
エラーメッセージ消える。補完もできる。
てかMacめんどい。
少し経ったら似たようなロードエラーが起きたので以下も実行。
$ sudo install_name_tool -change '@rpath/libLLVM-3.5.0svn.dylib' /opt/local/libexec/llvm-3.5/lib/libLLVM-3.5.0svn.dylib /opt/local/libexec/llvm-3.5/lib/libclang.dylib
tmux + vim + vim-r-plugin で最高の環境を整える
要約
vim のスニペットは便利だし、この機能を利用しながらRでデータ分析したいから、vim-r-plugin 使うという内容。
ターゲット層
- terminal-vimでRが使いたい人
- RStudio が嫌いな人
RStudio でいいんじゃないの?
お帰りください。
材料
- tmux, ver.1.5以上
- vim, ver.7.4以上
- vim-r-plugin, neosnippet-snippets
実行環境
- OS X 10.9.3
オプション
- colorout
Rのパッケージcolorout。Rのコンソールの出力を色付けて表示してくれる。tmux でrのコンソールを出力した時にやっぱり色がついていたほうが見やすいよねっていうことで。
完成図
tmuxで左にRコンソールを、右にvimを表示させている画像例(colorscheme:solarizedを利用している)。
手順
- tmux のインストール
brew install tmux
- vim-r-plugin のインストール
- 公式サイトVIM: r-plugin-installationの方法でインストールする。
- (NeoBundle を入れていれば、
NeoBundle 'vim-scripts/Vim-R-plugin'
でインストール可能なのかな?)
使い方
ターミナルで
1. tmux
2. vim test.R
3. vim上で \rf を入力すればRが起動する
Enjoy!
番外
package(colorout)のインストールでエラーが出てインストール出来なかった(OS X 10.9.3)。エラーを良く見てみるとmake: llvm-gcc-4.2: No such file or directory
と言われていたので、ググった。
上記のサイトによると、/Library/Frameworks/R.framework/Resources/etc/
にあるファイルMakeconf
の中のCCとCXXの内容を
CC=clang
CXX=clang++
に変更するといいらしい。ということで変更したら、インストールできた。
いつでもどこでも Hubot から :help する
Vim Advent Calendar 2013 186日目の記事です。
いつでもどこでも :help
する
Vim では、:help <word>
でヘルプを参照することが出来ます。
この間、Web から :help
できるサイトが作られていました。
いつでもどこでも :help する - Vim :help
Emacsからも :help
できるようになりました。
いつでもどこでも Emacsから :help する - Life is very short
Emacsからできるのですから、Vim からも :help
できるべきでした。
いつでもどこでも Vim から :help する
というわけで、Hubot からでも、:help
できるように作りました。
Hubot から :help
今のところかなりざっくり作っただけなので、ゆくゆくは「もしかして〇〇?」な機能をつけたい気もします。
どうにも CoffeeScript 読むのも書くのも苦手。
インストール
$ npm install -S hubot-vimhelpjp
あとは、 external-scripts.json に追加するだけ。
["hubot-vimhelpjp"]
使い方
:vimhelp CTRL-]
リポジトリ
Vim
インデント
>> インデント挿入
<< インデント削除
オートインデント
[Shift + v ]で選択 => "="
エンコード
:e ++enc=指定したいエンコーディング
:e ++enc=euc-jp (エンコーディングEUC-JPを指定して開き直す。)
:e ++enc=shift_jis (エンコーディングSHIFT_JISを指定して開き直す。)
:e ++enc=utf-8 (エンコーディングUTF-8を指定して開き直す。)
チートシート
f 検索
;検索繰り返し
, 検索繰り返し反対
s 削除挿入
* カーソル文字検索
C-h, w u 挿入モード削除
C-o 一発で挿入モードに戻る(+zz)
C-r 0 挿入モードで貼り付け
vit タグの中を選択
Vr- その行をハイフンに置換。rは置換
C-w v,s 分割
C-w w,h,l,j,k 移動
yit タグの中で貼り付け
% 対の括弧に移動
* スペースとタブの置換(スペース4つ)
- スペース=>タブ: (visualモード選択後) :'<,'>!expand -4
- タブ=>スペース: (visualモード選択後) :'<,'>!unexpand -t4
ファイル新規作成時にテンプレートの値を挿入する。
概要
vimからファイルを新規作成する際に、拡張子によってその新規作成されるファイルの中身をテンプレートから自動で読みこむようにする。
サンプルとしてHTMLファイル。
テンプレートファイルの準備
$HOME/.vim/template/html.txtを作成する。
ディレクトリがなければ作成する。
<!DOCTYPE html><html><head><metaname="robots"content="noindex,nofollow"/><metacharset="UTF-8"><title>This is Template</title><!--<link rel="stylesheet" type="text/css" href="example.css">--><script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script><script type="text/javascript">$(document).ready(function(){});</script><style type="text/css"></style></head><body><p>Hello World!</p></body></html>
ファイル作成時に拡張子がhtmlならテンプレートを読みこむようにする。
.vimrcに下記の1行を追記する。
autocmd BufNewFile *.html 0r $HOME/.vim/template/html.txt
これでvimからhtmlファイルを作成すると、今回用意したテンプレートの内容が自動的に挿入されるようになる。
bash、vimの操作の見直し
「nanapi勉強会 vol2 - Shellの活用でこれだけ毎日が便利になる」に参加して、自分が非効率にLinuxを使っていることを自覚しました。
なので、改めてbash
とvim
について足りていなかった部分を備忘録的に書き連ねていきたいと思います。
あくまで自分用なので、既に使っているコマンド等は割愛。
zsh
とzaw
もそのうち追記していきたいと思います。
bash
インクリメンタルサーチ(Ctrl + r)
過去のコマンド履歴を検索して実行。他の候補を見たい場合はさらにCtrl + r
。
コマンドの一部を変更して実行したい場合は、カーソルの左右を押して編集。
単語毎に移動(Esc → f、Esc → b)
単語の削除(Ctrl + w
)は使っていたけど、単語毎に移動は知らなかった。
ただ、押しにくいですね。
vim
勉強会では熱いemacs
推しでしたが、私はvim
を使っています。
ただ、改めて見直すと全然使えていないですね。
少しずつ改善していきたいと思います。
設定
検索時に大文字と小文字を区別しない(:set ignorecase)
検索時に大文字を入力した場合のみ大文字/小文字を区別する(:set smartcase)
インクリメンタルサーチ(:set incsearch)
検索条件を入力している最中に随時検索を行う。
タブの入力を空白文字に置き換える(:set expandtab)
いちいち:%s/
で置換してました。。。
括弧の入力時にカーソルを対応する括弧の上に一定時間表示(:set showmatch)
コマンドライン補完する時に補完候補を表示(:set wildmenu)
インデントの文字数を設定(:set shiftwidth=値)
カーソル移動
空白を除く行頭に移動(^)
0
を押した後に移動してました。
次の特定の文字に移動(f + 特定の文字、Fで前方向)
;
で繰り返し、,
で逆方向に繰り返し。
次の特定の文字の直前に移動(t + 特定の文字、Tで前方向)
;
で繰り返し、,
で逆方向に繰り返し。
スクロール
現在のカーソル位置が1番上に来るようにスクロール(zt)
現在のカーソル位置が中心に来るようにスクロール(zz)
現在のカーソル位置が1番下に来るようにスクロール(zb)
マーク機能
マーク機能はテキストの任意の場所に印をつけ、後でその場所に移動することのできる機能。
別のファイルを開くことも可能。Chef
のレシピを編集したりする時には複数のテキストを編集するので、マーク機能を使えばもう少し書きやすくなりそう。
マークの登録(m + アルファベット)
マークの行頭に移動(' + 登録済みのマークのアルファベット)
直前のマークに移動('')
マークの一覧を表示(:marks)
インデント
行のインデントを増やす(>>)
行のインデントを減らす(<<)
選択範囲を自動インデント(選択して=)
インデントの文字数を設定(:set shiftwidth=値)
入力補完
単語の補完(Ctrl + p、Ctrl + n)
Ctrl + p
でファイルの上の方を、Ctrl + n
で下の方を検索してマッチするワードで補完する。
マルチウィンドウ
ウィンドウを分割(:split)
ウィンドウの切り替え(Ctrl + w → k、Ctrl + w → j)
ファイルを別ウィンドウで開く(:split ファイル名)
カレントディレクトリの変更(:lcd ディレクトリ)
その他
大文字小文字を切り替え(~)
数値の加減(Ctrl + a、Ctrl + x)
現在のカラースキームを確認する
Goをインストールし、Vimで書く環境を整えるまでの手順
概要
Go言語をインストールして実行できる環境を作る。
VimでGo言語を書く設定をする。
Goのインストール
以下のページでバイナリをダウンロードし、ホームディレクトリに設置する。
https://code.google.com/p/go/wiki/Downloads?tm=2
$ wget https://storage.googleapis.com/golang/go1.2.2.linux-amd64.tar.gz
$ tar xvzf go1.2.2.linux-amd64.tar.gz
$ mv go1.2.2.linux-amd64 ~
Goのパッケージをダウンロードして設定するディレクトリを作成する。
$ mkdir ~/go/packages
.bashrcなどに、以下の環境変数を設定する。
export GOROOT=~/go
export GOPATH=$GOROOT/packages
export PATH=$PATH:$GOROOT/bin
「. ~/.bashrc」などで設定を有効化すると、goコマンドが使用できるようになる。
Vimの設定
入力補完のために、gocodeを入れる。
$ go get github.com/nsf/gocode
Goに同封されているVimの設定とgocodeのVimの設定を読み込むために、
.vimrcに以下の設定を追記する。
filetype off
filetype plugin indent off
setruntimepath+=$GOROOT/misc/vimfiletype plugin indent onsyntaxon
autocmd FileTypego autocmd BufWritePre<buffer> Fmt
exe "set rtp+=".globpath($GOPATH,"src/github.com/nsf/gocode/vim")setcompleteopt=menu,preview
これで自動補完や自動フォーマットが動作するようになる。
「:Import fmt」で、importを追加できたりするのも便利。
参考
Vimを使ったGo言語開発手法
http://mattn.kaoriya.net/software/vim/20130531000559.htm
Go言語のインストール
http://golang.jp/install
GOPATH は適当に決めて問題ない
http://qiita.com/yuku_t/items/c7ab1b1519825cc2c06f
Go言語の開発環境構築 (Golang + Mac OS X + Vim)
http://note-of-engineer-b.blogspot.jp/2013/12/golang-setup.html
脱初心者を目指すVimmerにオススメしたいVimプラグインや.vimrcの設定
はじめに: 「素のVim」から「プラグイン付きのVim」へ
Vimを使い始めた当初、僕は.vimrcの設定だけで実現できる機能に限定した方が「ポータブルなVimスキル」になる気がしていたので、プラグインは全く使わずに「素のVim」を使っていました。
しかし、Vimを使って実務でRailsを開発し始めるとそんなことも言ってられなくなりました。
やはり素のVimだけでは限界があります。
Vimを使って効率よくRailsを開発するためにはプラグインに頼らざるを得ません。
ネットの情報などを参考にしてあれこれプラグインを入れてみましたが、これは手放せないというプラグインもあれば、思ったほど使わなかったというプラグインもあります。
今回の記事では前者のような「これは手放せない!」と僕が考えているプラグインに限定して紹介していきます。
また、後半ではプラグインを使わない.vimrcの一般的な設定についても紹介しています。
対象となる読者
この記事ではこんな方を対象にしています。
- Vimに関してはまだ初心者でもっと効率よくコードを書きたい人
- Vimのプラグインに興味はあるが、多すぎてどれを使うべきか迷っている人
- 基本的なVimコマンドには慣れてきたが、.vimrcのカスタマイズにはまだ抵抗がある人
- VimでRubyやRailsのコードを書くことが多い人
対象となるVim
僕が使っているのはMacVimですが、ターミナルで使うVimでもほぼ同じように動くはずです。
Windowsは全く試していないのでよくわかりませんが。。。
プラグインを紹介する前に: .vimrcをGitで管理しよう
.vimrcもGitのようなバージョン管理ツールで管理しましょう。
設定を間違えて昔の設定に戻したい!というときもあるでしょうし、GitHubに置いておけば他のマシンからも簡単に共通の.vimrcがダウンロードできます。
また、.vimrcだけでなく、.zshrcや.gitignoreなど、その他のマシン共通の設定ファイルもまとめて管理するようにしておくと便利です。
こうしたいわゆる「dotfiles」を管理する方法は、こちらのサイトを参考にさせてもらいました。
そろそろしっかりvimを使う。dotfilesのgithub管理とvundleの導入。
ちなみに僕のdotfilesもGitHubに置いています。
よかったら参考にしてみてください。
Vundle/NeoBundleでプラグインを自動管理
Vundle/NeoBundleはVimのプラグインを管理しやすくするツールです。
.vimrcにNeoBundle 'Shougo/unite.vim'
のようにプラグイン名を記述しておけば、コマンド一つでプラグインをインストールすることができます。
上で紹介した「そろそろしっかりvimを使う。dotfilesのgithub管理とvundleの導入。」ではVundleを使っていますが、最近ではNeoBundleを使う方がイマドキかもしれません。
NeoBundleを使う場合は以下のQiita記事が参考になります。
設定
僕はNeoBundleのREADMEを参考にして.vimrcを設定しています。
""""""""""""""""""""""""""""""
" プラグインのセットアップ
""""""""""""""""""""""""""""""
if has('vim_starting')
set nocompatible " Be iMproved
" Required:
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
" Required:
call neobundle#begin(expand('~/.vim/bundle/'))
" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'
" ファイルオープンを便利に
NeoBundle 'Shougo/unite.vim'
" Unite.vimで最近使ったファイルを表示できるようにする
NeoBundle 'Shougo/neomru.vim'
" ...省略
call neobundle#end()
" Required:
filetype plugin indent on
" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
""""""""""""""""""""""""""""""
Unite.vimで目的のファイルをすばやく開く
Unite.vimを使うと現在開いているバッファの一覧やカレントディレクトリ以下にあるファイルの一覧、最近使ったファイルの一覧などを表示して、目的のファイルをすばやく開くことができます。
設定
僕はこちらのサイトを参考にして設定しました。
この設定では以下のようなキーマッピングになります。
- Ctrl+P => バッファ一覧
- Ctrl+N => カレントディレクトリ以下のファイル一覧
- Ctrl+Z => 最近使ったファイルの一覧
" ファイルオープンを便利に
NeoBundle 'Shougo/unite.vim'
" Unite.vimで最近使ったファイルを表示できるようにする
NeoBundle 'Shougo/neomru.vim'
" http://blog.remora.cx/2010/12/vim-ref-with-unite.html
""""""""""""""""""""""""""""""
" Unit.vimの設定
""""""""""""""""""""""""""""""
" 入力モードで開始する
let g:unite_enable_start_insert=1
" バッファ一覧
noremap <C-P> :Unite buffer<CR>
" ファイル一覧
noremap <C-N> :Unite -buffer-name=file file<CR>
" 最近使ったファイルの一覧
noremap <C-Z> :Unite file_mru<CR>
" sourcesを「今開いているファイルのディレクトリ」とする
noremap :uff :<C-u>UniteWithBufferDir file -buffer-name=file<CR>
" ウィンドウを分割して開く
au FileType unite nnoremap <silent> <buffer> <expr> <C-J> unite#do_action('split')
au FileType unite inoremap <silent> <buffer> <expr> <C-J> unite#do_action('split')
" ウィンドウを縦に分割して開く
au FileType unite nnoremap <silent> <buffer> <expr> <C-K> unite#do_action('vsplit')
au FileType unite inoremap <silent> <buffer> <expr> <C-K> unite#do_action('vsplit')
" ESCキーを2回押すと終了する
au FileType unite nnoremap <silent> <buffer> <ESC><ESC> :q<CR>
au FileType unite inoremap <silent> <buffer> <ESC><ESC> <ESC>:q<CR>
""""""""""""""""""""""""""""""
NERDTreeでツリー型のファイル表示を実現
プロジェクト全体のファイル構成を把握する場合は、ファイルをツリー型に表示できた方が便利です。
NERDTreeというプラグインを入れると:NERDTree
というコマンドでカレントディレクトリをツリー表示できます。
また、ファイルを選んでリターンキーを押すと、そのファイルを開くこともできます。
設定
僕はプラグインを入れているだけで、他に特別な設定はしていません。
" ファイルをtree表示してくれる
NeoBundle 'scrooloose/nerdtree'
fugitive.vimでVimからGitを操作 (でも一番よく使うのはgrep検索)
fugitive.vimを使えば、いちいちターミナルを開かなくてもVim上からGitコマンドを自由に実行できる!・・・のかな?
いろいろとコマンドはあるみたいですが、実はあまり使いこなせていません。(ごめんなさい)
個人的に便利だと思うのは:Ggrep hogehoge
のようなコマンドを使うと、Gitで管理されているファイルをgrep検索できる点です。
検索結果はQuickfix Listに表示され、その行でリターンキーを押すと該当行にジャンプすることができます。
あとは:Gread
で変更前の状態に戻したりするときにも使いますね。
それ以外のコマンドについてはネットの情報を参考にして、みなさんは僕以上に使いこなしてくださいw
設定
fugitive.vimには先ほどの:Ggrep
を実行したあとにQuickFix Listが開くようにしています。
また、ステータス行に現在のブランチを表示する機能もあるのでその設定も入れています。
" Gitを便利に使う
NeoBundle 'tpope/vim-fugitive'
" grep検索の実行後にQuickFix Listを表示する
autocmd QuickFixCmdPost *grep* cwindow
" ステータス行に現在のgitブランチを表示する
set statusline+=%{fugitive#statusline()}
vim-railsでRailsプロジェクトを便利に操作
vim-railsというプラグインを導入すると、Rails向けの便利なコマンドが使えるようになります。
例えば:Rmodel user
と打ち込めばUserモデルを開くことができる、といった具合です。
とはいえ、こちらのプラグインもたくさんある機能の割にはそれほど使いこなせていないかも・・・。
目的のファイルを開くだけなら、前述のUnite.vimやNERDTreeを使って開くこともしばしばです。
設定
やはりこれもプラグインを入れているだけです。
" Rails向けのコマンドを提供する
NeoBundle 'tpope/vim-rails'
endwise.vimでRubyのendキーワードを自動挿入
endwise.vimはRubyのプログラムを書くときに必携ですね!
Rubyファイルでdoブロックやif文を書いて改行すると、自動的にendキーワードを挿入してくれます。
Rubyを書いているプログラマは必ず入れておきましょう。
設定
こちらもプラグインをインストールするだけでOK!簡単&便利ですね。
" Ruby向けにendを自動挿入してくれる
NeoBundle 'tpope/vim-endwise'
tcomment_vimで複数行コメントのON/OFFを手軽に実現
tcomment_vimも非常に便利なプラグインです。
Shift+Vで対象の範囲を選択し、Ctrl+-(コントロールキー+ハイフン)を2回押すだけで、その範囲をまとめてコメントアウトしたり、コメントを外したりできます。
矩形選択(Ctrl+V)を駆使して頑張るよりもずっと手軽にコメントON/OFFできます。
設定
こちらもプラグインを入れるだけです。
コメントのON/OFFはCtrl+-のほか、gccでも実現できます。
" コメントON/OFFを手軽に実行
NeoBundle 'tomtom/tcomment_vim'
surround.vimでシングルクオートとダブルクオートを切り替える
それほど頻度は多くないかもしれませんが、シングルクオートで囲んでいた文字列をダブルクオートに変えたい、と思うときがたまにあります。
(注: Rubyではダブルクオートの文字列のみ変数を埋め込める)
surround.vimを使うと、cs'" というコマンドでシングルクオートをダブルクオートに置換することができます。
他にもcs'<p>と打ち込むと、シングルクオート文字列を<p>タグで囲むこともできたりして、応用的な使い方がいろいろできます。
設定
これもやはりプラグインを入れるだけでOKです。
" シングルクオートとダブルクオートの入れ替え等
NeoBundle 'tpope/vim-surround'
vim-indent-guidesを使ってインデントの深さを視覚化する
Rubyのメソッドを書いたりするときは行数が多くなったりインデントが深くなったりしないように気をつけて書くことができますが、HAMLでViewを書いたりする場合はどうしてもネストが深くなったり長くなったりしがちです。
そんなときはvim-indent-guidesを使ってインデントを視覚化してやると、どこからどこまでがそのネストに含まれるのかを把握しやすくなります。
設定
このプラグインは1行だけ設定が必要です。
" インデントに色を付けて見やすくする
NeoBundle 'nathanaelkane/vim-indent-guides'
" vimを立ち上げたときに、自動的にvim-indent-guidesをオンにする
let g:indent_guides_enable_on_vim_startup = 1
AnsiEsc.vimでログの内容を色づけ
AnsiEsc.vimを使うとRailsのログファイルなど、ANSIカラー情報が埋め込まれているファイルを開くとそのカラー情報が表示に反映されます。
設定
このプラグインはインストールするだけでOKです。
" ログファイルを色づけしてくれる
NeoBundle 'vim-scripts/AnsiEsc.vim'
vim-trailing-whitespaceで行末の不要な半角スペースを可視化
vim-trailing-whitespaceを使うと、行末に入ってしまった不要な半角スペースを可視化してくれます。
さらに、:FixWhitespace
というコマンドを実行すると、そうしたスペースを自動的に削除してくれます。
・・・なのですが、僕の環境ではちゃんと動いてくれません。
行末に半角スペースを入れた直後はハイライトしてくれるんですが、バッファを切り替えたりするとハイライトがなくなってしまいます。
常にハイライトしてくれるとすごく便利なんですけどね~。
(2014.06.10修正)
後述する「全角スペースの可視化」と設定がケンカしているのが原因でした。全角スペースの可視化設定を見直すことで常にハイライトされるようになりました。
設定
このプラグインもインストールするだけでOKです。
" 行末の半角スペースを可視化
NeoBundle 'bronson/vim-trailing-whitespace'
その他、.vimrcで追加しておくと便利な設定
ついでにプラグインとは無関係に.vimrcで設定しておくと便利な内容を載せておきます。
全角スペースの可視化
以下のような設定をしておくと、全角スペースが可視化されます。
・・・が、半角スペースのときと同じで可視化されたりしなかったりです。
なぜだ。
(2014.06.10修正)
autocmdのイベントにBufRead
を追加することで全角スペースが常に可視化されるようになりました。
また、match関数は最後のmatch設定だけが有効になってしまうため、「半角スペースの可視化」が無効になっていました。
matchを複数定義するときはmatchadd関数を使うといいようです。
以下のサンプルコードは上記の内容を反映済みです。
" http://inari.hatenablog.com/entry/2014/05/05/231307
""""""""""""""""""""""""""""""
" 全角スペースの表示
""""""""""""""""""""""""""""""
function! ZenkakuSpace()
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
endfunction
if has('syntax')
augroup ZenkakuSpace
autocmd!
autocmd ColorScheme * call ZenkakuSpace()
autocmd VimEnter,WinEnter,BufRead * let w:m1=matchadd('ZenkakuSpace', ' ')
augroup END
call ZenkakuSpace()
endif
""""""""""""""""""""""""""""""
挿入モード時にステータス行の色を変える
以下のような設定をしておくと、挿入モード時にステータス行の色を変えることができます。
モードが切り替わったことを目で確認できるので結構便利です。
" https://sites.google.com/site/fudist/Home/vim-nihongo-ban/-vimrc-sample
""""""""""""""""""""""""""""""
" 挿入モード時、ステータスラインの色を変更
""""""""""""""""""""""""""""""
let g:hi_insert = 'highlight StatusLine guifg=darkblue guibg=darkyellow gui=none ctermfg=blue ctermbg=yellow cterm=none'
if has('syntax')
augroup InsertHook
autocmd!
autocmd InsertEnter * call s:StatusLine('Enter')
autocmd InsertLeave * call s:StatusLine('Leave')
augroup END
endif
let s:slhlcmd = ''
function! s:StatusLine(mode)
if a:mode == 'Enter'
silent! let s:slhlcmd = 'highlight ' . s:GetHighlight('StatusLine')
silent exec g:hi_insert
else
highlight clear StatusLine
silent exec s:slhlcmd
endif
endfunction
function! s:GetHighlight(hi)
redir => hl
exec 'highlight '.a:hi
redir END
let hl = substitute(hl, '[\r\n]', '', 'g')
let hl = substitute(hl, 'xxx', '', '')
return hl
endfunction
""""""""""""""""""""""""""""""
自動的に閉じ括弧を入力する
以下の設定を入れると、{, [, (を入力したときに閉じ括弧を自動的に入力してくれます。
が、あまり賢くないので「そこは入れてくれなくていいのに」と思うときもしばしばあります。お好みでどうぞ。
""""""""""""""""""""""""""""""
" 自動的に閉じ括弧を入力
""""""""""""""""""""""""""""""
imap { {}<LEFT>
imap [ []<LEFT>
imap ( ()<LEFT>
""""""""""""""""""""""""""""""
最後のカーソル位置を復元する
以下の設定を入れておくと、ファイルを開いたときに前回開いたときの最後のカーソル位置を復元してくれます
""""""""""""""""""""""""""""""
" 最後のカーソル位置を復元する
""""""""""""""""""""""""""""""
if has("autocmd")
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
endif
""""""""""""""""""""""""""""""
その他、設定もろもろ
その他、僕の.vimrcで入れているVimのオプションを以下に載せておきます。
コメントを参考にして、お好みで取り込んでください。
""""""""""""""""""""""""""""""
" 各種オプションの設定
""""""""""""""""""""""""""""""
" タグファイルの指定(でもタグジャンプは使ったことがない)
set tags=~/.tags
" スワップファイルは使わない(ときどき面倒な警告が出るだけで役に立ったことがない)
set noswapfile
" カーソルが何行目の何列目に置かれているかを表示する
set ruler
" コマンドラインに使われる画面上の行数
set cmdheight=2
" エディタウィンドウの末尾から2行目にステータスラインを常時表示させる
set laststatus=2
" ステータス行に表示させる情報の指定(どこからかコピペしたので細かい意味はわかっていない)
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
" ステータス行に現在のgitブランチを表示する
set statusline+=%{fugitive#statusline()}
" ウインドウのタイトルバーにファイルのパス情報等を表示する
set title
" コマンドラインモードで<Tab>キーによるファイル名補完を有効にする
set wildmenu
" 入力中のコマンドを表示する
set showcmd
" バックアップディレクトリの指定(でもバックアップは使ってない)
set backupdir=$HOME/.vimbackup
" バッファで開いているファイルのディレクトリでエクスクローラを開始する(でもエクスプローラって使ってない)
set browsedir=buffer
" 小文字のみで検索したときに大文字小文字を無視する
set smartcase
" 検索結果をハイライト表示する
set hlsearch
" 暗い背景色に合わせた配色にする
set background=dark
" タブ入力を複数の空白入力に置き換える
set expandtab
" 検索ワードの最初の文字を入力した時点で検索を開始する
set incsearch
" 保存されていないファイルがあるときでも別のファイルを開けるようにする
set hidden
" 不可視文字を表示する
set list
" タブと行の続きを可視化する
set listchars=tab:>\ ,extends:<
" 行番号を表示する
set number
" 対応する括弧やブレースを表示する
set showmatch
" 改行時に前の行のインデントを継続する
set autoindent
" 改行時に入力された行の末尾に合わせて次の行のインデントを増減する
set smartindent
" タブ文字の表示幅
set tabstop=2
" Vimが挿入するインデントの幅
set shiftwidth=2
" 行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする
set smarttab
" カーソルを行頭、行末で止まらないようにする
set whichwrap=b,s,h,l,<,>,[,]
" 構文毎に文字色を変化させる
syntax on
" カラースキーマの指定
colorscheme desert
" 行番号の色
highlight LineNr ctermfg=darkyellow
""""""""""""""""""""""""""""""
余談: neocomplete.vimは使わないの?
便利なプラグインと言えば、賢く自動補完してくれるneocomplete.vimというプラグインが有名です。
しかし僕はこのプラグインを使っていません。
一回導入したことがあるのですが、どうも肌に合わず使うのをやめてしまいました。(使いこなせなかっただけ、という話もある)
Vimには挿入モード時にCtrl+PやCtrl+Nで単純な単語補完をやってくれるので、僕はこの機能を多用しています。
8割ぐらいはこれで十分間に合うので、自動補完系のプラグインは入れていません。
まとめ
言うまでもなくVimの世界は奥がめちゃくちゃ深いので、すごい人の.vimrcはとんでもなくすごいです。
が、今回の記事ではそこまで深いところまでは足を踏み入れずに「比較的簡単にそこそこ使えるプラグインや.vimrcの設定」を集めてみました。
脱初心者を目指すVimmerのみなさんは、よかったら参考にしてみてください。
僕の.vimrcはこちらです
JunichiIto/dotfiles/.vimrc - GitHub
冒頭でも紹介しましたが、僕の.vimrcはGitHubに置いてあるので今回の記事とあわせてチェックしてみると効果的です。
あわせて読みたい
僕がサクラエディタからVimに乗り換えるまで - give IT a try
数年前は僕も全くVimが使えず、サクラエディタのような「メモ帳の延長線上にあるテキストエディタ」を使っていました。
そんな僕がVimに乗り換えようと思った動機と、乗り換えるまでにやったトレーニング(?)の数々を公開しています。
Vimコマンドを定期的にツイートするbotも作っています
Vimコマンドの勉強用に作った@be_vimmer_jpというbotがあります。
このbotをフォローすると定期的にVimコマンドの内容をランダムにツイートしてくれます。
よかったらフォローしてみてください。
開発の経緯はこちらのブログエントリにまとめてあります。
Vimコマンドを定期的に解説してくれるTwitterボットを作りました - give IT a try
次回予告? 次は「脱初心者を目指すVimmerにオススメしたい便利なVimコマンド集」を書くかも
時間があれば次は「Vimってやっぱり便利だわ~」としみじみ思う便利なVimコマンドをまとめて紹介したいな~と思っています。
記事が書けたらまた読んでやってください。
gq{motion}: Format the lines that {motion} moves over.
gq{motion}: Format the lines that {motion} moves over.
Spelling suggestions
insert mode で <C-X><C-S>
すると、スペル補完ができる.
でも、<C-S>
すると、画面がロックされてしまうので, 代わりに <C-X>s
を使用する.
ロックされてしまった場合には <C-Q>
で解除.
Spelling suggestions *compl-spelling*
NOTE: CTRL-S suspends display in many Unix terminals. Use 's' instead. Type
CTRL-Q to resume displaying.
VIm tips:wordとWORD
vimにおいて、wordとWORDは違う
wordとは
「アルファベット、数字、アンダースコアのいずれかが並んだもの」または「その三種類以外の非空白文字が並んだもの」
WORDとは
「非空白文字が並んだもの」
具体例
具体例を見た方が分かり易いので、例を挙げます。
wコマンドで word単位の移動、WコマンドでWORD単位の移動ができます(後退ならb及びB)
これを用いて、以下の分がwordとWORDでどのように分けられるのかを見てみます。
例1:
$this->getUser()->isAuthenticated()
wordの場合、 \$, this, ->, getUser, ()->, isAuthenticated, () の7つ。
WORDの場合、 $this->getUser()->isAuthenticated() で1つ。
例2:
foreach (\$tags as $tag)
wordの場合、 foreach, (\$, tags, as, \$, tag, ) の7つ。
WORDの場合、 foreach, (\$tags, as, \$tag) で4つ。
うまく使い分けると更なる高速化が期待できそうな気がします。
vimrcを編集したら自動で反映する
表題どおりの件です。
基本的な設定
ひとまず自分がvimrcの頭に記載している設定を掲載
詳細は下に
" init all settingssetall&
" init autocmd
autocmd!" set script encodingscriptencoding utf-8" tiny と small では これ以上 vimrc を読み込まないif!1|finish|endif" This is vim, not vi.setnocompatible" syntax hilightsyntax enable
" auto reload .vimrc
augroup source-vimrc
autocmd!
autocmd BufWritePost *vimrc source $MYVIMRC |setfoldmethod=marker
autocmd BufWritePost *gvimrc if has('gui_running') source $MYGVIMRC
augroup END
vimrcの再読み込み
少なくとも再読み込みに必要なのは以下の設定
vimrcと名前のつくファイルを更新したら、source $MYVIMRC
を実行
" auto reload .vimrc
augroup source-vimrc
autocmd!
autocmd BufWritePost *vimrc source $MYVIMRC |setfoldmethod=marker
autocmd BufWritePost *gvimrc if has('gui_running') source $MYGVIMRC
augroup END
参考:
Hack #74: 簡単にvimrcを編集する
Vimでvimrcを編集しやすくする記述とvimrcのリロードでモードラインの設定が無視される問題
普段gvimは使わないのでよく知りませんが、
gvimの場合は、sourceするだけでは反映されない設定があるようなので
tyruさんの、restart.vim あたりをつかうと捗るらしいです(要検証
参考:
[vim]現在の状態を復元して gVim を再起動する
再読み込み前に設定をリセット
ただこれだけだと、例えば set expandtab
などをコメントアウトした場合に、
Tabが入力される状態に戻ってくれなかったりする。( set noexpandtab
としないといけない )
ちょっとそれは面倒なので、再読み込みのたびに最初に設定をデフォルトに戻す。
" init all settingssetall&
これで set expandtab
をコメントアウトか削除するだけで、すぐにTabが入力される状態になった。
ついでにgroup設定のされていない autocmd
もリセットしているけれども、必要性は不明
" init autocmd
autocmd!
ついでにすぐにvimrcを開けるようにする
自分は ,v
でvimrcを開くようにしています。
" Edit vimrc
nmap ,v :edit $MYVIMRC<CR>