Skip to content

Instantly share code, notes, and snippets.

@touyou
Last active June 3, 2016 02:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save touyou/9737085 to your computer and use it in GitHub Desktop.
Save touyou/9737085 to your computer and use it in GitHub Desktop.
my .vimrc current version on ubuntu
"------------------------------------------------------------------------------
" .vimrc edited by touyou
" 趣旨:
" + Windows/Ubuntu、および将来的にはMacでも共通して使えるようにする
" + プログラミングに関して快適であるようにする
" + プラグインは最低限かつ簡易な管理方法を徹底
" + 検索はあまり使わないのでとりあえず適当な感じに
" + 補完は今のところ邪魔でしかないのでとりあえずコメントアウト中
" vimに関しては素人なのでなにかあれば指摘お願いします。
"------------------------------------------------------------------------------
set nocompatible
scriptencoding utf-8
set fileformat=unix
"scriptencodingと、このファイルのエンコーディングが一致するよう注意!
"scriptencodingは、vimの内部エンコーディングと同じものを推奨します。
"改行コードは set fileformat=unix に設定するとunixでも使えます。
"----------------------------------------
" ユーザーランタイムパス設定
"----------------------------------------
"Windows, unixでのruntimepathの違いを吸収するためのもの。
"$MY_VIMRUNTIMEはユーザーランタイムディレクトリを示す。
":echo $MY_VIMRUNTIMEで実際のパスを確認できます。
if isdirectory($HOME . '/.vim')
let $MY_VIMRUNTIME = $HOME.'/.vim'
elseif isdirectory($HOME . '\vimfiles')
let $MY_VIMRUNTIME = $HOME.'\vimfiles'
elseif isdirectory($VIM . '\vimfiles')
let $MY_VIMRUNTIME = $VIM.'\vimfiles'
endif
"ランタイムパスを通す必要のあるプラグインを使用する場合
"$MY_VIMRUNTIMEを使用すると Windows/Linuxで切り分ける必要が無くなります。
"例) vimfiles/qfixapp (Linuxでは~/.vim/qfixapp)にランタイムパスを通す場合
"set runtimepath+=$MY_VIMRUNTIME/qfixapp
"----------------------------------------
" 内部エンコーディング指定
"----------------------------------------
"内部エンコーディングのUTF-8化と文字コードの自動認識設定をencode.vimで行う。
"オールインワンパッケージの場合 vimrcで設定されているので何もしない。
"エンコーディング指定や文字コードの自動認識設定が適切に設定されている場合、
"次行の encode.vim読込部分はコメントアウトして下さい。「encode.vimについて」
source $MY_VIMRUNTIME/plugin/encode.vim
"scriptencodingと異なる内部エンコーディングに変更する場合、
"変更後にもscriptencodingを指定しておくと問題が起きにくくなります。
scriptencoding utf-8
"------------------------------------------------------------------------------
" 以下、http://lambdalisue.hatenablog.com/entry/2013/06/23/07134の一部を改変したもの
"------------------------------------------------------------------------------
" release autogroup in MyAutoCmd
augroup MyAutoCmd
autocmd!
augroup END
"------------------------------------------------
" NeoBundle関係
"------------------------------------------------
let s:noplugin = 0
let s:bundle_root = expand('$MY_VIMRUNTIME/bundle')
let s:neobundle_root = s:bundle_root . '/neobundle.vim'
if !isdirectory(s:neobundle_root) || v:version < 702
" NeoBundleが存在しない、もしくはVimのバージョンが古い場合はプラグインを一切
" 読み込まない
let s:noplugin = 1
else
" NeoBundleを'runtimepath'に追加し初期化を行う
if has('vim_starting')
execute "set runtimepath+=" . s:neobundle_root
endif
call neobundle#begin(s:bundle_root)
" NeoBundle自身をNeoBundleで管理させる
NeoBundleFetch 'Shougo/neobundle.vim'
" 非同期通信を可能にする
" 'build'が指定されているのでインストール時に自動的に
" 指定されたコマンドが実行され vimproc がコンパイルされる
NeoBundle "Shougo/vimproc", {
\ "build": {
\ "windows" : "make -f make_mingw32.mak",
\ "cygwin" : "make -f make_cygwin.mak",
\ "mac" : "make -f make_mac.mak",
\ "unix" : "make -f make_unix.mak",
\ }}
" 以下プラグインの羅列
" Git関係
NeoBundleLazy "mattn/gist-vim", {
\ "depends": ["mattn/webapi-vim"],
\ "autoload": {
\ "commands": ["Gist"],
\ }}
" Undoを便利にする
NeoBundleLazy "sjl/gundo.vim", {
\ "autoload": {
\ "commands": ['GundoToggle'],
\}}
nnoremap <Leader>g :GundoToggle<CR>
" Python補完・リファクタリング・リファレンス環境
NeoBundleLazy "davidhalter/jedi-vim", {
\ "autoload": {
\ "filetypes": ["python", "python3", "djangohtml"],
\ },
\ "build": {
\ "mac": "pip install jedi",
\ "unix": "pip install jedi",
\ }}
let s:hooks = neobundle#get_hooks("jedi-vim")
function! s:hooks.on_source(bundle)
" jediにvimの設定を任せると'completeopt+=preview'するので
" 自動設定機能をOFFにし手動で設定を行う
let g:jedi#auto_vim_configuration = 0
" 補完の最初の項目が選択された状態だと使いにくいためオフにする
let g:jedi#popup_select_first = 0
" quickrunと被るため大文字に変更
let g:jedi#rename_command = '<Leader>R'
" gundoと被るため大文字に変更 (2013-06-24 10:00 追記)
let g:jedi#goto_assignments_command = '<Leader>G'
endfunction
" 構文間違え指摘
NeoBundle "scrooloose/syntastic", {
\ "build": {
\ "mac": ["pip install flake8", "npm -g install coffeelint"],
\ "unix": ["pip install flake8", "npm -g install coffeelint"],
\ }}
" tagbar
NeoBundle 'majutsushi/tagbar'
" vim compiler file for go
NeoBundle "rjohnsondev/vim-compiler-go"
" dogelang mode
NeoBundle 'rubik/vim-dg'
" Djangoを正しくVimで読み込めるようにする
NeoBundleLazy "lambdalisue/vim-django-support", {
\ "autoload": {
\ "filetypes": ["python", "python3", "djangohtml"]
\ }}
" vim-fugitiveは'autocmd'多用してるっぽくて遅延ロード不可
NeoBundle "tpope/vim-fugitive"
NeoBundleLazy "gregsexton/gitv", {
\ "depends": ["tpope/vim-fugitive"],
\ "autoload": {
\ "commands": ["Gitv"],
\ }}
" vim-go
NeoBundle 'fatih/vim-go'
" vim-godef
NeoBundle 'dgryski/vim-godef'
" vim-go-extra
NeoBundle 'vim-jp/vim-go-extra'
" インデントの可視化
NeoBundle "nathanaelkane/vim-indent-guides"
" let g:indent_guides_enable_on_vim_startup = 1 2013-06-24 10:00 削除
let s:hooks = neobundle#get_hooks("vim-indent-guides")
function! s:hooks.on_source(bundle)
let g:indent_guides_guide_size = 1
" IndentGuidesEnable " 2013-06-24 10:00 追記
endfunction
" プログラムの即時実行
NeoBundleLazy "thinca/vim-quickrun", {
\ "autoload": {
\ "mappings": [['nxo', '<Plug>(quickrun)']]
\ }}
nmap <Leader>r <Plug>(quickrun)
let s:hooks = neobundle#get_hooks("vim-quickrun")
function! s:hooks.on_source(bundle)
let g:quickrun_config = {
\ "*": {"runner": "remote/vimproc"},
\ }
endfunction
" Vimで正しくvirtualenvを処理できるようにする
NeoBundleLazy "jmcantrell/vim-virtualenv", {
\ "autoload": {
\ "filetypes": ["python", "python3", "djangohtml"]
\ }}
" Markdown Preview
NeoBundle 'plasticboy/vim-markdown'
NeoBundle 'kannokanno/previm'
NeoBundle 'tyru/open-browser.vim'
au BufRead,BufNewFile *.md set filetype=markdown
let g:previm_open_cmd = 'open -a Chrome'
" lightline
" NeoBundle 'itchny/lightline.vim'
" railscasts-earthtone
NeoBundle 'KeitaNakamura/railscasts-earthtone.vim'
" インストールされていないプラグインのチェックおよびダウンロード
NeoBundleCheck
call neobundle#end()
endif
" ファイルタイププラグインおよびインデントを有効化
" これはNeoBundleによる処理が終了したあとに呼ばなければならない
filetype plugin indent on
"------------------------------------------------
" 検索関係
"------------------------------------------------
set ignorecase " 大文字小文字を区別しない
set smartcase " 検索文字に大文字がある場合は大文字小文字を区別
set incsearch " インクリメンタルサーチ(≒逐次検索)
set hlsearch " 検索マッチテキストをハイライト (2013-07-03 14:30 修正)
set wrapscan " 検索時にファイルの最後まで行ったら最初に戻る
" バックスラッシュやクエスチョンを状況に合わせ自動的にエスケープ
cnoremap <expr> / getcmdtype() == '/' ? '\/' : '/'
cnoremap <expr> ? getcmdtype() == '?' ? '\?' : '?'
"------------------------------------------------
" 編集関係
"------------------------------------------------
set shiftround " '<'や'>'でインデントする際に'shiftwidth'の倍数に丸める
set infercase " 補完時に大文字小文字を区別しない
set virtualedit=all " カーソルを文字が存在しない部分でも動けるようにする
set hidden " バッファを閉じる代わりに隠す(Undo履歴を残すため)
set switchbuf=useopen " 新しく開く代わりにすでに開いてあるバッファを開く
set showmatch " 対応する括弧などをハイライト表示する
set matchtime=3 " 対応括弧のハイライト表示を3秒にする
set ts=4 sw=4 sts=4 " タブを設定
set autoindent " 自動的にインデントする
set smartindent " 賢いインデント
set cindent " さらに賢いインデント
set cinoptions+=:0 " Cインデントの設定
set expandtab " TABを押した時に空白で代用
set smarttab " 行頭でTABを押した時、自動インデントする
" 対応括弧に'<'と'>'のペアを追加
set matchpairs& matchpairs+=<:>
" バックスペースでなんでも消せるようにする
set backspace=indent,eol,start
" クリップボードをデフォルトのレジスタとして指定。後にYankRingを使うので
" 'unnamedplus'が存在しているかどうかで設定を分ける必要がある
if has('unnamedplus')
" set clipboard& clipboard+=unnamedplus " 2013-07-03 14:30 unnamed 追加
set clipboard& clipboard+=unnamedplus,unnamed
else
" set clipboard& clipboard+=unnamed,autoselect 2013-06-24 10:00 autoselect 削除
set clipboard& clipboard+=unnamed
endif
" Swapファイル?Backupファイル?前時代的すぎ
" なので全て無効化する
set nowritebackup
set nobackup
set noswapfile
"------------------------------------------------
" 表示関係
"------------------------------------------------
set list " 不可視文字の可視化
set number " 行番号の表示
set wrap " 長いテキストの折り返し
set textwidth=0 " 自動的に改行が入るのを無効化
set colorcolumn=80 " その代わり80文字目にラインを入れる
set shortmess+=I " 起動時のメッセージを表示しない
set shellslash " Windowsでディレクトリパスの区切り文字表示に / を使えるようにする
set title " タイトルを表示
set ruler " ルーラーを表示
set cmdheight=2 " コマンドラインの高さ
set laststatus=2
set showcmd " コマンドをステータスラインに表示
syntax on " ハイライトシンタックスをonに
" 前時代的スクリーンベルを無効化
set t_vb=
set novisualbell
" デフォルト不可視文字は美しくないのでUnicodeで綺麗に
set listchars=tab:»-,trail:-,extends:»,precedes:«,nbsp:%,eol:↲
" colorschem
colorscheme railscasts-earthtone
let g:lightline = {}
let g:lightline.colorscheme = 'railscats_earthtone'
set laststatus=2
"------------------------------------------------
" マクロおよびキー設定
"------------------------------------------------
"----------------------------------------
" ノーマルモード(旧版より引き継ぎ)
"----------------------------------------
"ヘルプ検索
nnoremap <F1> K
"現在開いているvimスクリプトファイルを実行
nnoremap <F8> :source %<CR>
"強制全保存終了を無効化
nnoremap ZZ <Nop>
"カーソルをj k では表示行で移動する。物理行移動は<C-n>,<C-p>
"キーボードマクロには物理行移動を推奨
"h l はノーマルモードのみ行末、行頭を超えることが可能に設定(whichwrap)
" zvはカーソル位置の折り畳みを開くコマンド
nnoremap <Down> gj
nnoremap <Up> gk
nnoremap h <Left>zv
nnoremap j gj
nnoremap k gk
nnoremap l <Right>zv
"----------------------------------------
" 挿入モード
"----------------------------------------
"十字キーバグ解消
imap OA <Up>
imap OB <Down>
imap OC <Right>
imap OD <Left>
imap [3~ <Delete>
"----------------------------------------
" コマンドモード
"----------------------------------------
"Windowsのメモ帳ライクのマッピング
map <C-A> ggVG
map <C-X> "+x
map <C-C> "+y
map <C-V> "+gP
map <C-S> :w
map <C-F> :brows confirm e
"------------------------------------------------
" システム設定(旧版.vimrcより引き継ぎ)
"------------------------------------------------
" マウスを有効化
if has('mouse')
set mouse=a
endif
" 8進数を無効にする。<C-a>,<C-x>に影響する
set nrformats-=octal
" キーコードやマッピングされたキー列が完了するのを待つ時間(ミリ秒)
set timeoutlen=3500
" ヒストリの保存数
set history=50
" 日本語の行の連結時には空白を入力しない
set formatoptions+=mM
" Visual blockモードでフリーカーソルを有効にする
set virtualedit=block
" カーソルキーで行末/行頭の移動可能に設定
set whichwrap=b,s,h,l,[,],<,>
" □や○の文字があってもカーソル位置がずれないようにする
set ambiwidth=double
" コマンドライン補完するときに強化されたものを使う
set wildmenu
"------------------------------------------------
" その他(旧版.vimrc引き継ぎ)
"------------------------------------------------
"----------------------------------------
" ステータスラインに文字コードやBOM、16進表示等表示
" iconvが使用可能の場合、カーソル上の文字コードをエンコードに応じた表示にするFencB()を使用
"----------------------------------------
if has('iconv')
set statusline=%<%f\ %m\ %r%h%w%{'['.(&fenc!=''?&fenc:&enc).(&bomb?':BOM':'').']['.&ff.']'}%=[0x%{FencB()}]\ (%v,%l)/%L%8P\
else
set statusline=%<%f\ %m\ %r%h%w%{'['.(&fenc!=''?&fenc:&enc).(&bomb?':BOM':'').']['.&ff.']'}%=\ (%v,%l)/%L%8P\
endif
function! FencB()
let c = matchstr(getline('.'), '.', col('.') - 1)
let c = iconv(c, &enc, &fenc)
return s:Byte2hex(s:Str2byte(c))
endfunction
function! s:Str2byte(str)
return map(range(len(a:str)), 'char2nr(a:str[v:val])')
endfunction
function! s:Byte2hex(bytes)
return join(map(copy(a:bytes), 'printf("%02X", v:val)'), '')
endfunction
"----------------------------------------
" 全角スペースを表示
"----------------------------------------
" コメント以外で全角スペースを指定しているので、scriptencodingと、
" このファイルのエンコードが一致するよう注意!
" 強調表示されない場合、ここでscriptencodingを指定するとうまくいく事があります。
"scriptencoding utf-8
" デフォルトのZenkakuSpaceを定義
function! ZenkakuSpace()
highlight ZenkakuSpace cterm=underline ctermfg=darkgrey gui=underline guifg=darkgrey
endfunction
if has('syntax')
augroup ZenkakuSpace
autocmd!
" ZenkakuSpaceをカラーファイルで設定するなら次の行は削除
autocmd ColorScheme * call ZenkakuSpace()
" 全角スペースのハイライト指定
autocmd VimEnter,WinEnter * match ZenkakuSpace / /
augroup END
call ZenkakuSpace()
endif
"----------------------------------------
" Windowsで内部エンコーディングがcp932以外の場合
" makeのメッセージが化けるのを回避
"----------------------------------------
if has('win32') || has('win64') || has('win95') || has('win16')
au QuickfixCmdPost make call QFixCnv('cp932')
endif
function! QFixCnv(enc)
if a:enc == &enc
return
endif
let qflist = getqflist()
for i in qflist
let i.text = iconv(i.text, a:enc, &enc)
endfor
call setqflist(qflist)
endfunction
"----------------------------------------
"grep,tagsのためカレントディレクトリをファイルと同じディレクトリに移動する
"----------------------------------------
if exists('+autochdir')
"autochdirがある場合カレントディレクトリを移動
set autochdir
else
"autochdirが存在しないが、カレントディレクトリを移動したい場合
au BufEnter * execute ":silent! lcd " . escape(expand("%:p:h"), ' ')
endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment