読者です 読者をやめる 読者になる 読者になる

300億円欲しい

メジャーリーグのデータ解析します

Vimrcを晒す

Vimrc

Vimfiler, Vimshell, Unite は入れただけで殆ど使っていません。
これから勉強します。ごめんなさい。
Bundleのままです。NeoBundleに移行していません。ごめんなさい。

" 色々 set
set number
set clipboard=unnnamed
set clipboard=autoselect
set smartindent
set ruler
syntax on
set shiftwidth=4
set nocompatible 
set smarttab
set tabstop=1
set expandtab
set showcmd
set autoindent
set backspace=indent,eol,start
set title
set nrformats-=octal
set noswapfile
set linebreak
set autoread
set completeopt=menuone
set nobackup

" カーソル位置を目立たせる
set cursorline
set cursorcolumn
hi clear CursorLine
set hlsearch
nnoremap <esc><esc> :nohlsearch<cr><esc>:set nopaste<cr>

" F2, F3 でバッファの切替
map <F2> <esc>:bp<cr>
map <F3> <esc>:bn<cr>

" 全角スペースを見やすく表示する
if has('syntax')
  syntax enable
  function! ActivateInvisibleIndicator()
    highlight ZenkakuSpace cterm=underline ctermfg=darkgrey gui=underline guifg=#FF0000
    match ZenkakuSpace / /
  endfunction
  augroup InvisibleIndicator
    autocmd!
    autocmd BufEnter * call ActivateInvisibleIndicator()
  augroup END
endif

" 矢印キーの有効化 (甘え)
inoremap OA <up>
inoremap OB <down>
inoremap OC <right>
inoremap OD <left>

" カッコ等の入力補助
inoremap {} {}<LEFT>
inoremap [] []<LEFT>
inoremap () ()<LEFT>
inoremap "" ""<left>
inoremap '' ''<left>
inoremap $$ $$<left>
inoremap <> <><left>
inoremap `` ``<left>
inoremap {<cr> {}<cr><cr><up><tab>

" コピペ用
vnoremap <C-c> y:call system("pbcopy", getreg("\""))<CR>
nnoremap <Space><C-v> :call setreg("\"",system("pbpaste"))<CR>p
" 全選択 全コピー (甘え)
nnoremap <F5> ggVG
nnoremap <F6> :%y<cr> 

" vim-smartchrの利用
" 矢印は","を連打すれば出てくるようにできる
" HaskellやRで便利
" 思案中
inoremap <buffer> <expr> , smartchr#loop(',' , '<-', '->',  '<=', '=>')


" 移動など <C-j>はESCに
inoremap <C-h> <left>
inoremap <C-j> <esc> 
vnoremap <C-j> <esc> 
inoremap <C-k> <UP>
inoremap <C-l> <right>
inoremap <C-d> <delete>
inoremap <C-w> <BS>

" C-space は何に割り当てるのがいいのかな
"inoremap <Nul> <cr> 

" コンパイルと実行 (甘え)
autocmd FileType r nnoremap <C-e> :w!<cr><esc>:! R -q -f %<cr>
autocmd FileType cpp nnoremap <C-w> :! ./%<
autocmd FileType cpp nnoremap <C-e> :w!<cr><esc>:! g++  -o %< % 
autocmd FileType haskell nnoremap <C-w> :! ./%<
autocmd FileType haskell nnoremap <C-e> :w!<cr>:! ghc %

" 行末、行頭への移動
nnoremap  <C-y> $
inoremap  <C-y> <esc>$i<right>

" 最後に変更した場所へ戻る(便利)
map <C-m> `.

" コロン付き改行とただの改行(便利)
inoremap <C-o> <esc>$i<right><Enter>
"inoremap <C-g> <esc>$i<right>;<Enter>
inoremap <C-g> <esc>$i<right>;

" Vimshell関連 使いこなせない
nnoremap <silent> ,is :VimShell<cr>
nnoremap <silent> ,irr :VimShellInteractive R<cr>
nnoremap <silent> ,ih  :VimShellInteractive ghci<cr>
vnoremap <silent> ,ss :VimShellSendString<cr>
nnoremap <silent> ,ss <S-v>:VimShellSendString<cr>

" TAB で補完候補の選択
inoremap <expr><TAB> pumvisible() ? "\<down>" : "\<tab>" 
inoremap <expr><s-tab> pumvisible() ? "\<up>" : "\<S-tab>"

"  ページ移動関連 
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
nnoremap n nzz
nnoremap N Nzz

" ウィンドウの移動
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
nnoremap <C-h> <C-w>h

" 新しいウィンドウは右に, 下に
set splitbelow
set splitright

" 保存とか (甘え)
nnoremap ww :w! 
nnoremap qq :q! 
nnoremap ,vim :vsplit<cr><C-l>:e! $HOME/_vimrc<cr>
nnoremap ee <esc>:e!

" 色々開けるように
set fileencodings=iso-2022-jp,euc-jp,cp932,ucs-bom,utf-8,default,latin1

" neocomplcacheの設定
" 起動
let g:neocomplcache_enable_at_startup = 1
" 
let g:neocomplcache_enable_underbar_completion = 1
" 補完候補を20個表示
let g:neocomplcache_max_list = 20
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_enable_camel_case_completion = 1
let g:unite_cursor_line_highlight = 'Search'
let g:unite_abbr_highlight = 'StatusLine'

" quickrunの設定
let g:quickrun_config ={}
" texファイルにはautolatexを実行…は諦めた
"let g:quickrun_config.tex = {'command' : 'autolatex'}
autocmd FileType tex nnoremap \r :! autolatex %<cr> 


" バッファの開き方を設定
" 一番下に水平分割してウィンドウを開く
" ウィンドウの高さは 8行
let g:quickrun_config = {
\         "_" : {
\       "outputter/buffer/split" : ":botright 8sp",
\       "runner" : "vimproc",
\       "runner/vimproc/updatetime" : 40,
\       "hook/time/enable": 1,
\   }
\}

" persitent undo 無限undo 
if has('persistent_undo')
        set undodir=~/.vim/undo
        set undofile
endif

" ファイルを開いたら前回の編集点にカーソルが置かれるように
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\""

" Bundle の設定
set rtp+=~/.vim/vundle.git/    " (2)
call vundle#rc()               " (3)

Bundle 'Shougo/unite.vim'
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/vimproc'
Bundle 'Shougo/vimshell'
Bundle 'Shougo/vimfiler'
Bundle 'sudo.vim'
Bundle 'thinca/vim-quickrun'
Bundle 'chrismetcalf/vim-yankring'
Bundle 'TwitVim'
Bundle 'ujihisa/unite-colorscheme'
Bundle 'nanotech/jellybeans.vim'
Bundle 'osyo-manga/unite-quickfix'
Bundle 'Gundo'
Bundle 'YankRing.vim'
Bundle 'tpope/vim-fugitive'
Bundle 'kana/vim-smartchr'

" haskell用
Bundle 'eagletmt/ghcmod-vim'
Bundle 'ujihisa/neco-ghc'
Bundle 'dag/vim2hs'

filetype plugin indent on     
" jellybeansが目に優しくていいと思います
:colorscheme jellybeans

" 200行ヤンク
" '20  - remember marks for 20 previous files
" \"200 - save 200 lines for each register
" :20  - remember 20 items in command-line history
" %    - remember the buffer list (if vim started without a file arg)
" n    - set name of viminfo file

set viminfo='20,\"200,:20,%,n~/.viminfo 

" Twitvim 関連
let twitvim_count = 40
nnoremap <C-t> :<C-u>PosttoTwitter<CR>
nnoremap ,tf :<C-u>FriendsTwitter<CR><C-w>j
nnoremap ,tu :<C-u>UserTwitter<CR><C-w>j
nnoremap ,tr :<C-u>RepliesTwitter<CR><C-w>j
nnoremap ,tn :<C-u>NextTwitter<CR>

autocmd FileType twitvim call s:twitvim_my_settings()
function! s:twitvim_my_settings()
  set nowrap
endfunction
syntax on
filetype detect

" なにこれ
command! -nargs=* TestHello call TestHello(<f-args>)

" 勉強用に作った関数
function! SaveBackup ()
 let b:backup_count = exists('b:backup_count') ? b:backup_count+1 : 1
 return writefile(getline(1,'$'), bufname('%') . '_' . b:backup_count)
endfunction
nnoremap <silent> ;b :call SaveBackup ()<cr>

""" unite.vim
"" コピペしただけ まだ何も分かっていない
" 入力モードで開始する
let g:unite_enable_start_insert=1
" バッファ一覧
nnoremap <silent> ,ub :<C-u>Unite buffer<CR>
" ファイル一覧
nnoremap <silent> ,uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
" レジスタ一覧
nnoremap <silent> ,ur :<C-u>Unite -buffer-name=register register<CR>
" 最近使用したファイル一覧
nnoremap <silent> ,um :<C-u>Unite file_mru<CR>
" 常用セット
nnoremap <silent> ,uu :<C-u>Unite buffer file_mru<CR>
" 全部乗せ
nnoremap <silent> ,ua :<C-u>UniteWithBufferDir -buffer-name=files buffer file_mru bookmark 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-l> unite#do_action('vsplit')
au FileType unite inoremap <silent> <buffer> <expr> <C-l> unite#do_action('vsplit')
" ESCキーを2回押すと終了する
au FileType unite nnoremap <silent> <buffer> <ESC><ESC> q

感想

よく使うもの
・すぐに実行結果が分かるquickrun。
・コピペが捗るYankring。
VimからTwitterができるTwitVim。
・補完が便利なneocomplcache

また、Rやghciでvimのキーマップを使いたいときにVimShellを使います。

何かコードを書くたびにvimrcを修正している気がします。
これから一生をかけて洗練させていこうと思います。