シェルスクリプト用ftplugin作ってみた。
Vim7ではMzSchemeが使えるよ | weblog | 東京嫉妬のScheme用プラグインがやたら便利だったので、「:!」コマンド(シェルで実行)用に改造してみました。
「~/.vim/after/ftplugin/sh.vim」等に保存して、
「g:EvalCommmand」に「:let w:EvalCommand = "echo hoge | "」とか入れて、「sed 's/hoge/moge/'」のある行で、
nnoremap <buffer> <C-CR> :call <SID>Eval('n')<CR> "inoremap <buffer> <C-CR> <ESC>:call <SID>Eval('i')<CR>a inoremap <buffer> <C-CR> <ESC>:call <SID>Eval('i')<CR> vnoremap <buffer> <C-CR> :call <SID>EvalVisual()<CR> let g:EvalCommand = "" function! s:Eval(mode) let s:saved_reg = @" if a:mode == 'v' silent normal `<v`> silent normal y let @" = substitute(@", '\\\n', '', 'g') let @" = substitute(@", '\n', ';', 'g') else silent normal yy endif let @" = substitute(@", '[%#!]', '\\\0', 'g') execute '!' . g:EvalCommand . @" let @" = s:saved_reg endfunction function! s:EvalVisual() range call s:Eval('v') endfunction
perl等のスクリプトに
- 2007-03-18
- クオート処理を追加。クオートすべき文字はまだまだありそう。
- 2007-03-10
- 複数行の処理を修正。行末尾のバックスラッシュを取り除いて、改行をセミコロンにしてシェルに渡す仕様にしました。