Vimでカーソル位置などの設定保存 と .vimrc

vimrcを見なおしたら結構おかしいとこがありました…

あと、Vimを開いたり閉じたりしまくりますが
そのために毎回移動しなおしたり折りたたみを開いたり閉じたりは面倒です
そこで以下のように設定しました。


" 設定の保存と復元
autocmd BufWinLeave * silent mkview
autocmd BufWinEnter * silent loadview

" 2012/10/30 修正
autocmd BufWinLeave ?* silent mkview
autocmd BufWinEnter ?* silent loadview


2012/10/30追記
パターンマッチが修正前だと:helpなどにも反応してしまうので修正

Vimにはセッションビューというものがあります。
セッションが全ウィンドウとグローバル設定などで、ビューがウィンドウ毎のローカル設定らしいです。
簡単に言うとビュー∈セッションだろうか?

上記設定では、バッファがウィンドウから非表示になる時に発生するBufWinLeaveイベントでmkviewを使いビューを保存します。
同様に、バッファがウィンドウに表示される時に発生するBufWinEnterイベントでloadviewを使いビューを復元します。

viewはファイルごとに作成、保存され標準だと~/.vim/viewに書きだされます。
viewoptiosを設定することで保存と復元をする設定を選べます。

以下、.vimrc
いろんなとこを参考にしました。


"-------------------------------------------------------------------------------"
" Vim Option By mopp
"-------------------------------------------------------------------------------"

" viとの互換をオフ
set nocompatible

" バックアップ作成
set backup
set backupdir=$HOME/\.vim_backup
set writebackup  " 上書き前にバックアップ作成

" スワップファイルを作成する
set swapfile
set directory=$HOME/\.vim_backup

" インデント設定
set cindent
set shiftwidth=4 " 自動インデントの空白の数
set noexpandtab  " Tabをスペースにしない
set smarttab  " 行頭にTabでshiftwidth分インデントする
set tabstop=4  " 画面上のTab幅

" エンコーディング関連
set encoding=utf-8     " vim内部で通常使用する文字エンコーディングを設定
set charconvert=utf-8    " 文字エンコーディングに使われるexpressionを定める
set fileencoding=utf-8    " バッファのファイルエンコーディングを指定
set fileencodings=utf-8,euc-jp,sjis " 既存ファイルを開く際の文字コード自動判別

" 検索設定
set hlsearch " 検索結果強調-:nohで解除
set incsearch " インクリメンタルサーチを有効

" 特殊文字表示設定
set list
set listchars=eol:$,tab:>\ ,trail:\|,extends:<,precedes:<

set backspace=2     " Backspaceの動作
set whichwrap=b,s,h,l,<,>,[,] " カーソルを行頭、行末で止まらないようにする
set wildmenu      " コマンドの補完候補を表示
set helplang=ja,en    " ヘルプ検索で日本語を優先
set viewoptions=cursor,folds  " :mkviewで保存する設定

" 折りたたみ関連
set foldenable
set foldmethod=indent
set foldopen=all  " fold内に移動すれば自動で開く
" set foldclose=all  " fold外に移動しfoldlevelより深ければ閉じる
set foldlevel=0   " 折りたたみの具合
set foldnestmax=2  " 最大折りたたみ深度$
set foldcolumn=2  " 左側に折りたたみガイド表示$

" 見た目関連の設定
set ambiwidth=double " マルチバイト文字や記号でずれないようにする
set cmdheight=2   " コマンドラインの行数
set laststatus=2  " ステータスラインを表示する時
set cursorline   " 現在行に下線を引く
set number    " 行番号表示
set showtabline=2  " タブバーを常に表示
set ruler    " カーソルの現在地表示
set showmatch   " 括弧強調
set nowrap    " はみ出しの折り返し設定
syntax on   " 強調表示有効
colorscheme desert
highlight Folded cterm=bold,underline ctermfg=4
" ステータス行の表示内容を設定 PowerLineで置き換え
" set statusline=%<%F\ %m%r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&fileformat.']'}%=%l/%L,%c%V%8P

"-------------------------------------------------------------------------------"
" Mapping
"-------------------------------------------------------------------------------"
" コマンド       ノーマルモード 挿入モード コマンドラインモード ビジュアルモード
" map /noremap           @            -              -                  @
" nmap / nnoremap        @            -              -                  -
" imap / inoremap        -            @              -                  -
" cmap / cnoremap        -            -              @                  -
" vmap / vnoremap        -            -              -                  @
" map! / noremap!        -            @              @                  -
"-------------------------------------------------------------------------------"
" 自動で括弧内に移動
inoremap {} {}
inoremap [] []
inoremap () ()
inoremap “” “”
inoremap ” ”
inoremap <> <>
inoremap “ “

" tab
nnoremap to :tabnew
nnoremap  tn :tabnext
nnoremap  tp :tabprevious

" 画面分割
noremap   :split
noremap   :vsplit

" 短縮形の設定 マップを展開しない
noreabbrev #b /****************************************
noreabbrev #e ****************************************/

" コマンドラインコマンド設定
command Vimrc :tabnew ~/.vimrc

"-------------------------------------------------------------------------------"
" autocmd
"-------------------------------------------------------------------------------"
" ファイル全般に設定
augroup General
 autocmd!
 " 設定の保存と復元
 autocmd BufWinLeave * silent mkview
 autocmd BufWinEnter * silent loadview
augroup END

" Lisp設定
augroup Lisp
 autocmd!
 function! s:setLispConfig()
  noremap  .li :!sbcl --script %
  iunmap ()
  inoremap  ( ()
  set nocindent
  set nosmartindent
  let lisp_rainbow = 1
  let lisp_instring = 1
  set lispwords=define
 endfunction
 autocmd BufRead *.lisp call s:setLispConfig()
augroup END

" C/C++設定
augroup C_Cpp
 function! s:setC_Cpp()
  nnoremap  .gcc :!gcc %
  set cindent
 endfunction
 autocmd BufRead *.c,*.cpp call s:setC_Cpp()
augroup END

"-------------------------------------------------------------------------------"
" Plugin
"-------------------------------------------------------------------------------"
filetype off
filetype plugin indent off

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

call neobundle#rc(expand('~/.vim/bundle/'))

NeoBundle 'QuickBuf'
NeoBundle 'git://github.com/Shougo/neobundle.vim.git'
NeoBundle 'git://github.com/Shougo/neocomplcache.git'
NeoBundle 'git://github.com/Shougo/vimfiler.git'
NeoBundle 'git://github.com/Shougo/unite.vim.git'
NeoBundle 'git://github.com/vim-jp/vimdoc-ja.git'
NeoBundle 'git://github.com/h1mesuke/vim-alignta.git'
NeoBundle 'git://github.com/t9md/vim-textmanip.git'
NeoBundle 'git://github.com/scrooloose/nerdcommenter.git'
NeoBundle 'git://github.com/Lokaltog/vim-powerline.git'
NeoBundle 'git://github.com/tpope/vim-surround.git'

filetype plugin indent on

" Neocomplcache
" 起動時に有効化
let g:neocomplcache_enable_at_startup = 1

" textmanip
" 選択したテキストの移動
xmap  (textmanip-move-down)
xmap  (textmanip-move-up)
xmap  (textmanip-move-left)
xmap  (textmanip-move-right)
" 行の複製
xmap d (textmanip-duplicate-down)
xmap D (textmanip-duplicate-up)

" vim-powerline
let g:Powerline_symbols = 'unicode'
let g:Powerline_stl_path_style = 'short'

" nerdcommenter
let NERDSpaceDelims = 1
nmap ,, NERDCommenterToggle
vmap ,, NERDCommenterToggle

コメント

このブログの人気の投稿

カーソルキーさん@つかわない インサートモード編

Android で MIME Type 判別

Elixir に入門したいので雑な 分散KVS を自作した