Loading ...
Sorry, an error occurred while loading the content.

Re: What key is bound to Something?

Expand Messages
  • Jakson A. Aquino
    On Sat, Jul 31, 2010 at 2:32 AM, Tony Mechelynck ... Thanks! I ended up with this (which solves the problem to me): nmap RStart redir = b:kblist
    Message 1 of 4 , Jul 31, 2010
    • 0 Attachment
      On Sat, Jul 31, 2010 at 2:32 AM, Tony Mechelynck
      <antoine.mechelynck@...> wrote:
      > On 31/07/10 02:32, Jakson A. Aquino wrote:
      >>
      >> On Fri, Jul 30, 2010 at 8:37 PM, Tony Mechelynck
      >> <antoine.mechelynck@...>  wrote:
      >>>
      >>> On 31/07/10 00:12, Jakson A. Aquino wrote:
      >>>>
      >>>> Hi,
      >>>>
      >>>> I maintain a filetype plugin to R and the user can change the default
      >>>> key bindings by putting in the vimrc commands like:
      >>>>
      >>>> map<F2>    <Plug>RStart
      >>>>
      >>>> How can I know in the ftplugin/r.vim what key is bound to
      >>>> <Plug>RStart? The plugin adds a menu to gui versions of Vim and I
      >>>> would like to tell in the menu all the key bindings, even the
      >>>> customized ones.
      >>>>
      >>>> Thanks,
      >>>>
      >>>> Jakson Aquino
      >>>>
      >>>> Note: the plugin is here:
      >>>> http://www.vim.org/scripts/script.php?script_id=2628
      >>>>
      >>>
      >>> It is possible to get a list of all mappings i.e. all user-defined key
      >>> bindings, see the thread "Writing :map and :map! to text file or
      >>> something"
      >>> started 2010-07-26 09:42 -0700 by someone named "Gary".
      >>>
      >>> For default bindings it's harder: you would have to compile a list from
      >>> the
      >>> various lists at ":help index.txt", write that statically that into your
      >>> script (and update it whenever that helpfile changes), and, at runtime,
      >>> *remove* from the list the keybindings which also have a user-defined
      >>> mapping in the same mode.
      >>
      >> Thanks for answering! This was rather a wish than an important thing
      >> to my plugin. I think it's overly complex to write the output of :map
      >> to a file and then search the file for all<Plug>Something that my
      >> plugin has just to know if there are a few custom key bindings. The
      >> goal was to help users of GVim to remember the key binds by looking at
      >> the menu, but I will assume that users who customize key bindings are
      >> advanced enough to either remember them or do ':map' if any was
      >> forgotten. i have already put in the plugin's documentation:
      >>
      >>    Custom key bindings are not shown in Vim's menu, but you can
      >>    type :map to see the list of current mappings.
      >>
      >> Best regards,
      >>
      >> Jakson Aquino
      >>
      >
      > You can easily know _if_ there is a map to <Plug>something:
      >
      >    if hasmapto("\<Plug>",'nvoilc') || hasmapto("\<Plug>",'nvoilc',1)
      >        echo 'there is a mapping or abbrev to ''<Plug>something'''
      >    endif
      >
      > see :help hasmapto()
      >
      > Similarly, to know if some particular {lhs} (let's say <F2> has ben used,
      >
      >        :map <F2>
      > and/or
      >        :map! <F2>
      >
      > will show you any mappings beginning with <F2>; you can capture the output
      > even if using :silent, see :help :redir

      Thanks! I ended up with this (which solves the problem to me):

      nmap <F2> <Plug>RStart

      redir => b:kblist
      silent imap
      silent vmap
      silent nmap
      redir END
      let b:kblist2 = split(b:kblist, "\n")
      unlet b:kblist
      let b:imaplist = []
      let b:vmaplist = []
      let b:nmaplist = []
      for i in b:kblist2
      if i =~ "<Plug>R"
      let si = split(i)
      if len(si) == 3
      if si[0] =~ "v"
      call add(b:vmaplist, si)
      endif
      if si[0] =~ "i"
      call add(b:imaplist, si)
      endif
      if si[0] =~ "n"
      call add(b:nmaplist, si)
      endif
      else
      if len(si) == 2
      call add(b:nmaplist, si)
      endif
      endif
      endif
      endfor
      unlet b:kblist2

      function! RNMapCmd(plug)
      for [el1, el2] in b:nmaplist
      if el2 == a:plug
      return el1
      endif
      endfor
      endfunction

      function! RIMapCmd(plug)
      for [el1, el2, el3] in b:imaplist
      if el3 == a:plug
      return el2
      endif
      endfor
      endfunction

      function! RVMapCmd(plug)
      for [el1, el2, el3] in b:vmaplist
      if el3 == a:plug
      return el2
      endif
      endfor
      endfunction

      " Example of usage:
      echo "The key bounded to <Plug>RStart is " . RNMapCmd("<Plug>RStart")

      Best regards,

      Jakson Aquino

      --
      You received this message from the "vim_use" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php
    Your message has been successfully submitted and would be delivered to recipients shortly.