気分がいいのでvimの設定ファイルをさらしてみる
うまいことObjective-cでのMacとかiPhoneアプリ開発の設定ができて気分がよくなってきたので、どんな設定をしているのかとさらしてみることにします。設定ファイルの書き方がめちゃくちゃなのは仕様です。きれいに書くなんて機能は実装されてないのであしからず。
neoui.vimとcocoa.vimはプラグインの中身をいじって書き換えたものを使ってます。でわ。
" vim: set foldmethod=marker:
" 概要をみるためにどこかにファイルを保存じて vimgrep /^"\s*[^}"]/ % するといいかも
"
if has ('gui_macvim')
" コマンドキーを使う
set macmeta
"
endif
" ============================================================
" vimの設定
"
" ============================================================
" 基本設定 "{{{
"
syntax on
filetype plugin on
filetype indent on
" カラースキーマをロードする
colorscheme stakatomo
" viとの互換機能をオフにする
set nocompatible
" 起動時の画面を表示しない
set shortmess=aTI
" menuは英語で表示させる
set langmenu=none
" ヘルプを日本語で表示する
set helplang=ja
" Set keyword help.
set keywordprg=:help
" 他のアプリケーションで編集されたファイルは自動で読み直す
set autoread
" 編集中に他のファイルを開けるようにする
set hidden
" カーソルが行末で止まらないようにする
set whichwrap=b,s,h,l,<,>,[,]
" 毎行の前に行番号を表示する。(有効:number/無効:nonumber)
set number
" 移動キーを押しても括弧の強調を有効にする
set cpoptions-=m
set matchtime=3
" <>にもマッチするようにする
set matchpairs+=<:>
" バックアップファイルを作らない
set nobackup
" swapファイルを作らない
set noswapfile
" viminfoファイルの置き場所を指定する
set viminfo+=n~/.vim/tmp/viminfo
" ファイルを自動で保存する
set autowriteall
" 何も操作をしていないと判定される時間
set updatetime=1000
set updatecount=1000
" <Leader>を押してから キャンセルされるまでの時間.
set timeout timeoutlen=2500 ttimeoutlen=50
" クリップボードを使う
set clipboard& clipboard+=unnamed
" Visual選択で選択されたテキストが、自動的にクリップボードレジスタ "*" にコピーされる。
set guioptions+=a
" オンのときは、ウィンドウの幅より長い行は折り返され、次の行に続けて表示される。(有効:wrap/無効:nowrap)
set wrap
" 新しい行を開始したとき (Insertモードで <CR> を打ち込むか、コマンド "o"や "O" を使ったとき)、新しい行のインデントを現在行と同じくする。(有効:autoindent/無効:noautoindent)
set autoindent smartindent
" Anywhere SID.
function! s:SID_PREFIX()
return matchstr(expand('<sfile>'), '<SNR>\d\+_')
endfunction
" plugin用にキーマップを解放する
nnoremap ; <Nop>
xnoremap ; <Nop>
nnoremap m <Nop>
xnoremap m <Nop>
nnoremap , <Nop>
xnoremap , <Nop>
" \の代わりに'm'を使えるようにする
" ','より押しやすい。
" プラグイン用設定の前に設定しないとうまくマッピングされない。
let mapleader = 'm'
" グローバルプラグインでは <Leader> を使用
let g:mapleader = 'm'
" ファイルタイププラグインでは <LocalLeader> を使用
" 'm'の隣だから','を使用する。
let g:maplocalleader = ','
" autocmd の定義
augroup MyAutoCmd "{{{
autocmd!
" 何も操作をしていないときに保存する
autocmd CursorHold * call g:my_auto_update()
autocmd CursorHoldI * call g:my_auto_update()
" Easily load VimScript.
autocmd FileType vim nnoremap <silent><buffer> [Space]rr :source $MYVIMRC \| echo "source " . bufname('%')<CR>
"" autocmd FileType vim nnoremap <silent><buffer> [Space]rr :source $MYVIMRC \| source $MYGVIMRC \| echo "source " . bufname('%')<CR>
" ヘルプをqだけで閉じる
autocmd FileType help,git-status,git-log,qf nnoremap <buffer> q <C-w>c
autocmd FileType qf nnoremap <buffer> <TAB> :<C-u>call g:MovePreviousWindow()<CR>
"" バッファを開いたらそこをカレントディレクトリにする
""autocmd BufEnter * call g:my_lcd()
" カーソルの位置を保存する。
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
" 改行したときに自動でコメントアウトするのをやめる。
autocmd FileType * setlocal formatoptions-=ro
" 入力されているテキストの最大幅。行がそれより長くなると、この幅を超えないように空白の後で改行される。値を 0 に設定すると無効になる。
autocmd FileType * setlocal textwidth=0
" vimshellでフォルダ間のタブ文字を表示させない
autocmd FileType vimshell,vimshell-term setlocal nolist
augroup END
" 自動保存をするための関数 "{{{
function! g:my_auto_update()
let update_fname=expand("%")
if filereadable(update_fname) == 1
if &filetype != 'gitcommit'
update
endif
endif
return
endfunction
"}}}
" カレントディレクトリを編集しているファイルの位置にするための関数 "{{{
function! g:my_lcd()
if &filetype != 'gitcommit'
execute ":lcd " . escape(expand("%:p:h:"), " #\\")
endif
endfunction
"}}}
"}}}
"}}}
"
" ============================================================
" ステータスバーの表示 "{{{
"
" コマンドラインの高さ
set cmdheight=2
" コマンドをコマンドラインに表示する
set showcmd
" カーソルが何行目の何列目にあるのか表示する
set ruler
" ステータスバーを表示するタイミング 0:表示しない 1:ウィンドウの数が2つ以上で表示 2:常に表示
set laststatus=2
" ステータスバーに表示する内容
set statusline=[%{winnr('$')>1?''.winnr().'/'.winnr('$'):''}]\ %<\ %f\ %m%r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).'\|'.&ff.']'}%=%l/%L\ (%P)
"}}}
"
" ============================================================
" 検索の設定"{{{
"
" 検索がファイル末尾まで進んだら、ファイル先頭から再び検索する。(有効:wrapscan/無効:nowrapscan)
set wrapscan
" 検索パターンにおいて大文字と小文字を区別しない。(有効:ignorecase/無効:noignorecase)
set ignorecase
" 検索パターンが大文字を含んでいたらオプション 'ignorecase' を上書きする。(有効:smartcase/無効:nosmartcase)
set smartcase
" インクリメンタルサーチ
set incsearch
set magic
" 前回の検索パターンが存在するとき、それにマッチするテキストを全て強調表示する。(有効:hlsearch/無効:nohlsearch)
set nohlsearch
" GrepをVim標準のGrepにする
set grepprg=grep
"}}}
"
" ============================================================
" コマンドラインをコマンドウィンドウで処理する設定 "{{{
nnoremap <SID>(command-line-enter) q:
xnoremap <SID>(command-line-enter) q:
nnoremap <SID>(command-line-norange) q:<C-u>
nmap : <SID>(command-line-enter)
xmap : <SID>(command-line-enter)
autocmd MyAutoCmd CmdwinEnter * call s:init_cmdwin()
function! s:init_cmdwin()
nnoremap <buffer> q :<C-u>quit<CR>
nnoremap <buffer> <TAB> :<C-u>quit<CR>
" Completion.
inoremap <buffer><expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
startinsert!
endfunction
"}}}
"
" ============================================================
" TABなどの表示"{{{
"
" ファイル内の <TAB> が対応する空白の数。
set tabstop=4
" <TAB> の挿入や <BS> の使用等の編集操作をするときに、<TAB> が対応する空白の数。
set softtabstop=4
" インデントの各段階に使われる空白の数。
set shiftwidth=4
" Insertモードで <TAB> を挿入するとき、代わりに適切な数の空白を使う。(有効:expandtab/無効:noexpandtab)
set noexpandtab
" タブ文字を CTRL-I で表示し、行末に $ で表示する。(有効:list/無効:nolist)
set list
" Listモード (訳注: オプション 'list' がオンのとき) に使われる文字を設定する。
set listchars=tab:>-,extends:<,trail:-
" 全角スペースを視覚化
highlight ZenkakuSpace guifg=#333
match ZenkakuSpace / /
" 横分割したウィンドウは左につくる
set splitbelow
" 縦分割したウィンドウは下につくる
set splitright
" Increase history amount.
set history=200
" Display all the information of the tag by the supplement of the Insert mode.
set showfulltag
" Can supplement a tag in a command-line.
set wildoptions=tagfile
" Adjust window size of preview and help.
set previewheight=15
set helpheight=15
"}}}
"
" ============================================================
" プラグインの設定"{{{
"
" プラグインをフォルダで管理する "{{{
" ~/.vim/{pluginName}をruntimepathに追加
" runtimepathの初期化
set runtimepath&
function! s:SetOtherPluginsPath()
" addon 直下のディレクトリを取得
let dir = '$HOME/.vim/addon/'
let dirs = map(split(glob(fnamemodify(dir, ':p').'*/'), '\n'),
\ 'fnamemodify(v:val, ":h")')
" addon 直下のディレクトリのafterも生成
let dirsAfter = map(copy(dirs), 'v:val."/after"')
execute "set runtimepath&"
let &runtimepath = join(dirs + [&runtimepath] + dirsAfter, ',')
endfunction
call s:SetOtherPluginsPath()
"}}}
"
" neocomplcacheの設定 ===================="{{{
"
" neocomplcache の基本設定 "{{{
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_manual_completion_start_length = 1
let g:neocomplcache_auto_completion_start_length = 2
let g:neocomplcache_enable_smart_case = 0
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1
let g:NeoComplCache_EnableCursorHoldI = 1
let g:neocomplcache_min_syntax_length = 2
let g:neocomplcache_min_keyword_length = 2
let g:neocomplcache_enable_auto_select = 0
let g:neocomplcache_caching_limit_file_size = 100000000
let g:neocomplcache_enable_quick_match = 1
" quickmatchは<C-Space> で表示する
let g:neocomplcache_quick_match_patterns = {'default' : ' '}
let g:neocomplcache_temporary_dir = $HOME . '/.vim/tmp/neocon'
let g:neocomplcache_snippets_dir = $HOME . '/.vim/share/snippets'
"}}}
" neocomplcacheのキーバインド "{{{
imap <expr><C-k> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : "\<C-k>"
smap <C-k> <Plug>(neocomplcache_snippets_expand)
imap <C-l> <Plug>(neocomplcache_snippets_jump)
smap <C-l> <Plug>(neocomplcache_snippets_jump)
" C-nでneocomplcache補完
inoremap <expr><C-n> pumvisible() ? "\<C-n>" : "\<C-x>\<C-u>\<C-p>"
" C-pでkeyword補完
inoremap <expr><C-p> pumvisible() ? "\<C-p>" : "\<C-p>\<C-n>"
inoremap <expr><Up> pumvisible() ? neocomplcache#cancel_popup()."\<Up>" : "\<Up>"
inoremap <expr><Down> pumvisible() ? neocomplcache#cancel_popup()."\<Down>" : "\<Down>"
" <Space>: close popup and insert space.
inoremap <expr><C-j> pumvisible() ? neocomplcache#close_popup() : "\<C-g>"
inoremap <expr><C-e> pumvisible() ? neocomplcache#cancel_popup() : "\<C-o>\$"
" AutoComplPop like behavior.
inoremap <expr><C-h> pumvisible() ? neocomplcache#cancel_popup()."\<C-h>" : "\<C-h>"
inoremap <expr><BS> pumvisible() ? neocomplcache#cancel_popup()."\<BS>" : "\<BS>"
inoremap <expr><CR> pumvisible() ? neocomplcache#cancel_popup()."\<CR>" : "\<C-R>=delimitMate#ExpandReturn()\<CR>"
"}}}
" neocomplcacheの補完を開始する文字の長さ "{{{
let g:neocomplcache_plugin_completion_length_list = {
\ 'omni_complete' : 2,
\ 'snippets_complete' : 1,
\ 'tags_complete' : 4,
\ 'buffer_complete' : 2,
\ 'include_complete' : 2,
\ 'syntax_complete' : 2,
\ 'filename_complete' : 2,
\ 'keyword_complete' : 2
\ }
"}}}
" neocomplcacheのオムニ補完を開始するパターン "{{{
let g:neocomplcache_omni_patterns = {
\ 'php' : '[^. \t]->\h\w*\|\$\h\w*\|\%(=\s*new\|extends\)\s\+\|\h\w*::',
\ 'perl' : '\%(\h\w*\|)\)->\h\w*\|\h\w*::',
\ 'c' : '\h\w\+\|\%(\h\w*\|)\)\%(\.\|->\)\h\w*',
\ 'cpp' : '\%(\h\w*\|)\)\%(\.\|->\)\h\w*\|\h\w*::',
\ }
"}}}
" neocomplcacheの補完辞書の位置 "{{{
let g:neocomplcache_dictionary_filetype_lists = {
\ 'default' : '',
\ 'objc' : $HOME . '/.vim/dict/objc.dict'
\ }
"}}}
" neocomplcacheがキーワードとして取得するパターン "{{{
if !exists('g:neocomplcache_keyword_patterns')
let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
let g:neocomplcache_keyword_patterns['perl'] = '\h\w*'
let g:neocomplcache_keyword_patterns['objc'] = '\h\w*'
"}}}
"}}}
"
" neouiの設定 ==================== "{{{
"
" neouiの基本設定
let g:neoui_temporary_dir=$HOME . '/.vim/tmp/neoui'
let g:neoui_temporary_dir = expand(g:neoui_temporary_dir)
if !isdirectory(g:neoui_temporary_dir)
call mkdir(g:neoui_temporary_dir, 'p')
endif
let g:neoui_source_file_mru_file=$HOME . '/.vim/tmp/neoui/vimru'
call neoui#custom_prefix('common', '~', substitute($HOME, '\\', '/', 'g'))
" neouiのキーバインド
nnoremap [NeoUI] <Nop>
nmap ; [NeoUI]
nnoremap C ;
" bufferとかファイルを開く
nnoremap <silent> [NeoUI]f :<C-u>NeoUI file file/mru<CR>
" commandの履歴を開く
nnoremap <silent> [NeoUI]c :<C-u>NeoUI cmd/mru<CR>
" 検索の履歴を開く
nnoremap <silent> [NeoUI]s :<C-u>NeoUI search/mru<CR>
" QuickFixの検索結果からファイルを開く
nnoremap <silent> [NeoUI]g :<C-u>NeoUI quickfix/buffer<CR>
"}}}
"
" QFixGrepの設定 ===================="{{{
" 注意;タブでwindowを移動するためにmyqfix.vimの<C-i>へのキーマップを削除してある。
"
" QFixGrepの基本設定
let mygrepprg = 'grep'
let MyGrep_ShellEncoding = 'utf-8'
let MyGrep_Resultfile = $HOME.'/.vim/tmp/qfixgrep.txt'
" QFixGrep のキーバインド
" The prefix key.
nnoremap [Quickfix] <Nop>
nmap q [Quickfix]
" Disable Ex-mode.
nnoremap Q q
nnoremap [Quickfix]g :<C-u>Grep<Space>
nnoremap [Quickfix]b :<C-u>BGrep<Space>
nnoremap <silent> [Quickfix]n :<C-u>cnext<CR>
nnoremap <silent> [Quickfix]p :<C-u>cprevious<CR>
" Quickfix window.
nnoremap <silent> [Quickfix]<Space> :<C-u>ToggleQFixWin<CR>
nnoremap <silent> [Quickfix]ff :<C-u>MoveToQFixWin<CR>
" QuickFixウィンドウを左に縦分割
let QFix_CopenCmd = 'vertical topleft'
" QuickFixウィンドウの高さ
let QFix_Height = 15
let QFix_Width = 86
" QFixPreviewのファイルタイプのハイライトをしない。
let QFix_PreviewFtypeHighlight=0
" ハイスピードプレビューを有効にする
let QFix_HighSpeedPreview = 1
" QFixGrepの検索時にカーソル位置の単語を拾う/拾わない
let MyGrep_DefaultSearchWord = 1
" Exclude pattern.
let MyGrep_ExcludeReg =
\'[~#]$\|\.bak$\|\.swp$\.o$\|\.obj$\|\.exe$\|\.dll$\|\.pdf$\|\.doc$\|\.xls$\|[/\\]tags$\|.cvs[/\\]\|.git[/\\]\|.svn[/\\]'
"}}}
"
" vimShellの設定 ===================="{{{
" ftpluginにも設定あり
"
" vimshellの基本設定
let g:vimshell_prompt = $USER."% "
let g:vimshell_smart_case = 1
let g:vimshell_temporary_directory=$HOME . '/.vim/tmp/vimshell'
let g:vimshell_external_history_path=$HOME . '/.zsh/zsh_history'
let g:vimshell_split_height=50
let g:vimshell_split_command='NicelyWindowSplit'
" vimshellのキーバインド
" <C-\>でvimshellをポップアップする
nnoremap <silent><C-\> :<C-u>VimShellPop<CR>
inoremap <silent><C-\> <Esc>:<C-u>VimShellPop<CR>
"}}}
"
" Nerd_commenterの設定 ===================="{{{
"
" Nerd_Commenter の基本設定
let g:NERDCreateDefaultMappings = 0
let NERDSpaceDelims = 1
let NERDShutUp = 1
" Nerd_commenterのキーバインド
" [Space]cc でコメントをトグル
nmap [Space]cc <Plug>NERDCommenterToggle
vmap [Space]cc <Plug>NERDCommenterToggle
" [Space]csでセクシーなコメント
nmap [Space]cs <Plug>NERDCommenterSexy
vmap [Space]cs <Plug>NERDCommenterSexy
" [Space]cdでコメントをはずす
nmap [Space]cd <Plug>NERDCommenterUnComment
vmap [Space]cd <Plug>NERDCommenterUnComment
" [Space]caでコメントを追加して文字列入力
nmap [Space]ca <Plug>NERDCommenterAppend
"}}}
"
" quickrunの設定 ===================="{{{
"
" backgroundで実行する
let g:quickrun_config = {
\ '*': {'runmode': 'async:remote:vimproc'},
\ }
"}}}
"
" project.vimの設定 ===================="{{{
"
" projectウィンドウの幅
let g:proj_window_width=30
" projectウィンドウに設定するflag
let g:proj_flags="imst"
" project.vimのキーバインド
" [Space]prでprojectウィンドウをトグル
nmap <silent> [Space]pp <Plug>ToggleProject
"}}}
"
" git-vimの設定 ==================== "{{{
"
" git-vimの基本設定
" デフォルトのキーマップを使用しない。
let g:git_no_map_default = 1
" git-vimのキーバインド
nnoremap [Space]gd :<C-u>GitDiff --cached<Enter>
nnoremap [Space]gD :<C-u>GitDiff<Enter>
nnoremap [Space]gg :<C-u>GitStatus<Enter>
nnoremap [Space]gl :<C-u>GitLog<Enter>
nnoremap [Space]gL :<C-u>GitLog -u \| head -10000<Enter>
nnoremap [Space]ga :<C-u>GitAdd<Enter>
nnoremap [Space]gA :<C-u>GitAdd <cfile><Enter>
nnoremap [Space]gc :<C-u>GitCommit<Enter>
nnoremap [Space]gC :<C-u>GitCommit --amend<Enter>
nnoremap [Space]gp :<C-u>Git pull
nnoremap [Space]gP :<C-u>Git push
"}}}
"
" taglistの設定 ==================== "{{{
set tags=tags
let g:Tlist_Auto_Update = 1
let g:Tlist_Show_One_File = 0
let g:Tlist_Exit_OnlyWindow = 1
let g:Tlist_Use_Right_Window = 0
let g:Tlist_WinWidth = 40
let g:tlist_objc_settings='objc;P:protocols;i:interfaces;I:implementations;M:instance methods;C:implementation methods;Z:protocol methods;v:property'
let g:tlist_javascript_settings = 'javascript;v:var;c:class;p:prototype;m:method;f:function;o:object'
nnoremap <silent> [Space]tt :<C-u>Tlist<CR>1<C-w>l
"}}}
"
" bufferexplore の設定 "{{{
nnoremap [NeoUI]; :BufExplorer<CR>
"}}}
"
" easytagsの設定
let g:easytags_cmd = $HOME . '/local/bin/ctags'
let g:easytags_file = '~/.vim/share/tags'
let g:easytags_always_enabled = 1
let g:easytags_resolve_links = 1
"
" delimitMateの設定
"inoremap <Space> <C-R>=delimitMate#ExpandSpace()<CR>
"}}}
"
" ============================================================
" キーマップ "{{{
map <C-Space> <C-@>
cmap <C-Space> <C-@>
map <F1> <Nop>
map <C-c> <Esc>
cmap <C-c> <Esc>
"
" 移動 表示行単位で移動 "{{{
noremap j gj
noremap k gk
vnoremap j gj
vnoremap k gk
"}}}
"
" オプションを切り替えるキーマップ "{{{
nnoremap <silent> <Esc><Esc> :<C-u>call ToggleOption('hlsearch')<CR><Esc>
" Toggle options. "{{{
function! ToggleOption(option_name)
execute 'setlocal' a:option_name.'!'
execute 'setlocal' a:option_name.'?'
endfunction "}}}
"}}}
"
" インサートモードのキーマップ"{{{
" <C-d>: delete char.
inoremap <C-d> <Del>
" <C-a>:move move to head.
inoremap <silent><C-a> <C-o>^
" <C-f>, <C-b>: page move.
inoremap <expr><C-f> pumvisible() ? neocomplcache#cancel_popup()."\<Right>" : "\<Right>"
inoremap <expr><C-b> pumvisible() ? neocomplcache#cancel_popup()."\<Left>" : "\<Left>"
" <A-b>: previous word.
inoremap <A-b> <S-Left>
" <A-f>: next word.
inoremap <A-f> <S-Right>
" Enable undo <C-u>.
inoremap <C-u> <C-g>u<C-u>
" <C-_>: toggle preview window.
inoremap <silent><C-_> <C-o>:<C-u>call<SID>preview_window_toggle()<CR>
" <A-d>: delete to end.
inoremap <A-d> <C-o>D
inoremap <C-k> <C-o>D
" <A-j>: <Down> <A-k>: <Up>
inoremap <expr><A-j> pumvisible() ? neocomplcache#cancel_popup()."\<Down>" : "\<Down>"
inoremap <expr><A-k> pumvisible() ? neocomplcache#cancel_popup()."\<Up>" : "\<Up>"
inoremap <expr><A-h> pumvisible() ? neocomplcache#cancel_popup()."\<Left>" : "\<Left>"
inoremap <expr><A-l> pumvisible() ? neocomplcache#cancel_popup()."\<Right>" : "\<Right>"
"}}}
"
" コマンドラインモードのキーマップ"{{{
" <C-a>, A: move to head.
cnoremap <C-a> <Home>
" <C-b>: previous char.
cnoremap <C-b> <Left>
" <C-d>: delete char.
cnoremap <C-d> <Del>
" <C-e>, E: move to end.
cnoremap <C-e> <End>
" <C-f>: next char.
cnoremap <C-f> <Right>
" <C-n>: next history.
cnoremap <C-n> <Down>
" <C-p>: previous history.
cnoremap <C-p> <Up>
" <C-k>, K: delete to end.
cnoremap <C-k> <C-f>d$<C-c><End>
" <C-y>: paste.
cnoremap <C-y> <C-r>"
" <C-s>: view history.
cnoremap <C-s> <C-f>
" <C-l>: view completion list.
cnoremap <C-l> <C-d>
" <A-b>, W: move to previous word.
cnoremap <A-b> <S-Left>
" <A-f>, B: move to next word.
cnoremap <A-f> <S-Right>
" <C-j>, <C-o>: move to next/previous candidate.
" High-speed than ring TAB repeatedly.
cnoremap <C-j> <C-n>
cnoremap <C-o> <C-p>
cnoremap <S-TAB> <C-p>
" <C-g>: decide candidate.
cnoremap <C-g> <Space><C-h>
" <C-t>: insert space.
cnoremap <C-t> <Space>
" <C-c>: Esc
cnoremap <C-c> <C-c>
"}}}
"
" Window buffer 操作のキーマップ "{{{
" ほかのwindowを閉じる
nnoremap <silent> <D-1> :<C-u>only<CR>
" windowの自動分割
nnoremap <silent> <D-2> :<C-u>NicelyWindowSplit<CR>
" windowの大きさを均一にする
nnoremap <silent> <D-3> <C-w>=
" window の入れ替え
nnoremap <silent> <D-4> <C-w>H
nnoremap <silent> <D-5> <C-w>K
nnoremap <silent> <D-6> <C-w>J
nnoremap <silent> <D-7> <C-w>L
" windowを閉じる
nnoremap <silent> <D-0> :<C-u>close<CR>
" バッファを削除する
nnoremap <silent> <D-9> :<C-u>call <SID>CustomBufferDelete(0)<CR>:if winnr() != 1 <Bar> close<CR>:endif<CR>
nnoremap <silent> <D-8> :Kwbd<CR>
" windowの移動
nnoremap <silent> <TAB> <C-w>w
" ウィンドウの大きさで縦分割/横分割を判断して分割する関数 "{{{
command! NicelyWindowSplit call g:nicely_window_split()
function! g:nicely_window_split()
if winwidth(0) > 3.5 * &winwidth
vsplit
else
split
endif
endfunction "}}}
" Delete current buffer する関数"{{{
function! s:CustomBufferDelete(is_force)
let current = bufnr('%')
call s:CustomAlternateBuffer()
if a:is_force
silent! execute 'bdelete! ' . current
else
silent! execute 'bdelete ' . current
endif
endfunction
"}}}
" Fast buffer switch する関数 "{{{
function! s:CustomAlternateBuffer()
if bufnr('%') != bufnr('#') && buflisted(bufnr('#'))
buffer #
else
let l:cnt = 0
let l:pos = 1
let l:current = 0
while l:pos <= bufnr('$')
if buflisted(l:pos)
if l:pos == bufnr('%')
let l:current = l:cnt
endif
let l:cnt += 1
endif
let l:pos += 1
endwhile
if l:current > l:cnt / 2
bprevious
else
bnext
endif
endif
endfunction
"}}}
" 一つ前の分割ウィンドウに戻るための関数
function! g:MovePreviousWindow() "{{{
let l:prev_name = winnr()
silent! wincmd p
if l:prev_name == winnr()
silent! wincmd w
endif
endfunction
"}}}
" ウィンドウを閉じないでバッファを閉じる。
command! Kwbd let kwbd_bn= bufnr("%")|enew|exe "bdel ".kwbd_bn|unlet kwbd_bn
"}}}
"
" [Space]: Other useful commands "{{{
" スペースキーのマッピングを見やすくする
" noremapに<Space>で始まるものを使うと[Space]が表示されなくなるので注意!
nmap <Space> [Space]
xmap <Space> [Space]
nnoremap [Space] <Nop>
xnoremap [Space] <Nop>
" Easily edit .vimrc and .gvimrc "{{{
nnoremap <silent> [Space]ev :<C-u>edit $MYVIMRC<CR>
"}}}
" Easily ctags command."{{{
nnoremap <silent> [Space]tr :<C-u>silent !ctags -R<CR>
" Easily helptags command.
nnoremap <silent> [Space]td :<C-u>helptags ~/.vim/doc<CR>
" Easily edit Snippets
nnoremap <silent> [Space]se :<C-u>NeoComplCacheEditSnippets<CR>
"}}}
"}}}
"
" Move search word to middle screen."{{{
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz
"}}}
"
" 0: Preview window "{{{
" The prefix key.
nnoremap [Preview] <Nop>
nmap - [Preview]
" Toggle preview window."{{{
nnoremap <silent> [Preview]- :<C-u>call<SID>preview_window_toggle()<CR>
function! s:preview_window_toggle()
silent! wincmd P
if &previewwindow
pclose
elseif expand('%') != ''
mkview
silent! pedit
silent loadview
if foldclosed(line('.')) != -1
"" Open folding.
normal! zOgv0
endif
else
normal! ma
silent! pedit
normal! `a
if foldclosed(line('.')) != -1
"" Open folding.
normal! zOgv0
endif
endif
endfunction"}}}
" Open preview window.
nnoremap [Preview]o :<C-u>pedit<CR>
" Close preview window.
nnoremap [Preview]c :<C-u>pclose<CR>
" Move to preview window."{{{
nnoremap <silent> [Preview]p :<C-u>call<SID>move_to_preview_window()<CR>
function! s:move_to_preview_window()
if &previewwindow
wincmd p
else
silent! wincmd P
endif
endfunction"}}}
"}}}
"}}}
"
" ============================================================
" objective-c の設定 "{{{
augroup ObjectiveC
autocmd!
" ビルドして実行
autocmd FileType objc nnoremap <buffer><silent> <d-r> :w<bar>call XcodeCommand('36')<CR>
autocmd FileType objc inoremap <buffer><silent> <d-r> <Esc>:w<bar>call XcodeCommand('36')<CR>
" ビルドするだけ
autocmd FileType objc nnoremap <buffer><silent> <d-b> :w<bar>call XcodeCommand('11')<CR>
autocmd FileType objc inoremap <buffer><silent> <d-b> <Esc>:w<bar>call XcodeCommand('11')<CR>
" クリーニング
autocmd FileType objc nnoremap <buffer><silent> <d-k> :w<bar>call XcodeCommand('40')<CR>
autocmd FileType objc inoremap <buffer><silent> <d-k> <Esc>:w<bar>call XcodeCommand('40')<CR>
" makeでxcodebuild をつかうようにする。
autocmd FileType objc setlocal makeprg=xcodebuild\ -activetarget\ -activeconfiguration\ \\\|\ grep\ -e\ \"^/.*\"\ \\\|\ sort\ -u
" メソッドを一覧表示
autocmd FileType objc nnoremap <buffer> <silent> <A-2> :<c-u>ListMethods<cr>
" プロジェクトをXcodeで開く
autocmd FileType objc nnoremap <buffer> <silent> <A-0> :call system('open -a Xcode '.b:cocoa_proj)<cr>
" syntaxで自動折りたたみ
autocmd FileType objc setlocal foldmethod=syntax
function! XcodeCommand(keycode) "{{{
call system("open -a Xcode ".b:cocoa_proj." && osascript -e '"
\ ."tell application \"Xcode\" to activate \r"
\ ."tell application \"System Events\" \r"
\ ."tell process \"Xcode\" \r"
\ ."key code ".a:keycode." using {command down} \r"
\ ."end tell \r"
\ ."end tell \r'")
endfunction
"}}}
" b:cocoa_proj の取得 "{{{
if exists('b:cocoa_proj')
finish
endif
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h'), '*.xcodeproj'))
" Search a few levels up to see if we can find the project file
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h'), '*.xcodeproj'))
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h:h'), '*.xcodeproj'))
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h:h:h'), '*.xcodeproj'))
endif
endif
endif
let g:x = b:cocoa_proj
"}}}
autocmd FileType objc nnoremap <buffer> <A-9> :call XcodeBuildCheck()<CR>
autocmd FileType objc inoremap <buffer> <A-9> <C-o>:call XcodeBuildCheck()<CR>
function! XcodeBuildCheck() "{{{
let proj_dir = substitute(b:cocoa_proj, '\(.*\)\/.*' , '\1', '')
let current_dir = getcwd()
execute ":lcd " . escape(expand(proj_dir), " #\\")
make
execute ":lcd " . escape(expand(current_dir), " #\\")
endfunction
"}}}"
augroup END
"}}}
"
" ============================================================
" vimshellの設定 "{{{
augroup myVimShell
autocmd!
" tab文字の表示
autocmd FileType vimshell setlocal nolist
" vimshell のキーマップ"{{{
" neocomplcacheの補完をキャンセルしつつ、<C-h>をつかう設定。
autocmd FileType vimshell imap <buffer><expr><C-h> pumvisible() ? "\<C-e>\<Plug>(vimshell_another_delete_backword_char)" : "\<C-h>"
autocmd FileType vimshell imap <buffer><expr><BS> pumvisible() ? "\<C-e>\<Plug>(vimshell_another_delete_backword_char)" : "\<BS>"
" <TAB>でウィンドウを移動できるようにする
autocmd FileType vimshell imap <buffer> <TAB> <Esc><TAB>
" <A-\>で分割したウィンドウでvimshellを新しく起動する
autocmd FileType vimshell nmap <buffer><silent><A-\> :NicelyWindowSplit<CR> <Plug>(vimshell_create)
autocmd FileType vimshell imap <buffer><silent><A-\> <Esc>:NicelyWindowSplit<CR> <Plug>(vimshell_create)
"}}}
" cdしたら自動でls -aコマンド "{{{
autocmd FileType vimshell call vimshell#hook#set('chpwd', ['g:my_chpwd'])
function! g:my_chpwd(args, context)
call vimshell#execute('ls -a')
endfunction
"}}}
augroup END
"}}}
"
" ============================================================
" Gvim用の設定
"
if has ('gui_macvim')
" ============================================================
" 色の設定 "{{{
"
" カラースキーマをロードする
colorscheme stakatomo
" 透明度の設定
set transparency=17
" アンチエイリアスの設定
set antialias
" カーソル行の色
set cursorline
" 挿入モード時、ステータスラインの色を変更
let g:hi_insert = 'highlight StatusLine guifg=white guibg=#533166 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
"}}}
"
" ============================================================
" 画面の設定 "{{{
"
" 画面の列幅の設定
set columns=239
" 画面の行数
set lines=76
" フルスクリーンモード
"" set fuoptions=maxvert,maxhorz
"" autocmd GUIEnter * set fullscreen
" ツールバーの表示 非表示
set guioptions-=T
" 右スクロールバーの表示 非表示
set guioptions-=r
set guioptions-=R
" 左スクロールバーの表示 非表示
set guioptions-=l
set guioptions-=L
" フォントの設定
set guifont=Menlo\ Regular:h13
set guifontwide=あずきフォント:h14
"}}}
endif
"
" Objc 用の正規表現
"Delete-Comment s/\/\*\([^\/]\|[^*]\/\|\n\)*\*\//g
"Instance to @synthesize s/^\s\+.\+\*\(.\+;\)/@synthesize \1/g
"Instance to @synthesize - dealloc s/^@synthesize\s\+\(.\+\);/[\1 release];/g
"Instance to @property s/^\s\+/@property(nonatomic, retain) IBOutlet /g
入れているプラグインは
- neocomplcache.vim
- vimshell.vim、vimproc
- cocoa.vim
- project.vim
- quickrun.vim
- neoui.vim
- surround.vim
- NERDCommenter
- Align
- QFixGrep
- matchit.vim
- git-vim
- bufexplorer.vim
- lingr-vim
- taglist.vim
- jsbeautify.vim
- delimitMate.vim
- easytags.vim
しかし、長い。。。
毎日、少しずついじっているのですが、まだまだ設定しなきゃいけないことも多かったりします。とくにtagファイルだったり、includeファイルの設定だったり。。。。しかもコメントに書いてあることと違うキーバインドになっているところがあるという罠まで用意してあるという困った設定ファイルになっています。
半分ぐらいはneocomplcache.vimの作者さんが公開している設定ファイルからの移植が半分ぐらいはの割合だったりもするわけで、プラグインともどもありがたく使わせていただいています。
参考になりそうなところがあれば、使ってみてくださいね。
でわでわ、たかともでした。



