basyura's blog

あしたになったらほんきだす。

Hack #161: Command-line windowを使いこなす

普段我々が何げなく使っているCommand-line modeですが、使いこなすうちに様々な欠点が目につきます。このHackでは、Command-line modeを捨て去ってしまうことを提唱します。

Hack #161: Command-line windowを使いこなす

やっつけ

set cmdwinheight=1
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 CmdwinEnter * :NeoComplCacheLock
autocmd CmdwinEnter * call s:init_cmdwin()
function! s:init_cmdwin()
  nnoremap <buffer> q bw
  inoremap <buffer> q bw
  inoremap <buffer> wq WQ
  
  " うまいことしたいんだけど
  "cnoreabbrev <expr>q   'bd'
  "inoreabbrev <expr>q   'bd'
  "inoreabbrev <expr>q!  'bd!'
  "inoreabbrev <expr>wq  'WQ'

  nnoremap <buffer> <Esc> :<C-u><C-c><C-h>
  inoremap <buffer> <C-c> :<ESC>
  inoremap <buffer> <ESC> :<C-u><C-c><C-h>
  nnoremap <buffer> <TAB> :<C-u>quit<CR>
  inoremap <buffer><expr><CR>  pumvisible() ? "\<C-y>" : "\<CR>"
  "inoremap <buffer><expr><C-h> pumvisible() ? "\<C-y>\<C-h>" : "\<C-h>"
  "inoremap <buffer><expr><BS>  pumvisible() ? "\<C-y>\<C-h>" : "\<C-h>"

  " Completion.
  inoremap <buffer><expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
  " カーソル移動
  inoremap <C-k> <Up>
  inoremap <C-j> <Down>

  startinsert!
endfunction

: を押すたびに一行上にスクロールするのが気になる・・・。
本当は自動補完の自動選択で一時的に補完が始まる長さを 5 ぐらいに変えたいのだけど、:NeoComplCacheAutoCompletionLength が効かない(やり方が悪い?使い方が違う?)のでひとまず :NeoComplCacheLock でロック。
あとは esc を押した際の動きと歴を探したい時の操作がしっくりこないので色々触ってみる。