" .vimrc " ------------------------------------------------------------- " 初期化 {{{ let s:is_windows = has( 'win32' ) || has( 'win64' ) augroup Portown autocmd! augroup END " Go の設定 if $GOROOT != '' if has('vim_starting') set rtp+=$GOROOT/misc/vim endif endif " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " ローカル設定の読み込み {{{ if filereadable( expand( '~/.vimrc.local.before' ) ) source ~/.vimrc.local.before endif " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " neobundle.vim の設定 {{{ if has( 'vim_starting' ) set runtimepath+=~/.vim/bundle/neobundle.vim/ endif call neobundle#rc( expand( '~/.vim/bundle' ) ) NeoBundleFetch 'Shougo/neobundle.vim' NeoBundle 'Shougo/vimproc', { \ 'build' : { \ 'cygwin' : 'make -f make_cygwin.mak', \ 'mac' : 'make -f make_mac.mak', \ 'unix' : 'make -f make_unix.mak', \ }, \ } " Unite NeoBundleLazy 'Shougo/unite.vim', { \ 'autoload' : { 'commands' : ['Unite', 'UniteResume', 'UniteWithBufferDir'] }, \ } NeoBundle 'thinca/vim-unite-history' NeoBundle 'Shougo/unite-help' NeoBundle 'Shougo/unite-ssh' NeoBundle 'Shougo/unite-outline' NeoBundle 'ryotakato/unite-outline-objc' NeoBundle 'hewes/unite-gtags' NeoBundle 'Shougo/unite-build' NeoBundle 'thinca/vim-ref' " Language NeoBundleLazy 'vim-jp/cpp-vim', { \ 'autoload' : { 'filetypes' : ['cpp'] } \ } NeoBundle 'tpope/vim-haml' NeoBundle 'kchmck/vim-coffee-script' NeoBundle 'motemen/hatena-vim' NeoBundle 'tpope/vim-markdown' NeoBundle 'aklt/plantuml-syntax' NeoBundle 'vim-scripts/scons.vim' NeoBundle 'ebnf.vim' NeoBundle 'timcharper/textile.vim' " Others NeoBundle 'vim-jp/vital.vim' NeoBundleLazy 'Shougo/vimshell', { \ 'autoload' : { 'commands' : ['VimShellCurrentDir'] }, \ 'depends' : ['Shougo/vimproc'], \ } NeoBundle 'ujihisa/vimshell-ssh' NeoBundle 'Shougo/neocomplete' NeoBundle 'Shougo/neosnippet' NeoBundleLazy 'Shougo/vimfiler', { \ 'autoload' : { 'commands' : ['VimFilerBufferDir'] }, \ 'depends' : ['Shougo/unite.vim'], \ } NeoBundle 'anyakichi/vim-surround' NeoBundleLazy 'thinca/vim-logcat', { \ 'autoload' : { 'commands' : ['Logcat', 'Logcat!', 'LogcatClean'] }, \ } NeoBundle 'vim-scripts/sudo.vim.git' NeoBundle 'ujihisa/shadow.vim' NeoBundle 'itchyny/landscape.vim' NeoBundle 'itchyny/lightline.vim' NeoBundle 'rbtnn/vimconsole.vim' NeoBundle 'thinca/vim-prettyprint' NeoBundle 'tpope/vim-fugitive' NeoBundle 'gregsexton/gitv' NeoBundle 'airblade/vim-gitgutter' NeoBundle 'kana/vim-smartinput' filetype plugin indent on " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " 文字コードの設定 {{{ set encoding=utf-8 if s:is_windows set termencoding=cp932 endif if has('kaoriya') set fileencodings=guess else set fileencodings=ucs-bom,iso-2022-jp,euc-jp,cp932,utf-8 " 日本語を含まない場合は fenc = enc function! RecheckIso2022Jp() if &fileencoding =~# 'iso-2022-jp' && search('[^\x01-\x7e]', 'n') == 0 let &fileencoding = &encoding endif endfunction autocmd Portown BufReadPost * call RecheckIso2022Jp() endif scriptencoding utf-8 set fileformats=unix,dos,mac if exists( '&ambiwidth' ) if has( 'kaoriya' ) && s:is_windows set ambiwidth=auto else set ambiwidth=double endif endif " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " インデントの設定 {{{ set smartindent set cinoptions& cinoptions+=l1,g0,t0 autocmd Portown Filetype c,cpp set cindent " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " タブ設定 {{{ set showtabline=2 nnoremap <SID>[tab] <Nop> nmap <Space>t <SID>[tab] nnoremap <silent> <SID>[tab]n :<C-U>tabnew<CR> nnoremap <C-N> gt nnoremap <C-P> gT " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " コマンドライン設定 {{{ 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 Portown CmdwinEnter * call s:init_cmdwin() function! s:init_cmdwin() nnoremap <silent> <buffer> q :<C-U>quit<CR> inoremap <silent> <buffer><expr> <CR> neocomplete#cancel_popup()."\<CR>" inoremap <silent> <buffer><expr> <C-H> col('.') == 1 ? "\<ESC>:q\<CR>" : neocomplete#cancel_popup()."\<C-H>" inoremap <silent> <buffer><expr> <TAB> pumvisible() ? "\<C-N>" : "\<TAB>" startinsert! endfunction " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " クリップボード設定 {{{ if has('unnamedplus') set clipboard=unnamedplus else set clipboard=unnamed endif " }}} " ------------------------------------------------------------- set tags& tags+=~/tags " ------------------------------------------------------------- " カラースキームの設定 {{{ colorscheme landscape " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " タブ文字設定 {{{ set expandtab set shiftwidth=2 set tabstop=2 set softtabstop=0 set smarttab " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " 空白文字の設定 {{{ set list let s:listchars = { \ 'tab': "\u25b8\\ ", \ 'trail': '_', \ 'extends': "\u00bb", \ 'precedes': "\u00ab", \ } execute 'set listchars='.join(map(items(s:listchars), 'join(v:val, ":")'), ',') unlet s:listchars " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " lightline の設定 {{{ let g:lightline = { \ 'colorscheme': 'wombat', \ 'active': { \ 'left': [['mode'], ['fugitive', 'filename']], \ 'right': [['lineinfo'], ['fileformat', 'fileencoding', 'filetype']], \ }, \ 'inactive': { \ 'left': [['filename']], \ 'right': [['fileformat', 'fileencoding', 'filetype']], \ }, \ 'tabline': { \ 'left': [['tabs']], \ 'right': [['cwd']], \ }, \ 'component': { \ 'lineinfo': '%3l/%{line("$")}:%-2v', \ }, \ 'component_function': { \ 'fugitive': 'MyFugitive', \ 'filename': 'MyFilename', \ 'fileformat': 'MyFileformat', \ 'filetype': 'MyFiletype', \ 'fileencoding': 'MyFileencoding', \ 'mode': 'MyMode', \ 'cwd': 'MyCwd', \ }, \ 'separator': { 'left': "\u2b80", 'right': "\u2b82" }, \ 'subseparator': { 'left': "\u2b81", 'right': "\u2b83" }, \ } function! MyFugitive() if &filetype !~? 'unite\|vimfiler' && exists("*fugitive#head") let _ = fugitive#head() return strlen(_) ? "\u2b60 "._ : '' endif return '' endfunction function! MyModified() if &modifiable && &modified return '+' else return '' endif endfunction function! MyReadonly() if &modifiable && &readonly return "\u2b64" else return '' endif endfunction function! MyModifiable() return &modifiable ? '' : "\u2718" endfunction function! MyFilename() return ('' != MyReadonly() ? MyReadonly() . ' ' : '') . \ (&ft ==# 'vimfiler' ? vimfiler#get_status_string() : \ &ft ==# 'unite' ? unite#get_status_string() : \ &ft ==# 'vimshell' ? vimshell#get_status_string() : \ '' != expand('%:t') ? expand('%:t') : '[No Name]') . \ ('' != MyModified() ? ' ' . MyModified() : '') . \ ('' != MyModifiable() ? ' ' . MyModifiable() : '') endfunction function! MyFileformat() return winwidth(0) > 70 ? &fileformat : '' endfunction function! MyFiletype() return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : '' endfunction function! MyFileencoding() return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : '' endfunction function! MyMode() return winwidth(0) > 60 ? lightline#mode() : '' endfunction function! MyCwd() return fnamemodify(getcwd(), ':~') endfunction " }}} " ------------------------------------------------------------- set backspace=indent,start,eol set showmatch set number set ruler set laststatus=2 set cmdheight=2 set showcmd set directory-=. " ------------------------------------------------------------- " 検索設定 {{{ set ignorecase smartcase set incsearch hlsearch set wrapscan " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " 折り畳み設定 {{{ set foldmethod=marker set foldlevel=0 " }}} " ------------------------------------------------------------- syntax enable nnoremap <Space><Space> <PageDown> nnoremap Y y$ "nnoremap ; : nnoremap : ; autocmd Portown Filetype help nnoremap <buffer> q <C-w>c autocmd Portown Filetype help nnoremap <buffer> <C-]> :<C-U>tag <C-R><C-W><CR> " ------------------------------------------------------------- " vim-smartinput {{{ call smartinput#map_to_trigger('i', '<Plug>(smartinput_CR)', '<CR>', '<CR>') call smartinput#map_to_trigger('i', '<Plug>(smartinput_C-H)', '<BS>', '<C-H>') " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " Delete trailing spaces {{{ function! DeleteSurroundingWhitespaces() if &filetype =~# 'unite' return endif let line = getline('.') let pos = getpos('.') let col = pos[2] let left = substitute(line[0 : col - 2], '\s\+$', '', '') let right = substitute(line[col - 1 :], '^\s\+', '', '') let pos[2] = len(left) + 1 call setline('.', left . right) call setpos('.', pos) endfunction call smartinput#define_rule({ \ 'at': '\s\%#\|\%#\s', \ 'char': '<CR>', \ 'input': '<C-O>:call DeleteSurroundingWhitespaces()<CR><CR>', \ }) function! DeleteTrailingWhitespacesIfCursorIsAtLast() if &filetype =~# 'unite\|vimshell' return endif let line = getline('.') if col('.') != len(line) return endif let newline = substitute(line, '\s\+$', '', '') if newline == line return endif call setline('.', newline) endfunction autocmd Portown InsertLeave * call DeleteTrailingWhitespacesIfCursorIsAtLast() " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " Java の設定 {{{ let java_highlight_all=1 let java_highlight_debug=1 let java_space_errors=1 let java_highlight_functions=1 " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " Gradle の設定 {{{ autocmd Portown BufRead,BufNewFile *.gradle set filetype=groovy " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " SCons の設定 {{{ autocmd Portown BufRead,BufNewFile SConstruct set filetype=scons " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " EBNF の設定 {{{ autocmd Portown BufRead,BufNewFile *.ebnf set filetype=ebnf " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " neocomplete の設定 {{{ let g:neocomplete#enable_at_startup = 1 let g:neocomplete#enable_smart_case = 1 let g:neocomplete#enable_fuzzy_completion = 1 let g:neocomplete#sources#syntax#min_keyword_length = 3 let g:neocomplete#auto_completion_start_length = 2 let g:neocomplete#manual_completion_start_length = 0 let g:neocomplete#min_keyword_length = 3 let g:neocomplete#lock_buffer_name_pattern = '\*ku\*' let g:neocomplete#enable_auto_select = 1 let g:neocomplete#enable_refresh_always = 0 let g:neocomplete#sources#dictionary#dictionaries = { \ 'default': '', \ 'vimshell': $HOME.'/.vimshell/command-history', \ } let g:neocomplete#enable_auto_delimiter = 1 let g:neocomplete#enable_auto_close_preview = 1 if !exists('g:neocomplete#keyword_patterns') let g:neocomplete#keyword_patterns = {} endif let g:neocomplete#keyword_patterns._ = '\h\w*' let g:neocomplete#force_overwrite_completefunc = 1 if !exists('g:neocomplete#sources#omni#input_patterns') let g:neocomplete#sources#omni#input_patterns = {} endif let s:omni_c = '[^.[:digit:] *\t]\%(\.\|->\)' let s:omni_cpp = s:omni_c.'\|\h\w*::' let s:omni_objc_specific = '\[\|\[[^.[:digit:] *\t]* \|\] ' let g:neocomplete#sources#omni#input_patterns.c = s:omni_c let g:neocomplete#sources#omni#input_patterns.cpp = s:omni_cpp let g:neocomplete#sources#omni#input_patterns.objc = s:omni_c.'\|'.s:omni_objc_specific let g:neocomplete#sources#omni#input_patterns.objcpp = s:omni_cpp.'\|'.s:omni_objc_specific unlet s:omni_c s:omni_cpp s:omni_objc_specific if !exists('g:neocomplete#sources#file_include#exts') let g:neocomplete#sources#file_include#exts = {} endif let g:neocomplete#sources#file_include#exts.objc = ['h'] if !exists('g:neocomplete#sources#include#patterns') let g:neocomplete#sources#include#patterns = {} endif let g:neocomplete#sources#include#patterns.c = '^\s*#\s*include' let g:neocomplete#sources#include#patterns.cpp = '^\s*#\s*include' let g:neocomplete#sources#include#patterns.objc = '^\s*#\s*import' let g:neocomplete#sources#include#patterns.objcpp = '^\s*#\s*import' if !exists('g:neocomplete#sources#include#paths') let g:neocomplete#sources#include#paths = {} endif let g:neocomplete#sources#include#paths.objc = '.,/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/Frameworks' if !exists('g:neocomplete#sources#include#exprs') let g:neocomplete#sources#include#exprs = {} endif function! g:objc_include_expr(fname) let pattern = '\([^/]\+\)/\([^/]\+\).h' if a:fname =~# pattern let dir = substitute(a:fname, pattern, '\1', '') let file = substitute(a:fname, pattern, '\2', '') if dir ==# file return dir.'.framework/Headers/'.file.'.h' endif endif return a:fname endfunction let g:neocomplete#sources#include#exprs.objc = 'g:objc_include_expr(v:fname)' let g:neocomplete#sources#vim#complete_functions = { \ 'Ref' : 'ref#complete', \ 'Unite' : 'unite#complete_source', \ 'VimShellExecute' : 'vimshell#vimshell_execute_complete', \ 'VimShellInteractive' : 'vimshell#vimshell_execute_complete', \ 'VimShellTerminal' : 'vimshell#vimshell_execute_complete', \ 'VimShell' : 'vimshell#complete', \ 'VimFiler' : 'vimfiler#complete', \ } inoremap <expr><C-F> pumvisible() ? "\<PageDown>" : "\<Right>" inoremap <expr><C-B> pumvisible() ? "\<PageUp>" : "\<Left>" inoremap <expr><C-Y> pumvisible() ? neocomplete#close_popup() : "\<C-R>\"" inoremap <expr><C-E> pumvisible() ? neocomplete#cancel_popup() : "\<End>" imap <expr><C-H> neocomplete#smart_close_popup() . "\<Plug>(smartinput_C-H)" inoremap <expr><C-N> pumvisible() ? "\<C-N>" : "\<C-X>\<C-U>\<C-P>\<Down>" inoremap <expr><C-P> pumvisible() ? "\<C-P>" : "\<C-P>\<C-N>" inoremap <expr><C-G> neocomplete#undo_completion() inoremap <expr><C-L> neocomplete#complete_common_string() imap <expr><CR> neocomplete#smart_close_popup() . "\<Plug>(smartinput_CR)" " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " neosnippet の設定 {{{ imap <C-K> <Plug>(neosnippet_expand) smap <C-K> <Plug>(neosnippet_expand) xmap <C-K> <Plug>(neosnippet_expand_target) imap <expr><Tab> neosnippet#jumpable() ? \ "\<Plug>(neosnippet_jump)" \: pumvisible() ? "\<C-N>" : "\<Tab>" smap <expr><Tab> neosnippet#jumpable() ? \ "\<Plug>(neosnippet_jump)" \: "\<Tab>" if has( 'conceal' ) set conceallevel=2 set concealcursor=i endif if !exists('g:neosnippet#snippets_directory') let g:neosnippet#snippets_directory = '' endif let g:neosnippet#snippets_directory = join([ \ '~/.vim/snippets', \ ], ',') " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " VimShell の設定 {{{ let s:bundle = neobundle#get('vimshell') function! s:bundle.hooks.on_source(bundle) if s:is_windows let g:vimshell_prompt = $USERNAME.'@'.hostname().'$ ' else let g:vimshell_prompt = $USER.'$ ' endif endfunction command! PortownVimShellSplit :topleft 10split nnoremap <SID>[vimshell] <Nop> nmap <Space>s <SID>[vimshell] nnoremap <silent> <SID>[vimshell]s :<C-U>VimShellCurrentDir -buffer-name=shell -toggle -split -split-command=PortownVimShellSplit<CR> nnoremap <silent> <SID>[vimshell]f :<C-U>VimShellCurrentDir -buffer-name=shell<CR> autocmd Portown FileType vimshell execute 'nunmap <buffer> <C-N>' | nunmap <buffer> <C-P> " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " VimFiler の設定 {{{ let s:bundle = neobundle#get('vimfiler') function! s:bundle.hooks.on_source(bundle) let g:vimfiler_force_overwrite_statusline = 0 endfunction nnoremap <SID>[vimfiler] <Nop> nmap <Space>f <SID>[vimfiler] nnoremap <silent> <SID>[vimfiler]e :<C-U>VimFilerBufferDir -buffer-name=explorer -direction=topleft -toggle -split -simple -winwidth=35 -no-quit<CR> nnoremap <silent> <SID>[vimfiler]f :<C-U>VimFilerBufferDir -buffer-name=explorer<CR> nnoremap <silent> <SID>[vimfiler]d :<C-U>VimFilerBufferDir -double<CR> " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " Unite.vim の設定 {{{ let s:bundle = neobundle#get('unite.vim') function! s:bundle.hooks.on_source(bundle) let g:unite_enable_start_insert = 0 let g:unite_kind_file_use_trashbox = 0 let g:unite_source_grep_default_opts = '-Hn' let g:unite_source_grep_recursive_opt = '-r' let g:unite_force_overwrite_statusline = 0 endfunction nnoremap <SID>[unite] <Nop> nmap <Space>u <SID>[unite] nnoremap <silent> <SID>[unite]b :<C-U>Unite -buffer-name=buffers -start-insert buffer_tab<CR> nnoremap <silent> <SID>[unite]h :<C-U>Unite -buffer-name=help -start-insert -immediately -no-empty help<CR> nnoremap <silent> <SID>[unite]o :<C-U>Unite -buffer-name=outline -start-insert outline<CR> nnoremap <silent> <SID>[unite]u :<C-U>UniteResume<CR> nnoremap <SID>[unite-file] <Nop> nmap <SID>[unite]f <SID>[unite-file] nnoremap <silent> <SID>[unite-file]f :<C-U>Unite -buffer-name=files -start-insert file file/new<CR> nnoremap <silent> <SID>[unite-file]d :<C-U>UniteWithBufferDir -buffer-name=files -start-insert file file/new<CR> nnoremap <silent> <SID>[unite-file]r :<C-U>Unite -buffer-name=files -start-insert file_rec/async<CR> nnoremap <silent> <SID>[unite-file]m :<C-U>Unite -buffer-name=files -start-insert file_mru<CR> nnoremap <silent> <SID>[unite-file]b :<C-U>Unite -buffer-name=files -start-insert bookmark<CR> nnoremap <SID>[unite-gtags] <Nop> nmap <SID>[unite]g <SID>[unite-gtags] nnoremap <silent> <SID>[unite-gtags]r :<C-U>Unite -immediately -no-quit -keep-focus -winheight=10 gtags/ref<CR> nnoremap <silent> <C-]> :<C-U>Unite -immediately -no-quit -keep-focus -winheight=10 gtags/context<CR> nnoremap <SID>[unite-neobundle] <Nop> nmap <SID>[unite]n <SID>[unite-neobundle] nnoremap <silent> <SID>[unite-neobundle]u :<C-U>Unite -buffer-name=neobundle -no-cursor-line -log neobundle/update<CR> nnoremap <silent> <SID>[unite-neobundle]i :<C-U>Unite -buffer-name=neobundle -no-cursor-line -log neobundle/install<CR> nnoremap <silent> <SID>[unite-neobundle]c :<C-U>UniteClose neobundle<CR> function! g:portown_build(...) let clean = a:0 >= 1 ? a:1 : 0 let base = 'Unite -buffer-name=build -winheight=8 -direction=botright -no-quit -no-focus build' let builder = '' if exists('b:portown_build_builder') let builder = b:portown_build_builder endif let args = [] if exists('b:portown_build_args') let args = split(b:portown_build_args) endif if clean if exists('b:portown_build_clean_args') let args = add(args, split(args.b:portown_build_clean_args)) else let args = add(args, 'clean') endif endif execute join([base, builder, join(args, '\\ ')], ':') endfunction " build の b は buffer と被る…… nnoremap <SID>[unite-make] <Nop> nmap <SID>[unite]m <SID>[unite-make] nnoremap <silent> <SID>[unite-make]m :<C-U>call g:portown_build()<CR> nnoremap <silent> <SID>[unite-make]c :<C-U>call g:portown_build(1)<CR> nnoremap <silent> <SID>[unite-make]q :<C-U>UniteClose build<CR> nnoremap q: :<C-U>Unite -buffer-name=commands -winheight=8 -direction=botright history/command<CR> xnoremap q: :<C-U>Unite -buffer-name=commands -winheight=8 -direction=botright history/command<CR> nnoremap q/ :<C-U>Unite -buffer-name=commands -winheight=8 -direction=botright history/search<CR> xnoremap q/ :<C-U>Unite -buffer-name=commands -winheight=8 -direction=botright history/search<CR> if !exists('g:unite_source_alias_aliases') let g:unite_source_alias_aliases = {} endif let g:unite_source_alias_aliases.message = { \ 'source': 'output', \ 'args': 'message', \ } call unite#custom#source('message', 'sorters', 'sorter_reverse') " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " vim-ref の設定 {{{ let g:ref_source_webdict_sites = { \ 'wikipedia:ja': { \ 'url': 'http://ja.wikipedia.org/wiki/%s', \ 'keyword_encoding': 'utf-8', \ 'cache': 1, \ }, \ 'wiktionary': { \ 'url': 'http://ja.wiktionary.org/wiki/%s', \ 'keyword_encoding': 'utf-8', \ 'cache': 1, \ }, \ } function! g:ref_source_webdict_sites.wiktionary.filter(output) return join(split(a:output, "\n")[18 :], "\n") endfunction let g:ref_source_webdict_sites.default = 'wiktionary' autocmd Portown FileType ref-webdict nnoremap <buffer> q <C-W>c " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " hatena.vim の設定 {{{ let g:hatena_user = 'portown' " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " uncrustify の設定 {{{ let g:uncrustify_command = 'uncrustify' function! g:uncrustify( lang, config_file ) if !executable( g:uncrustify_command ) || !filereadable( a:config_file ) return endif let l:cursor_pos = getpos( '.' ) :silent execute '%!uncrustify -q -l '.a:lang.' -c '.a:config_file call setpos( '.', l:cursor_pos ) endfunction " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " fugitive.vim の設定 {{{ nnoremap <SID>[git] <Nop> nmap <Space>g <SID>[git] nnoremap <SID>[git]d :<C-U>Gdiff<CR> nnoremap <SID>[git]s :<C-U>Gstatus<CR> nnoremap <SID>[git]c :<C-U>Gcommit -v<CR> " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " Gitv の設定 {{{ let g:Gitv_TruncateCommitSubjects = 1 let g:Gitv_DoNotMapCtrlKey = 1 nnoremap <SID>[gitv] <Nop> nmap <SID>[git]v <SID>[gitv] nnoremap <silent> <SID>[gitv]v :<C-U>Gitv<CR> nnoremap <silent> <SID>[gitv]a :<C-U>Gitv --all<CR> nnoremap <silent> <SID>[gitv]f :<C-U>Gitv!<CR> " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " Vim Git Gutter の設定 {{{ let g:gitgutter_realtime = 0 let g:gitgutter_eager = 0 let g:gitgutter_sign_added = "\u271a" let g:gitgutter_sign_modified = "\u279c" let g:gitgutter_sign_removed = "\u2718" " }}} " ------------------------------------------------------------- " 起動時のメッセージを表示しない set shortmess& shortmess+=I " ------------------------------------------------------------- " .vimrc の設定 {{{ nnoremap <SID>[vimrc] <Nop> nmap <Space>v <SID>[vimrc] nnoremap <silent> <SID>[vimrc]e :<C-U>edit $MYVIMRC<CR> nnoremap <silent> <SID>[vimrc]l :<C-U>source $MYVIMRC \| if has('gui_running') \| source $MYGVIMRC \| endif<CR> " .gvimrc の編集は CUI/GUI 関係なくコマンドでできるようにする nnoremap <SID>[gvimrc] <Nop> nmap <SID>[vimrc]g <SID>[gvimrc] nnoremap <silent> <SID>[gvimrc]e :<C-U>edit $MYGVIMRC<CR> " .gvimrc の再読み込みは GUI のみ if has('gui_running') nnoremap <silent> <SID>[gvimrc]l :<C-U>source $MYGVIMRC<CR> endif " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " ローカル設定の読み込み {{{ if filereadable( expand( '~/.vimrc.local.after' ) ) source ~/.vimrc.local.after endif " }}} " ------------------------------------------------------------- " ------------------------------------------------------------- " ディレクトリローカルな設定の読み込み {{{ augroup vimrc-local autocmd! autocmd BufNewFile,BufReadPost * call s:vimrc_local( expand( '<afile>:p:h' ) ) augroup END function! s:vimrc_local( location ) let files = findfile( '.vimrc.local', escape( a:location, ' ' ) . ';', -1 ) for i in reverse( filter( map( files, 'fnamemodify( v:val, ":p" )' ), 'filereadable( v:val )' ) ) source `=i` endfor endfunction " }}} " -------------------------------------------------------------