Closed LeafCage closed 10 years ago
ウインドウサイズ問題は手順が難しいので、この情報ではわかりません。 必要なのは、
です。それが示されない限り、こちらでは再現不能なので対処しません。
手順
:Unite source
<C-w><C-w>
:split
<C-w>W
q
(unite-exit) ※<Plug>(unite-exit)
でウィンドウが狂うが、普通の:bdだと狂わないように見える
使ったvimrc
"minimum vimrc special options
set nocompatible
let pathstr = '%.40(%{empty(bufname("%")) ? "" : expand(''%:p:h'')."/"}%9*%t %0*%)'
let fencstr = '%([%{&fenc}/%{&ff[:0]}]%)'
let &stl = '%{repeat(",", winnr()).","}%4P'. '%9*%3n-%0*'. pathstr. '%m%R%H%W%y '. fencstr. '%=%4l(%4L),%3v(%3{virtcol("$")-1})%<'
"======================================
aug vimrc
au!
aug END
let s:bind = {'win': 'm', 'markj': '`', 'reg': '[@]', 'mode': '<C-q>', 'esc': '<C-o>', 'snip': 's', 'sticky': '[C-k]'}
"--------------------------------------
set encoding=utf8
scriptencoding utf8
"BufRead時、'fileencodings'の先頭から'encoding'を試してerrが出なければそれを適用
set fileencodings=utf8,cp932,iso-2022-jp,euc-jp,default,latin
"改行コードの自動認識(新規作成されるファイルフォーマットをdosにしたい)
set fileformats=dos,unix,mac
"======================================
"環境変数
"$HOME がないとき、$VIM/TMPHOME を $HOME にする "{{{
if !exists("$HOME")
if isdirectory('/hom')
let $HOME='/hom'
else
let $HOME=$VIM. '/TMPHOME'
endif
endif
"}}}
"$PATHを追加{{{
function! s:PATH_add(path)
let $PATH .= $PATH =~ a:path ? '' : a:path. ';'
endfunction
if has('vim_starting')
let $PATH .= ';'
call s:PATH_add('/bnr/cmd/MinGW/bin')
call s:PATH_add('/bnr/cmd/path')
call s:PATH_add('/bnr/cmd/PortableGit-1.7.11-preview20120620/bin')
call s:PATH_add('C:/Program Files/Java/jdk1.7.0_09/bin')
let $GOROOT = '/bnr/cmd/go'
call s:PATH_add($GOROOT.'/bin')
let $GOPATH = $HOME. '/_go'
call s:PATH_add($GOPATH.'/bin')
call s:PATH_add('/bnr/cmd/MercurialCmdPortable/App/Mercurial')
endif
"}}}
let $JVGREP_OUTPUT_ENCODING = 'cp932'
let $TERM = exists('$TERM') ? $TERM : 'msys'
let $DOTFILES = $HOME. '/box/dotfiles'
"--------------------------------------
"vim関係のpath
let $BASEDIR = exists('$BASEDIR') ? $BASEDIR : expand($HOME . '/box')
let $MYVIMRC_SUBSTANCEDIR = $BASEDIR. '/dotfiles/vim'
let $VIMCACHE = $HOME. '/.cache/vim/minimum'
let $VIMUSERDIR = $BASEDIR. '/vimuser'
if has('vim_starting')
let $VIMFILES = isdirectory(expand('$BASEDIR/vimfiles')) ? $BASEDIR. '/vimfiles' : isdirectory(expand('$HOME/vimfiles')) ? $HOME. '/vimfiles' : $VIM. '/vimfiles'
set rtp+=$VIMFILES,$VIMFILES/after,$VIMFILES/neobundle/neobundle.vim
endif
call neobundle#rc(expand('$VIMFILES/neobundle'))
NeoBundle 'Shougo/vimproc'
NeoBundle 'Shougo/unite.vim'
"=============================================================================
"KeyMappings
let mapleader = '\'
let maplocalleader = '\\'
noremap [space] <nop>
nmap <Space> [space]
nmap <C-k> [C-k]
map @ [@]
"--------------------------------------
"No operation
"誤爆防止
nnoremap ZZ <Nop>
nnoremap q <Nop>
nnoremap <C-q> <Nop>
noremap m <Nop>
"インサートモードで間違って出してほしくないキー
noremap <F15> <Nop>
noremap! <F15> <Nop>
noremap <F16> <Nop>
noremap! <F16> <Nop>
noremap! <S-F16> <Nop>
inoremap <M-j> <Nop>
"--------------------------------------
"インサートモードでの削除コマンドにundoを有効化させる
inoremap <expr><C-h> pumvisible() ? "\<C-h>" : "\<C-g>u\<C-h>"
inoremap <C-u> <C-g>u<C-u>
"inoremap <c-w> <c-g>u<c-w>
"--------------------------------------
"参照操作
cnoremap <F1> <C-u>h function-list<CR>
nnoremap <expr><F1> v:count==1 ? ":\<C-u>h :command-completion-custom\<CR>" : ":\<C-u>h function-list\<CR>"
nnoremap <C-h> :<C-u>h<Space>
cnoremap <expr><C-h> getcmdtype()==':' ? getcmdpos()==1 ? 'h ' : "\<C-h>" : "\<C-h>"
cnoremap <expr><C-e> getcmdtype()==':' ? getcmdline()=~'^\s*$\\|^h $' ? "<C-u>ec " : "\<C-e>" : "\<C-e>"
"--------------------------------------
"クリップボード
noremap ,y "*y
nnoremap <silent>,yu :<C-u>let @* = @"<CR>
noremap ,Y "*y$
noremap ,p "*p
noremap ,P "*P
noremap <F3> "+
noremap! <F3> <C-r>+
noremap <C-z> "+
inoremap <C-r><C-y> <C-r>+
cnoremap <C-r><C-y> <C-r>=substitute(@+, '\n$', '', 'g')<CR>
cnoremap <C-y> <C-r>=substitute(@+, '\n$', '', 'g')<CR>
nnoremap <C-c> "+y
vnoremap <C-c> "+y
vnoremap <C-y> "+y
snoremap <C-c> <C-c>a
vnoremap <expr><C-v> mode()=="\<C-v>" ? "\<Esc>\"+p" : "\<C-v>"
"レジスタ
exe 'nnoremap '. s:bind.reg. ' "'
exe 'nnoremap '. s:bind.reg. '+ "+'
exe 'vnoremap '. s:bind.reg. ' "'
exe 'vnoremap '. s:bind.reg. '+ "+'
"--------------------------------------
"Sticky Keys
"nmap <expr> ,; <SID>sticky_func()
"omap <expr> ; <SID>sticky_func()
"xmap <expr> ; <SID>sticky_func()
"nnoremap .. .
"nnoremap z.. z.
exe 'map <expr> '. s:bind.sticky ' <SID>sticky_func()'
exe 'map <expr> g'. s:bind.sticky ' "g". <SID>sticky_func()'
exe 'map <expr> z'. s:bind.sticky ' "z". <SID>sticky_func()'
exe 'map <expr> ,'. s:bind.sticky ' ",". <SID>sticky_func()'
exe 'map <expr> "'. s:bind.sticky ' "\"". <SID>sticky_func()'
exe 'omap <expr> i'. s:bind.sticky ' "i". <SID>sticky_func()'
exe 'omap <expr> a'. s:bind.sticky ' "a". <SID>sticky_func()'
exe 'xmap <expr> i'. s:bind.sticky ' "i". <SID>sticky_func()'
exe 'xmap <expr> a'. s:bind.sticky ' "a". <SID>sticky_func()'
function! s:sticky_func() "{{{
let l:sticky_table = { ',' : '<', '.' : '>', '/' : '?',
\'1' : '!', '2' : '"', '3' : '#', '4' : '$', '5' : '%', '6' : '&', '7' : "'", '8' : '(', '9' : ')', '0' : '_',
\ '-' : '=', '^' : '~', ';' : '+', ':' : '*', '[' : '{', ']' : '}', '@' : '`', '\' : '|'}
let l:special_table = {"\<ESC>" : "\<ESC>", "\<Space>" : "\<Space>", "\<CR>" : ";\<CR>"}
let key = nr2char(getchar())
if key =~ '\l'
return toupper(key)
elseif has_key(l:sticky_table, key)
return l:sticky_table[key]
elseif has_key(l:special_table, key)
return l:special_table[key]
else
return mode()=='n'? "\<Esc>" : ''
endif
endfunction
"}}}
"======================================
"Normal mode
map Y y$
nnoremap ; :
vnoremap ; :
nnoremap [space]/ :<C-u>%s/
nnoremap j gj|nnoremap k gk
vnoremap <expr>j mode()==#'V' ? 'j' : 'gj'|vnoremap <expr>k mode()==#'V' ? 'k' : 'gk'
nnoremap <expr>l foldclosed('.') != -1 ? 'zo' : 'l'
noremap zq q
noremap z@ @
nnoremap : ;
nnoremap <silent>,w :<C-u>up<CR>
nnoremap ,qu :<C-u>qa<CR>
nnoremap ,7 :<C-u>se fenc=euc-jp<CR>
nnoremap ,8 :<C-u>se fenc=utf-8<CR>
nnoremap ,9 :<C-u>se fenc=cp932<CR>
nnoremap <silent>,0 :<C-u>let &ff = &ff=='dos' ? 'unix' : &ff=='unix' ? 'mac' : 'dos'<CR>
"Normal mode 編集
nnoremap guu gU
"Normal modeで挿入
nnoremap <silent><C-j> :<C-u>call append(foldclosedend('.')==-1 ? '.': foldclosedend('.'), repeat([''], v:count1))<Bar>exe 'norm!' v:count1. 'j'<CR>
nnoremap [C-k]<C-j> :i<CR><CR>.<CR>
"空白を挿入する
nnoremap [space]a a<Space><Esc>
"nnoremap <C-Space> a<Space><Esc>
nnoremap [space]i i<Space><Esc>
nnoremap [space]s i<Space><Esc>la<Space><Esc>h
"--------------------------------------
"Win/Buf Open/Close
exe 'nnoremap '. s:bind.win. 's <C-w>s'
exe 'nnoremap '. s:bind.win. 'v <C-w>v'
exe 'nnoremap '. s:bind.win. 'o <C-w>o'
exe 'nnoremap <silent> '. s:bind.win. 't :tab split<CR>'
nmap dv <SID>bd
nnoremap <SID>bd :bd<CR>
nmap dn <SID>KeepWinBd
nnoremap <silent><SID>KeepWinBd :KeepWinBd<CR>
"ウィンドウレイアウトを保持したままバッファを閉じる
com! KeepWinBd let save_bufnr= bufnr("%") |bnext |exe "bd ".save_bufnr |unlet save_bufnr
nmap dq <C-w>c
exe 'nnoremap '. s:bind.win. 'dd <C-w>c'
exe 'nnoremap '. s:bind.win. 'q <C-w>c'
"Window Layout
nnoremap ,0 <C-w>=
exe 'nnoremap '. s:bind.win. '0 <C-w>='
nnoremap ,\ <C-w>_
nnoremap <C-w>\ <C-w>_
exe 'nnoremap '. s:bind.win. '\ <C-w>_'
exe 'nnoremap '. s:bind.win. 'J <C-w>J'
exe 'nnoremap '. s:bind.win. 'K <C-w>K'
exe 'nnoremap '. s:bind.win. 'H <C-w>H'
exe 'nnoremap '. s:bind.win. 'L <C-w>L'
"ある窓を大きく開く
"nnoremap <silent>,0 :call <SID>enlarge_win(0)<CR>
nnoremap <silent>,1 :call <SID>enlarge_win(1)<CR>
nnoremap <silent>,2 :call <SID>enlarge_win(2)<CR>
nnoremap <silent>,3 :call <SID>enlarge_win(3)<CR>
nnoremap <silent>,4 :call <SID>enlarge_win(4)<CR>
nnoremap <silent>,5 :call <SID>enlarge_win(5)<CR>
nnoremap <silent>,6 :call <SID>enlarge_win(6)<CR>
function! s:enlarge_win(winnr) "{{{
let targetWinnr = a:winnr ? a:winnr : winnr()
let [save_winnr, save_wh, save_wiw] = [winnr(), &winheight, &winwidth]
set wh=20 wiw=20
exe targetWinnr. 'wincmd w'
exe 'wincmd ='
let [&wh, &wiw] = [save_wh, save_wiw]
exe save_winnr. 'wincmd w'
endfunction
"}}}
"指定した番号の窓を閉じる
nmap ct <SID>close_remotewin1
nmap cz <SID>close_remotewin$
nmap c1 <SID>close_remotewin1
nmap c2 <SID>close_remotewin2
nmap c3 <SID>close_remotewin3
nmap c4 <SID>close_remotewin4
nmap c5 <SID>close_remotewin5
nmap c6 <SID>close_remotewin6
nmap d,t <SID>close_remotewin1
nmap d,z <SID>close_remotewin$
nmap d,1 <SID>close_remotewin1
nmap d,2 <SID>close_remotewin2
nmap d,3 <SID>close_remotewin3
nmap d,4 <SID>close_remotewin4
nmap d,5 <SID>close_remotewin5
nmap d,6 <SID>close_remotewin6
nmap mdt <SID>close_remotewin1
nmap mdz <SID>close_remotewin$
nmap md1 <SID>close_remotewin1
nmap md2 <SID>close_remotewin2
nmap md3 <SID>close_remotewin3
nmap md4 <SID>close_remotewin4
nmap md5 <SID>close_remotewin5
nmap md6 <SID>close_remotewin6
nnoremap <SID>close_remotewin$ :call <SID>close_remotewin(winnr('$'))<CR>
nnoremap <SID>close_remotewin1 :call <SID>close_remotewin(1)<CR>
nnoremap <SID>close_remotewin2 :call <SID>close_remotewin(2)<CR>
nnoremap <SID>close_remotewin3 :call <SID>close_remotewin(3)<CR>
nnoremap <SID>close_remotewin4 :call <SID>close_remotewin(4)<CR>
nnoremap <SID>close_remotewin5 :call <SID>close_remotewin(5)<CR>
nnoremap <SID>close_remotewin6 :call <SID>close_remotewin(6)<CR>
function! s:close_remotewin(winnr)
let save_winnr = winnr()
exe a:winnr. 'wincmd w'
hide
if save_winnr == a:winnr
return
endif
let save_winnr = s:_get_ajusted_savewinnr(save_winnr, [a:winnr])
exe save_winnr. 'wincmd w'
endfunction
"Specialwin Open/Close
nnoremap <silent><SID>close_whole_specialwins :call <SID>close_whole_specialwins(['&previewwindow'], ['quickfix'], ['unite'])<CR>
nmap cq <SID>close_whole_specialwins
nmap d,q <SID>close_whole_specialwins
function! s:close_whole_specialwins(options, buftypes, filetypes) "{{{
let save_winnr = winnr()
let killedwinnr_list = []
windo call add(killedwinnr_list, s:_close_win(s:_should_close(a:options, a:buftypes, a:filetypes)))
let save_winnr = s:_get_ajusted_savewinnr(save_winnr, killedwinnr_list)
exe save_winnr.'wincmd w'
endfunction
"}}}
function! s:_close_win(should_close) "{{{
if !a:should_close
return 0
endif
let winnr = winnr()
hide
return winnr
endfunction "}}}
function! s:_should_close(options, buftypes, filetypes) "{{{
if index(a:options, 1)!=-1
return 1
endif
if index(a:buftypes, &bt)!=-1
return 1
endif
if index(a:filetypes, &ft)!=-1
return 1
endif
endfunction
"}}}
function! s:_get_ajusted_savewinnr(save_winnr, killedwinnr_list) "{{{
let save_winnr = a:save_winnr
for killedwinnr in reverse(a:killedwinnr_list)
if killedwinnr == 0
continue
elseif killedwinnr < save_winnr
let save_winnr -= 1
endif
endfor
return save_winnr
endfunction
"}}}
"Tabpage Open/Close
noremap <SID>tabc :tabc<CR>
nmap <silent>dy <SID>tabc
nmap <silent>du <SID>tabc
nnoremap <silent> myo :tabonly<CR>
nnoremap <silent> myv :tabe $VIM/.vimrc<CR>
nnoremap <silent> my] :execute "tab tag ".expand('<cword>')<CR>|"カーソルドタグを新規タブページで開く
nnoremap <silent> myK :execute "tab help ".expand('<cword>')<CR>|"カーソルドワードを新規タブページで:helpする
"--------------------------------------
"Buf Switching
nnoremap <silent> [space]h :bp<CR>
nnoremap <silent> [space]l :bn<CR>
"Win Switching
nnoremap [space]n gt
nnoremap [space]p gT
"noremap <S-C-i> gt
nnoremap <silent> <S-C-Tab> :tabp<CR>
nnoremap <silent> <C-Tab> :tabn<CR>
nnoremap <silent>[space]j :call <SID>Roop_switchWin("j")<CR>
nnoremap <silent>[space]k :call <SID>Roop_switchWin("k")<CR>
function! s:Roop_switchWin(bind) "{{{
let save_winnr = winnr()
exe 'wincmd '. a:bind
if winnr() == save_winnr
let antiBind = a:bind=='h'?'l' : a:bind=='j'?'k' : a:bind=='k'?'j' : 'h'
exe '16wincmd '. antiBind
endif
endfunction
"}}}
exe 'nnoremap <silent>'. s:bind.win. 'h :call <SID>Roop_switchWin("h")<CR>'
exe 'nnoremap <silent>'. s:bind.win. 'j :call <SID>Roop_switchWin("j")<CR>'
exe 'nnoremap <silent>'. s:bind.win. 'k :call <SID>Roop_switchWin("k")<CR>'
exe 'nnoremap <silent>'. s:bind.win. 'l :call <SID>Roop_switchWin("l")<CR>'
"指定した窓に跳ぶ
nnoremap [space]1 1<C-w><C-w>
nnoremap [space]2 2<C-w><C-w>
nnoremap [space]3 3<C-w><C-w>
nnoremap [space]4 4<C-w><C-w>
nnoremap [space]5 5<C-w><C-w>
nnoremap [space]6 6<C-w><C-w>
exe 'nnoremap '. s:bind.win. '1 1<C-w><C-w>'
exe 'nnoremap '. s:bind.win. '2 2<C-w><C-w>'
exe 'nnoremap '. s:bind.win. '3 3<C-w><C-w>'
exe 'nnoremap '. s:bind.win. '4 4<C-w><C-w>'
exe 'nnoremap '. s:bind.win. '5 5<C-w><C-w>'
exe 'nnoremap '. s:bind.win. '6 6<C-w><C-w>'
"Specialwin Switching
"QuickFixコマンド
nmap cn <SID>c_n
nnoremap <SID>c_n :cn<CR>zv
nmap cp <SID>c_p
nnoremap <SID>c_p :cp<CR>zv
nmap cv <SID>c_window
nnoremap <SID>c_window :cw<CR>
"--------------------------------------
"Open the Particular Buf
nnoremap <SID>o_vimrc :e $MYVIMRC_SUBSTANCEDIR/.vimrc<CR>g`"
nmap cov <SID>o_vimrc
nnoremap <SID>o_gitconfig :e $DOTFILES/.gitconfig<CR>
nmap cog <SID>o_gitconfig
"--------------------------------------
"Info
nnoremap <silent><C-g> :<C-u>echo <SID>get_fileinfo()<CR>
function! s:get_fileinfo() "{{{
let ret = ''
let ret .= printf('"%s" (upd:%s) [%schrs] (%d/%dv) winwidth%d',
\ bufname("%"),
\ strftime("%Y_%m%d %H:%M",getftime(bufname("%"))),
\ (exists('b:charCounterCount') ? b:charCounterCount : ''),
\ virtcol('.'), virtcol('$'), winwidth(0),
\ )[:&co-2]
let ret .= "\n". FoldCCnavi()
return ret
endfunction
"}}}
nnoremap mS :<C-u>scrip<CR>
"nnoremap ma :marks<CR>
"nnoremap ma :<C-u>Unite mark<CR>
"検索ハイライト
sign define SearchStart text=索 texthl=Search
noremap <silent> z/ :<C-u>RCReset<CR>:nohlsearch<CR>:sign unplace 333<CR>
"noremap <silent>n :<C-u>call <SID>put_searchstart_sign(1)<CR>nzv
function! s:put_searchstart_sign(is_nN_bindsearch) "{{{
let [lnr, bufnr] = [line('.'), bufnr('%')]
if a:is_nN_bindsearch && s:_get_crrsigns(bufnr)=~'=333'
return
endif
sign unplace 333
exe 'sign place 333 line='. lnr. ' name=SearchStart buffer='. bufnr
endfunction
function! s:_get_crrsigns(crrbufnr)
redir => chksign
silent exe 'sign place buffer='. a:crrbufnr
redir END
return chksign
endfunction
"}}}
nnoremap <silent> g/ :exe 'sign jump 333 buffer='.bufnr('%')<CR>
"--------------------------------------
"Moving
nmap + *
nnoremap g* g*N
let g:f_pos = [0, 0]
function! s:imoff_f(is_vmode) "{{{
let save_gcr = &gcr
set gcr=n:hor20
let c = nr2char(getchar())
if a:is_vmode && c!="\<Esc>"
let g:f_pos = [bufnr('%'), line('.')]
else
let g:f_pos = [0, 0]
end
let &gcr = save_gcr
return c
endfunction
"}}}
nnoremap <silent>f :<C-u>exe 'norm!' v:count1.'f'. <SID>imoff_f(0)<CR>
nnoremap <silent>F :<C-u>exe 'norm!' v:count1.'F'. <SID>imoff_f(0)<CR>
vnoremap <silent>f :<C-u>exe 'norm! ' visualmode(). v:count1.'f'. <SID>imoff_f(1)<CR>
vnoremap <silent>F :<C-u>exe 'norm! ' visualmode(). v:count1.'F'. <SID>imoff_f(1)<CR>
nnoremap t ;
nnoremap T ;
vnoremap <expr>t bufnr('%')==g:f_pos[0] && line('.')==g:f_pos[1] ? ';' : ":\<C-u>exe 'norm!' visualmode(). v:count1.'t'. <SID>imoff_f(1)\<CR>"
noremap U %
noremap L $
noremap <expr>H col('.') == match(getline('.'), '^\s*\zs\S')+1 ? '0' : '^'
"noremap <silent>M :<C-u>call <SID>smart_M('M')<CR>
function! s:smart_M(move) "{{{
let s:smart_M_count = get(s:, 'smart_M_count', 0)
let s:origin_view = s:smart_M_count==0 ? winsaveview() : get(s:, 'origin_view', winsaveview())
let oldview = winsaveview()
keepj exe ['norm! H', 'norm! M', 'norm! L', 'call winrestview(s:origin_view)'][s:smart_M_count-1]
if winsaveview() != oldview
let s:origin_view = winsaveview()
let s:smart_M_count = 0
endif
keepj exe ['norm! H', 'norm! M', 'norm! L', 'call winrestview(s:origin_view)'][s:smart_M_count]
let s:smart_M_count = s:smart_M_count==3 ? 0 : s:smart_M_count+1
endfunction
"}}}
noremap [space]w W
noremap [space]b B
noremap [space]e E
noremap [space]ge gE
omap <C-w> iW
"mark jump
exe 'noremap '. s:bind.markj. ' `'
exe 'noremap '. s:bind.markj. '` ``'
exe 'noremap '. s:bind.markj. '+ `"'
"次の折り畳みに移動
nnoremap <silent>zj :<C-u>call <SID>smart_foldjump('j')<CR>
nnoremap <silent>zk :<C-u>call <SID>smart_foldjump('k')<CR>
function! s:smart_foldjump(direction) "{{{
if a:direction == 'j'
let [cross, trace, compare] = ['zj', ']z', '<']
else
let [cross, trace, compare] = ['zk', '[z', '>']
endif
let i = v:count1
while i
let save_lnum = line('.')
exe 'keepj norm! '. trace
let trace_lnum = line('.')
exe save_lnum
exe 'keepj norm! '. cross
let cross_lnum = line('.')
if cross_lnum != save_lnum && eval('cross_lnum '. compare. ' trace_lnum') || trace_lnum == save_lnum
let i -= 1
continue
endif
exe trace_lnum
let i -= 1
endwhile
mark `
norm! zz
endfunction
"}}}
"--------------------------------------
"折り畳み操作
nnoremap <silent><C-_> :call <SID>smart_foldcloser()<CR>
function! s:smart_foldcloser() "{{{
if !&fen
return
endif
if foldlevel('.') == 0
norm! zM
return
endif
let foldc_lnum = foldclosed('.')
norm! zc
if foldc_lnum == -1
return
endif
if foldclosed('.') != foldc_lnum
return
endif
norm! zM
endfunction
"}}}
"現在地にfoldlevelを合わせる
nnoremap <silent>zu :set foldlevel=<C-r>=foldlevel('.')-1<CR><CR>
nnoremap <silent>zu zMzvzc
nnoremap <silent>z<C-_> zMzvzc
nnoremap <silent>z0 :set foldlevel=<C-r>=foldlevel('.')<CR><CR>
nnoremap zf A <Esc>^zf
nnoremap z[ :<C-u>call <SID>put_foldmarker(0)<CR>
nnoremap z] :<C-u>call <SID>put_foldmarker(1)<CR>
function! s:put_foldmarker(foldclose_p) "{{{
let crrstr = getline('.')
let padding = crrstr=='' ? '' : crrstr=~'\s$' ? '' : ' '
let [cms_start, cms_end] = ['', '']
let outside_a_comment_p = synIDattr(synID(line('.'), col('$')-1, 1), 'name') !~? 'comment'
if outside_a_comment_p
let cms_start = matchstr(&cms,'\V\s\*\zs\.\+\ze%s')
let cms_end = matchstr(&cms,'\V%s\zs\.\+')
endif
let fmr = split(&fmr, ',')[a:foldclose_p]. (v:count ? v:count : '')
exe 'norm! A'. padding. cms_start. fmr. cms_end
endfunction
"}}}
"--------------------------------------
"編集バインド(Normal)
nnoremap s "_s
nmap yd "_d
nmap yD "_D
nmap yc "_c
nmap yC "_C
function! s:delete_trailing_whitespaces() "{{{
let save_view = winsaveview()
let save_search=@/
%s/\s\+$//e
let @/=save_search
nohl
call winrestview(save_view)
endfunction
"}}}
nnoremap <silent>,es :<C-u>call <SID>delete_trailing_whitespaces()<CR>
"直前のコマンドを再度実行する
"nnoremap ,. q:k<CR>
nnoremap [@]: @:
nmap c. @:
"ペーストしたテキストを再選択するBible3-15
onoremap [@]@ `[`]
vnoremap <expr> [@]@ "\<Esc>`[". strpart(getregtype(), 0,1). '`]'
onoremap <silent> gv :normal gv<CR>
"前回保存した状態にまでアンドゥ
nnoremap ,u :earlier 1f<CR>
nnoremap [space]<C-r> :later 1f<CR>
nnoremap =p p`[=`]
nnoremap =P P`[=`]
"テスト変数
nnoremap <silent>[C-k]<C-t>u :call <SID>unlet_testvars()<CR>
function! s:unlet_testvars() "{{{
for n in range(30)
let v = 'g:test'. printf('%02d', n)
if exists(v)
exe 'unlet '. v
endif
endfor
endfunction
"}}}
nnoremap [C-k]<C-t><C-t> :echo <SID>display_testvars()<CR>
function! s:display_testvars() "{{{
let display = ''
for n in range(30)
let v = 'g:test'. printf('%02d', n)
if exists(v)
let display .= v. '='. string(eval(v)). "\n"
endif
endfor
return display
endfunction
"}}}
nnoremap [C-k]<C-t>k :call PeekEcho()<CR>
":source
"nnoremap [C-k]v source $MYVIMRC<CR>
nnoremap ,xv source $MYVIMRC<CR>
nnoremap <silent>[C-k]<C-s> :<C-u>if &mod<Bar> echoh WarningMsg <Bar>ec '先に保存してください'<Bar>echoh NONE <Bar> else<Bar> source %<Bar>echoh MoreMsg<Bar>echom 'sourced:'expand('%') strftime('%X', localtime())<Bar>echoh NONE<Bar> endif<CR>
"======================================
"Visual mode
vnoremap . :norm .<CR>
xnoremap re y:%s/<C-r>=substitute(@0, '/', '\\/', 'g')<CR>//gI<Left><Left><Left>
vnoremap zf :call <SID>Fixed_zf()<CR>
function! s:Fixed_zf() range "{{{
let cmsStart = matchstr(&cms,'\V\s\*\zs\.\+\ze%s')
let cmsEnd = matchstr(&cms,'\V%s\zs\.\+')
let fmr = split(&fmr,',')
call setline(a:firstline, getline(a:firstline). ' '. cmsStart.fmr[0].cmsEnd)
call setline(a:lastline, getline(a:lastline). cmsStart.fmr[1].cmsEnd)
endfunction
"}}}
vnoremap <expr>v mode()=="v" ? "$h" : "v"
"改良版ビジュアルインサート from TIM Labs kana
vnoremap <expr> I <SID>force_blockwise_visual('I')
vnoremap <expr> A <SID>force_blockwise_visual('A')
function! s:force_blockwise_visual(next_key) "{{{
if mode() ==# 'v'
return "\<C-v>" . a:next_key
elseif mode() ==# 'V'
return "\<C-v>0o$" . a:next_key
else " mode() ==# "\<C-v>"
return a:next_key
endif
endfunction
"}}}
exe 'vnoremap '. s:bind.mode. ' <C-g>'
exe 'vnoremap '. s:bind.esc. ' <Esc>'
"0,0,0などの並んだ数字を選択して連番にするコマンドhttp://d.hatena.ne.jp/fuenor/20090907/1252315621
vnoremap <silent> <F4><C-a> :ContinuousNumber <C-a><CR>
vnoremap <silent> <F4><C-x> :ContinuousNumber <C-x><CR>
command! -count -nargs=1 ContinuousNumber
\ let c = col('.')|for n in range(1, <count>?<count>-line('.'):1)|exec 'normal! j' . n . <q-args>|call cursor('.', c)|endfor
"======================================
"Insert & CommandLine mode
"Moving
noremap! <C-k> <Left>
noremap! <C-f> <Right>
inoremap <C-g> <Esc><Plug>(smartword-w)i
inoremap <C-b> <Esc><Plug>(smartword-b)i
"cnoremap <C-g> <S-Right>
"cnoremap <C-b> <S-Left>
noremap! <C-a> <Home>
inoremap <expr><C-e> pumvisible() ? "\<C-e>" : "\<End>"
"cnoremap <C-e> <End>
"--------------------------------------
"挿入バインド(Insert CommandLine)
inoremap <C-r><C-e> <C-r>"
cnoremap <C-r><C-e> <C-r>=substitute(substitute(@", '\n$', '', ''), '\n', '<Bar> ', 'g')<CR>
noremap! <C-r><C-f> <C-r>=expand('%:t')<CR>
inoremap <S-C-Tab> <C-d>
inoremap <C-r><C-t> 0<C-d>
inoremap <C-r><C-d> <C-d>
inoremap <C-x><C-a> <C-a>
inoremap <expr><C-Tab> &et ? "\<C-v>\<C-i>" : repeat(' ', &sts ? &sts : &ts)
imap <M-Space> <Tab><Tab>
cnoremap <expr> <C-x> expand('%:p:h') . "/"
cnoremap <expr> <C-z> expand('%:p:r')
"cnoremap <expr><C-s> getcmdtype()==':' ? getcmdpos()==1 ? 'set ' : "\<C-s>" : "\<C-s>"
cnoremap <expr> / getcmdtype()=='/' ? '\/' : '/'
cnoremap <expr> ? getcmdtype()=='?' ? '\?' : '?'
"--------------------------------------
"編集バインド(Insert CommandLine)
noremap! <C-d> <Del>
inoremap <C-w> <C-o>db
"後方単語を大文字・小文字化(from thinca)
"gU v(文字指向にする/これによってカーソル上の文字も範囲にする :h o_v) b gi
inoremap <C-x>U <ESC>gUvbgi
inoremap <C-x>u <ESC>guvbgi
"imap <C-_> <Esc>
"cmap <C-_> <C-c>
imap <C-@> <Esc>
cmap <C-@> <C-c>
vmap <C-@> <C-c>
exe 'inoremap '. s:bind.esc. ' <Esc>'
exe 'cmap '. s:bind.esc. ' <C-c>'
cnoreabb <expr>b getcmdtype()==':' && getcmdline()=='b' ? 'ls<CR>:b' : 'b'
cnoreabb <expr>md getcmdtype()==':' && getcmdline()=~#'^\s*setf\%[iletype]' ? 'markdown' : 'md'
cnoreabb <expr>mkd getcmdtype()==':' && getcmdline()=~#'^\s*setf\%[iletype]' ? 'markdown' : 'mkd'
function! NoCursorMoved_Substitute() "{{{
let save_view = winsaveview()
let query = input('%s', '/')
if query=~'^\s*$'
return
end
let cmd = '%s'. query
exe cmd
call histadd(':', cmd)
call histdel('@', query)
call winrestview(save_view)
endfunction
"}}}
cnoreabb <expr>s getcmdtype()==':' && getcmdline()=~'^s' ? 'call NoCursorMoved_Substitute()<CR><C-r>=get([],getchar(0),"")<CR>' : 's'
"=============================================================================
let &mouse = has('mouse') ? 'a': ''
se browsedir=buffer " :bro[wse]ダイアログで開かれる初期dir
se autoread confirm
se winaltkeys =no
se timeout timeoutlen=5000 ttimeoutlen=100
se nrformats=hex "<C-a><C-x>に影響
se showmatch matchtime=1
se clipboard=
se history=50 " :コマンド履歴保存数
se modeline
se wrap
se fdm=marker cms=%s foldcolumn=3
se showtabline=2
se completeopt=menu,menuone,preview "補完
"終了時エラー確認
"set verbosefile=/tmp/vim.log
"======================================
"Backup
"backupfile
":h backup-table
se nobk nowb
"NOTE: 'nobk'で'wb'だと書き込みに失敗したときのみbackupfileが残される
se bex=.bcu
se bdir=/tmp/auBcu/,$TEMP,$TMP,.
"--------------------------------------
"swapfile
se swf
se dir=$VIMCACHE/vimswap,.
for s:dir in split(&dir, ',')[:-2]
if !isdirectory(s:dir)
call mkdir(s:dir, "p")
endif
endfor
unlet s:dir
"--------------------------------------
"undofile
if version >= 703
se undofile
let &undodir = &bdir
endif
"--------------------------------------
se viminfo=
se vi+='20 "marks
se vi+=<50 "register limit (line)
se vi+=s10 "register limit (Kbyte)
se vi+=% "buffers list
se vi+=h "viminfoを読み込むとき 'hlsearch' を無効にする
se vi+=ra:,rb: "removable mediaの指定 (mark履歴対象外にする)
"se vi+=n$VIM/.viminfo "viminfo file name (作成する場所)
se vi+=n$VIMCACHE/.viminfo "viminfo file name (作成する場所)
"--------------------------------------
"views (カーソル位置などを復元)
set viewdir=$VIMCACHE/viewdir viewoptions=folds,cursor,slash,unix
"======================================
"編集設定
"--------------------------------------
"Indent, 自動整形
se expandtab ts=8 sw=2 sts=2 autoindent
"'ts' 見かけ
"'sts' <Tab>の挿入や<BS>の使用等の編集操作
"'sw' 'ci'や'ai'や>>で挿入されるindent
let g:vim_indent_cont = &sw "行継続の際、挿入されるindent量 :h ft-vim-indent
se cindent cinoptions& cinoptions+=:0 "'cinoptions' については実際使うときになって考え直す必要性 :h cinoptions-values
se smartindent
"auto-format
se formatoptions=
"se fo +=t "'textwidth' を使ってテキストを自動折返しする
se fo +=q ""gq" でコメントを整形する。
se fo +=n "番号付きリスト等を認識して折り返す
se fo +=M "マルチバイト文字連結時空白を挿入しない
se fo +=m "マルチバイト文字でも整形を有効にする
"--------------------------------------
"検索
se wrapscan hlsearch incsearch
se tags=./tags,tags,../tags "tagsファイルの読み込み先
set grepprg=jvgrep ""-n;:行番表示-H;:ファイル名表示
"set grepformat=%f:%l:%m
"set grepprg=internal " vimgrep をデフォルトのgrepとする場合internal
"set grepprg=D:/bnr/cmd/cygwingrep/bin/cyggrep.exe\ -nH ""-n;:行番表示-H;:ファイル名表示
"set grepprg=cyggrep.exe\ -nH
"--------------------------------------
"Window
se lines=40 co=130 "時間かかりすぎ
"se scrolloff=2
se helpheight=0 previewheight=0 equalalways cmdheight=2
se winminwidth=0
"--------------------------------------
"カーソルの挙動
se virtualedit =block,onemore "実際に文字がないところにカーソルを置けるようにする
"カーソル左右の動き
se whichwrap=
se ww+=b "<BS>
se ww+=s "<Space>
se ww+=h
se ww+=l
se ww+=< "<Left> (nv)
se ww+=> "<Right> (nv)
se ww+=[ "<Left> (i Replace)
se ww+=] "<Right> (i Replace)
se backspace=indent,eol,start "<BS>等をindentやeolを越えて有効にする
" ファイルを開いたら前回のカーソル位置へ移動 TODO:mkviewに置き換える
"aug vimrc_editting
" au BufReadPost *
" \ if line("'\"") > 1 && line("'\"") <= line('$') |
" \ exe "normal! g`\"" |
" \ endif
"aug END
"-----------------------------------------------------------------------------
"=============================================================================
"表示系
"不可視文字表示
se list lcs=
se lcs +=tab:>-
se lcs +=trail:_ "行末空白
se lcs +=extends:> "画面に表示しきれない (続く)
se lcs +=precedes:< "画面に表示しきれない (続く)
se lcs +=eol:$
"隙間を埋める文字
se fillchars=
se fcs +=vert:\|
se fcs +=stl:\
se fcs +=stlnc:\
se fcs +=fold:\
se fcs +=diff:-
let &sbr = '> ' "折り返された行の先頭に表示する文字列
se cpoptions +=n "'showbreak'を行番号の間に表示させる
se guioptions=
"se go +=c "単純な選択にはポップアップダイアログでなくコンソールダイアログを使う
se go +=r "l/rスクロールバーを常に表示
se go +=L "垂直分割されたときL/Rスクロールバーを表示
"se go +=m "menubar
se go +=g "無効の menubar 項目を灰色表示
"逐次表示されるメッセージ
se shortmess=
se shm +=a "ステータス省略表現を使用
se shm +=O "読み込み、Quickfix関係のメッセージがその前のメッセージを上書きする
se shm +=T "メッセージが長すぎてコマンドラインに収まらないときは中央を切り詰め
se shm +=W "書き込み時、メッセージを表示しない
se shm +=o "書き込み時のメッセージをその後の読み込みメッセージで上書きする
se shm +=I "Vim開始挨拶メッセージを表示しない
.vimrc
set nocompatible
filetype off
execute 'set runtimepath+='.expand('~/.vim/bundle/neobundle.vim')
call neobundle#rc(expand('~/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/unite.vim'
syntax enable
filetype plugin indent on
起動からのコマンド
:Unite line
<C-w>j
:vsp
<C-w>k
q
アニメーションgif
仕様です。unite.vimはUniteウインドウを「開いた時の」情報を保存しており、閉じた時に復元します。 当然、ウインドウ構成が変わるとうまく動きません。
仕様です。が、動作は改善できそうなので対処しておきました。
ありがとうございます。
分割されたときのexitが改善されたのを確認しました。
botright
:split
などをする(ウィンドウサイズが変更される<C-w>=
されたかのように整理される)一番下のウィンドウ(Uniteウィンドウの真上に当たるウィンドウ)のサイズが1行だけになってしまう。そしてUnite終了時戻ってくるのは一番下のウィンドウではなくその上のウィンドウ。