Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Jumping to matching keywords with % in Vim
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Stefano Zacchiroli <zack@b...>
Subject: [Caml-list] vim - switching between .ml and .mli
On Mon, Nov 17, 2003 at 03:30:30AM -0800, Issac Trotts wrote:
> For those who use Vim and have the matchit.vim plugin installed,
> here are a few lines to put in $HOME/.vim/ftplugin/ocaml.vim :

Thanks! This is what I offer in exchange: support for switching from .ml
to .mli with ",s" and ",S" (the latter split a new window). It requires
vim-python in order to remember the previous position in a file:

    " switching between interfaces (.mli) and implementations (.ml)
  if !exists("g:did_ocaml_switch") && has("python")
    let g:did_ocaml_switch = 1
    map ,s :call OCaml_switch_switch()<CR>
    map ,S :call OCaml_switch_switch_new()<CR>
    fun OCaml_switch_pynit()
      python << EOF
  import vim
  positions = {}
  def ocaml_save_position():
      positions[vim.current.buffer.name] = vim.current.window.cursor
  def ocaml_restore_position():
      try:
          vim.current.window.cursor = positions[vim.current.buffer.name]
      except KeyError:
          pass
  EOF
    endfun
    call OCaml_switch_pynit()
    fun OCaml_switch_switch()
      if (match(bufname(""), "\\.mli$") >= 0)
        python ocaml_save_position()
        exec "edit " . substitute(bufname(""), "\\.mli$", ".ml", "")
        python ocaml_restore_position()
      elseif (match(bufname(""), "\\.ml$") >= 0)
        python ocaml_save_position()
        exec "edit " . bufname("") . "i"
        python ocaml_restore_position()
      endif
    endfun
    fun OCaml_switch_switch_new()  " as above but in a new window
      if (match(bufname(""), "\\.mli$") >= 0)
        python ocaml_save_position()
        exec "new " . substitute(bufname(""), "\\.mli$", ".ml", "")
        python ocaml_restore_position()
      elseif (match(bufname(""), "\\.ml$") >= 0)
        python ocaml_save_position()
        exec "new " . bufname("") . "i"
        python ocaml_restore_position()
      endif
    endfun
  endif

-- 
^Stefano Zacchiroli -- Master in Computer Science @ Uni. Bologna, Italy$
^zack@{cs.unibo.it,debian.org,bononia.it} -- http://www.bononia.it/zack$
^Frequentando il mio maestro mi ero reso conto [.] che la logica poteva$
^servire a molto a condizione di entrarci dentro e poi di uscirne -Adso$

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners