Haskellç¨vimãã¡ã¤ã«
Haskell用vimファイルあれこれãããã£ã¦ãã¦ä½¿ã£ã¦ãããã¡ã«ï¼
Vimã«é¦´æã¿ããªã人ã®ããã®ææã説æï¼
æ¿å
¥ã¢ã¼ãä¸ã«ï¼
- Ctrl-F åå¾ãè¦ã¦åã¤ã³ãã³ã
- Ctrl-T ã¤ã³ãã³ãã1段深ã
- Ctrl-D ã¤ã³ãã³ãã1æ®µæµ ã
Haskellã«é¦´æã¿ããªã人ã®ããã®ææã説æï¼
Haskellã¯ææ³ã«ã¤ã³ãã³ããããã¯ãæ¡ç¨ãã¦ãã¾ãï¼
ã¤ã³ãã³ãã®æ·±ããåãè¡ãã¨ã«ã¾ã¨ã¾ãã¨ã¿ãªãã®ã§ããï¼
ãã¨ãã°ï¼
where c n r = product [n-r+1 .. n] `div` fact r fact n = product [1 .. n]
ã®ãããªä½ç½®æããè¦æ±ãããããï¼åºå®å¹ ã®ã¤ã³ãã³ãå¢æ¸ã ãã§ã¯å¯¾å¿ãã«ãããã¨ã«ãªãã¾ãï¼
ããããæ°ã¶æï¼æªã ã«vim scriptãè¯ãåãã£ã¦ããªãã®ã§ããï¼ã¨ããããèªåã§ä½¿ã£ã¦ãã¦ãããªãã«ä¾¿å©ã ã¨æãã®ã§å
¬éãã¾ãï¼
ãªã³ã¯å
ã® indent/haskell.vim ããªãã¨ãããã使ããªãã®ã§ï¼æ³¨æï¼
setlocal expandtab setlocal noignorecase setlocal suffixesadd=.hs setlocal cpoptions+=M setlocal shiftwidth=1 "iabbrev case case of<Left><Left><Left> "iabbrev W where "iabbrev M module "iabbrev In instance "iabbrev Im import "compiler ghc "inoremap <C-T> _<BS><ESC>:call <SID>Indent()<CR>i inoremap <C-T> _<ESC>:call <SID>Indent()<CR>a<BS> inoremap <C-D> _<ESC>:call <SID>Unindent()<CR>a<BS> function! s:Indent() let pos = getpos('.') let lnum = pos[1] let cnum = pos[2] if lnum == 1 return endif let line = getline('.') " if line =~ '^\s*$' | execute 'normal a ' | endif normal ^kW let indent_pos = getpos('.') if indent_pos[1] == lnum - 1 normal j else call cursor(lnum, 0) normal ^ let indent_pos = getpos('.') let indent_pos[2] += g:haskell_indent_other " call cursor(lnum - 1, 0) " normal ^ " let indent_pos = getpos('.') endif " s/^\s*/\=repeat(' ', line =~ '^\s*$' ? indent_pos[2] : indent_pos[2] - 1)/ s/^\s*/\=repeat(' ', indent_pos[2] - 1)/ let new_line = getline('.') call cursor(lnum, cnum + len(new_line) - len(line)) endfunction function! s:Unindent() let pos = getpos('.') let lnum = pos[1] let cnum = pos[2] if lnum == 1 return endif let line = getline('.') " if line =~ '^\s*$' | execute 'normal a ' | endif normal ^ let cnum2 = getpos('.')[2] if cnum2 == 1 call cursor(lnum, cnum) return endif normal B let indent_pos = getpos('.') while indent_pos[2] >= cnum2 normal B let indent_pos = getpos('.') endwhile call cursor(lnum, 0) " s/^\s*/\=repeat(' ', line =~ '^\s*$' ? indent_pos[2] : indent_pos[2] - 1)/ s/^\s*/\=repeat(' ', indent_pos[2] - 1)/ let new_line = getline('.') call cursor(lnum, cnum + len(new_line) - len(line)) endfunction
主ãªæ¹å¤ç®æ
ã§ï¼é©åã«ã¤ã³ãã³ããæ¸ããããã«ï¼ - ããã«ä¼´ãï¼
ã¯å³ç«¯ããæ»ããããã«å³ã¸è¡ãããã«ï¼ - shiftwidthã1ã«ãã¦ï¼<,>ã§ã¤ã³ãã³ãã®æ·±ãã調æ´ããããããï¼
- è¡ã空è¡ã®ã¨ãã«ï¼èªåã®ç°å¢ã§ã¯ï¼ï¼ãã°ãããã£ãã®ã§ï¼ãããªããªãããä¿®æ£ï¼
- ã§ãï¼ã¤ã³ãã³ãã®éä¸ã«ã«ã¼ã½ã«ãããã¨ãã®æåã¯ãããããªãã¾ãï¼ããã¯ä½¿ããªãããã©ï¼
ããã³ããªã©ããã°ãé¡ããã¾ãï¼