スパム対策として書込み時にID/PWを要求されますが、ローマ字で ほげ/ホゲ で書き込めるようになります。

Gauche用の便利な設定

メッセージ

書籍「Gaucheプログラミング」に書いてあるEmacs用設定をまねて、 Vimウィンドウ内でgoshインタープリタを起動して対話的に操作できるようにしました。
その他便利かもしれない雑多な設定が書いてあります。

要件

  • vimsh.vimがインストールされていること。
  • よって +python が有効になっていること。

http://www.vim.org/scripts/script.php?script_id=165

機能

  • <C-c>sでウィンドウを分割し、goshを起動します。
  • インサートモードで<C-x><C-e>を押すと、カーソル位置より前にあるカッコを評価します。
  • ノーマルモードで<CR><CR>を押すと、カーソル位置を囲むカッコを評価します。
  • ノーマルモードでKを押すと、カーソル位置にある識別子のドキュメントを引きます。
  • #tと#fに違う色をつけて区別しやすくします。(色は自分で設定してください)
  • <F3>で1行インデント。カーソルが下に移動するため、連続して押せます。
  • C-pなどの補完で(use)や(load)しているファイルの中も探しにいきます。
  • テキストオブジェクトa)のショートカットsを定義しています。
  • goshのプロンプトでヒストリー機能もどきとしてC-pを使えるように。

など。

"-----------------------------------------------------------------------------
"   コンフィギュレーション(環境に応じて変更のこと)
"-----------------------------------------------------------------------------
let g:vimsh_script_path = "macros/vimsh.vim"
let g:scheme_gauche_lib = "/usr/local/share/gauche/0.8.13/lib/"

"-----------------------------------------------------------------------------
"   Scheme 用設定
"-----------------------------------------------------------------------------

augroup Scheme_Autocmd
  au!
  au FileType vim_shell inoremap <buffer> <C-p> <C-x><C-l>
  au Syntax scheme syn match  MySchemeFalse /#f/ | hi MySchemeFalse ctermfg=2
augroup END

nnoremap <silent> <C-c>s :sil! call FtOpenVimsh(&ft)<CR>
nnoremap <silent> <buffer> <F5> :!gosh < %<CR>
nnoremap <buffer> <F3> ==j
nnoremap <buffer> <CR><CR> :<C-u>call Scheme_EvalExpr()<CR><Esc>l
inoremap <buffer> <C-x><C-e> x<Esc>mz:call search(')','bc')<CR>:call Scheme_EvalExpr()<CR><Esc>`zs
nnoremap <buffer> K :<C-u>!gosh -u gauche.interactive -E "info '"'<cword>' -E exit<CR>
nnoremap <buffer> vs va)
onoremap <buffer> s a)
" use, load しているファイルを補完対象に含める。gf などにも関係。
setlocal suffixesadd=.scm
setlocal include=(use\ \\\|(load\
setlocal includeexpr=substitute(substitute(v:fname,'\\./','','g'),'\\.','/','g')
let &l:path .= g:scheme_gauche_lib

function! Scheme_EvalExpr()
  let pos_save     = getpos(".")
  let reg_save     = getreg("z")
  let regtype_save = getregtype("z")
  normal! "zya)

  if !bufexists("_scheme_")
    call FtOpenVimsh("scheme")
  endif

  call VimshExecCmd("scheme", @z)
  call setreg("z", reg_save, regtype_save)
  call setpos(".", pos_save)
endfunction

"-----------------------------------------------------------------------------
"   補助関数
"-----------------------------------------------------------------------------
" 指定した名前を持つバッファが既に存在するならそこにカーソルを移動。
" 存在しないなら作成。
function! SingletonBuffer(name, split)
  " 文字をエスケープ :h file-pattern
  let name=escape(a:name, '[]*?,\')
  if bufexists(a:name) " bufexists にはエスケープ必要ない
    let bufnr = bufnr(name)
    let winlist = FindWindowsByBufnr(bufnr)
    if empty(winlist)
      if a:split
        split
      endif
      exe "b " . bufnr
    else
      exe winlist[0] . "wincmd w"
    endif
  else
    if a:split
      exe "sil new " . escape(name, ' ')
    else
      exe "sil e " . escape(name, ' ')
    endif
  endif
endfunction

" 指定したバッファを含んでいるウィンドウ番号のリストを返す。
function! FindWindowsByBufnr(bufnr)
  return filter(range(1, winnr("$")), 'winbufnr(v:val)==' . a:bufnr)
endfunction

"-----------------------------------------------------------------------------
"   VimShell
"-----------------------------------------------------------------------------
let g:vimshdic = {
      \ "ruby": ["ruby", "irb"],
      \ "scheme": ["scheme", "PAGER=cat gosh -i"]
      \ }

function! FtOpenVimsh(ft)
  let a = g:vimshdic[a:ft]
  call OpenVimsh(a[0], a[1])
endfunction

function! OpenVimsh(bufname, cmd)
  if exists("g:vimsh_split_open")
    let sp_save = g:vimsh_split_open
  endif
  let g:vimsh_split_open = 0

  new
  if !exists("g:vimsh_loaded_python_file")
    exe "runtime " . g:vimsh_script_path
  endif
  exe "VimShNewBuf " . a:bufname
  call VimshExecCmd(a:bufname, a:cmd)

  if exists("sp_save")
    let g:vimsh_split_open = sp_save
  endif
endfunction

function! VimshExecCmd(bufname, cmd)
  let oldwinnr = winnr()
  call SingletonBuffer("_".a:bufname."_", 1)
  let g:cmd = 'python lookup_buf("_' . a:bufname . '_").execute_cmd([vim.eval("a:cmd")])'
  exe g:cmd
  let g:cmd = a:cmd
  exe oldwinnr . "wincmd w"
endfunction

ctags で tags を作れるようにする

以下を ~/.ctags (Windows なら ctags.cnf)に書いておきます。
http://sites.google.com/site/khorser/opensource/scheme より)

--langmap=scheme:
--langdef=scm
--langmap=scm:.ss.scm
--regex-scm=/^[[:space:]]*(\(|[[])define[^[:space:]]*[[:space:]]+(\(|[[])?([^][[:space:]()]+)/\3/d,definition/i

関連リンク

scripts/19
vimsh : Vimの中でシェルを起動する

Gauche の環境を整える為、rlwrap と vim で利用する辞書と、vim で利用する syntax ファイルを生成する
http://d.hatena.ne.jp/cooldaemon/20080523/1211533480

gauref.vim - Gaucheのリファレンスマニュアルを引くプラグイン
http://vim.g.hatena.ne.jp/keyword/gauref%2evim

vimのgaucheの出力をウィンドウ分割して表示
http://study.aruko.net/2008/04/18/32/





トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-10-14 (火) 01:13:17 (1465d)