正直:ls
は使いづらくて…
使いづらいってほどじゃないんだけど、コマンド実行後の画面専有があまり嬉しくないので定期的にふっ飛ばしたくなりつつも、あると便利なのも本音なのでうまいこと調節してやりたいんですよね。それは:oldfiles
も一緒で…でもいちいち:filter
もめんどくさい。
ということはスクリプトですよね?
SCRIPT OR DIE!!!!!!!!!
" :lsと:oldfilesのフィルタリング用
function! s:loadList(...) abort
if a:0 != 1
let l:query = '/'.a:2.'/ '
else
let l:query = '// '
endif
exec 'filter '.l:query.a:1
endfunction
command! -nargs=? RRoldfiles call s:loadList('oldfiles',<f-args>)
command! -nargs=? BBls call s:loadList('ls',<f-args>)
noremap <Leader>rr :RRoldfiles
noremap <Leader>bb :BBls
これでリーダーから省略で入力してもその状態からフィルタリングして出力の量が減らしやすくなりました。さておき、それでも多いときは多いし出来ればコマンドの出力結果自体を画面の半分くらいにしてほしいんだけど、どっか設定できる所あるんですかね?おしえてvimmer!
間違えて何度ウィンドウ閉じたことか…
編集ウィンドウが一つしかない時によく間違えて:q
してしまうので…
function! s:chkQuit() abort
if winnr() * tabpagenr() > 1
:quit
else
:enew
endif
endfunction
command! -bang CQ :call s:chkQuit('')
nnoremap q :CQ
:q
に対して引数ないので簡単だったけどこれ:wq
に対してはちょっと調べないとる気がせんやつだなーってなってます。そんなに考えることなさそうなんでちょっとやってみますか…
なんだこれ全然ダメじゃねぇか!
もっと単純でいいのよ?
コマンドの置き換えはcabbrev
を使える…ならclose
に置き換えてしまえるのか…
cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'close' : 'q')<CR>
まぁそりゃそうよね。ただ、「気分的にコマンドに対して別なコマンド動くの気持ち悪くない?」ってなってます。例えば…
function! s:quitChk() abort
if winnr('$')*tabpagenr('$') <= 1 && getcmdline() != ':quit'
enew
endif
endfunction
augroup dumbQuit
autocmd!
au QuitPre * call s:quitChk()
augroup end
…みたいに出来ないの?と思ったけど結局終了処理に入りましたね。
間違っとるやんけ!
" :qでvimを終了させないための処理
function! s:quitChk() abort
if winnr('$')*tabpagenr('$') <= 1 && histget("cmd",-1) !~ '\v^quit(all)?!?'
echo ''':quit[all]'' to close vim.'
sbp
endif
endfunction
augroup dumbQuit
autocmd!
au QuitPre * call s:quitChk()
augroup end
微妙に間違ってて、コマンドが省略なしの:quit
だった時だけsbp
させないようにしてた部分がgetcmdline()
だとダメだったのでhistget()
に変更しました。出来れば起動時のメッセージも出したいんだけどアレどうやって出してるんです?