" CAPS LOCK "" skkeletonは便利ですね本当に function s:caps() for mode in ['i', 'c'] call skkeleton#internal#map#save(mode) for key in 'abcdefghijklmnopqrstuvwxyz'->split('\zs') execute printf('%snoremap %s %s', mode, key, key->toupper()) endfor endfor augroup vimrc_caps autocmd! autocmd ModeChanged *:n* ++once call skkeleton#internal#map#restore() augroup END endfunction noremap! C call caps() " Cmdlineをキャンセルした際に履歴を残さない cnoremap " code input advanced in insert mode "" thanks monaqa and tsuyoshicho inoremap u =nr2char(0x) " from https://github.com/kat0h/dotfiles/blob/7c371cd16f39e66f0960d3c847085ff64d19881d/dot_vim/keymap.vim#L51-L54 ""Undoポイントを貼り付ける inoremap u inoremap u " kigou utiyasuku suru noremap! ,q noremap! ,a \ noremap! ,z _ noremap! ,s : noremap! ,e + noremap! ,d = noremap! ,c * noremap! ,f # " notation helper function s:notation() let ve = &l:virtualedit try let &l:virtualedit = 'onemore' let result = input('') if !empty(result) if result[0] ==# '.' let result = toupper(result[1:]) elseif result[0] ==# '/' let result = result[1:] else let result = toupper(result[0]) .. result[1:] endif let result = '<' .. result .. '>' call feedkeys(result, 'ni') endif finally let &l:virtualedit = ve endtry endfunction noremap! ,, call notation() " pum.vim "" X function s:pum_select_by(reverse, callback) abort let info = pum#complete_info() if info.selected == -1 " 選択されていない場合は端から if a:reverse let index = len(info.items) - 1 else let index = 0 endif else let index = info.selected endif let current = info.items[index] " 現在位置から端まで舐める for i in a:reverse ? range(index - 1, 0, -1) : range(index + 1, len(info.items) - 1) " マッチしたらそこまでカーソルを動かし if a:callback(current, info.items[i]) call pum#map#select_relative(i - info.selected) return endif endfor " そうじゃなければ選択を解除 call pum#map#select_relative(-index - 1) endfunction function s:pum_candidate_compare(a, b) abort let a = a:a let b = a:b if a.__sourceName !=# b.__sourceName return v:true endif if a.__sourceName ==# 'skkeleton_okuri' return strchars(a.data.skkeleton_okuri.okuri) != strchars(b.data.skkeleton_okuri.okuri) endif return v:false endfunction function s:pum_mode(key) abort if !pum#visible() return endif call feedkeys(a:key, 'it') let cont = v:true while cont let cont = v:false redraw let c = getcharstr() if c ==# "\" call pum#map#select_relative(+1) let cont = v:true elseif c ==# "\" call pum#map#select_relative(-1) let cont = v:true elseif c ==# 'E' call pum#map#cancel() elseif c ==# 'N' call s:pum_select_by(v:false, function('s:pum_candidate_compare')) let cont = v:true elseif c ==# 'P' call s:pum_select_by(v:true, function('s:pum_candidate_compare')) let cont = v:true elseif c ==# "\" " keyword単位でreplaceすると便利らしいので仕込んでみた call search('\%#\k*\zs') call pum#map#confirm() elseif c ==# "\" " do egg like call pum#map#confirm() else " pum.vimのconfirm->吸った文字->残りの入力の順番で並ぶ必要がある " pum.vimはconfirmをするとi付きでfeedkeysをするのでこの順番で処理をすると上手く行く call feedkeys(c, 'i') call pum#map#confirm() endif endwhile endfunction noremap! N call pum_mode('N') noremap! P call pum_mode('P') noremap! call pum_mode('') noremap! call pum_mode('') " single quoteをprefixにしてしまう "" 一番上 inoremap 'z eval winsaveview()->extend({'topline': line('.') - 3})->winrestview() "" スニペットジャンプ function s:snipjump() if vsnip#jumpable(1) call vimrc#keycode#feedkeys('(vsnip-jump-next)') elseif denops#plugin#is_loaded('denippet') && denippet#jumpable(1) call denippet#jump(1) endif endfunction inoremap F call snipjump() "" sticky ; noremap! ; toupper(getcharstr()[0]) noremap! ; : noremap! ; :: " 単語ジャンプ by kawarimidoll inoremap W getline('.')->len() == col('.') ? "\" : "\e\" " 無変換と変換 "" xremapかけてる前提の配置 noremap! (muhenkan) noremap! (henkan) silent! noremap! (muhenkan) silent! noremap! (henkan)