- 1 名前:名無しさん@お腹いっぱい。 [01/12/17 12:15]
- みんなでスクリプトを覚えよう
- 372 名前:MiMi@Vim%Chalice ◆fI1wYbzaMQ mailto:sage [03/05/18 00:20]
- 違うアプローチで作ってみました.
挿入モードで演算子を入力するとスペースを挿入します. # コマンドモードに戻る必要はありません. ●注意事項 プログラミング言語の仕様に+と++のような同じ文字を使った 二種類の演算子がある場合は両方をmapして下さい. 第2引数でスペースを入れるかどうかを指定します. これにより,++の時はスペースを入れない,==の時はスペースを入れる といった使い分けが出来ます. スペースを入れない仕様は意味が無さそうですが,+をmapして++をmapしないと, ++が入力できなくなってしまうので仕方なくこういう仕様にしました. ●1点だけごめんなさい項目があります. 行頭ではmapした記号を入力できません. ただし,一般的にはインデントを入れるので気にならないでしょう. " 両側にスペースを入れたい演算子をmappingする inoremap <buffer> <silent> + <Esc>:call InsertSpaceOnBothSides('+', 1)<CR>a inoremap <buffer> <silent> - <Esc>:call InsertSpaceOnBothSides('-', 1)<CR>a inoremap <buffer> <silent> * <Esc>:call InsertSpaceOnBothSides('*', 1)<CR>a inoremap <buffer> <silent> / <Esc>:call InsertSpaceOnBothSides('/', 1)<CR>a inoremap <buffer> <silent> % <Esc>:call InsertSpaceOnBothSides('%', 1)<CR>a inoremap <buffer> <silent> = <Esc>:call InsertSpaceOnBothSides('=', 1)<CR>a inoremap <buffer> <silent> ++ <Esc>:call InsertSpaceOnBothSides('++', 0)<CR>a inoremap <buffer> <silent> -- <Esc>:call InsertSpaceOnBothSides('--', 0)<CR>a inoremap <buffer> <silent> == <Esc>:call InsertSpaceOnBothSides('==', 1)<CR>a
- 373 名前:MiMi@Vim%Chalice ◆fI1wYbzaMQ mailto:sage [03/05/18 00:20]
- " 演算子の両側にスペースを入れる
function! InsertSpaceOnBothSides(operator, isspace) let pre_str = strpart(getline("."), 0, col(".")) " 行の前半 let post_str = strpart(getline("."), col(".")) " 行の後半 if a:isspace == 1 if strpart(pre_str, strlen(pre_str)-1, 1) != ' ' let pre_str = pre_str . ' ' " 前半最後にスペース挿入 endif if strpart(post_str, 0, 1) != ' ' let post_str = ' ' . post_str " 後半最初にスペース挿入 endif endif " 前半と後半の間に演算子を挿入 call setline(".", pre_str . a:operator . post_str) " 次の挿入位置へ移動 if post_str == matchstr(post_str, '\s*$', 0) " 演算子挿入位置が行末の時 let motion_cmd = 'normal $' " 行末へ else let motion_cmd = 'normal 2wh' " 演算子を飛ばして次の単語の1文字前へ endif execute motion_cmd endfunction
|

|