I would like to be able to save and restore mappings programmatically. In
order to do so, however, I need to be able to determine the exact lhs and
rhs used to create the mapping. I had assumed the lhs/rhs members of the
dictionary returned by maparg() would provided this information, but as the
simple example below illustrates, it does not. The problem is that both the
4 character mapping...
"<F7>"
...and the single character function key mapping produce the same output
for maparg()['lhs'] and `nmap <buffer>'. (The nmap output does at least
colorize the function key, but the text output is identical.) The 'rhs'
member seems to be treated slightly differently, but still inconsistently:
in particular, for the maps created under default 'cpo', 'rhs' looks
correct, but for <F9> (created with '<' in 'cpo'), it looks wrong. I
suspect what's happening is that 'rhs' is always reporting exactly what was
typed, but since in the general case I have no way of knowing what 'cpo'
was in effect when the map was created, this isn't very helpful.

Is there a programmatic way to determine lhs and rhs in some sort of
canonical form? Also helpful would be if hasmapto() (or something like it)
told you exactly which lhs was mapped to the specified rhs. (I realize
there could be more than one, since hasmapto() doesn't require an exact
match, but there's a similar situation with mapcheck(), and it just picks
one mapping to return, which can be useful in certain use cases.) More
generally, it seems there should be some way to determine a list of lhs
from a given rhs...

-- Test commands --
set cpo&
nmap <buffer> <F7> <F7>
nmap <buffer> <lt>F8> <lt>F8>
set cpo+=<
nmap <buffer> <F9> <F9>
set cpo&

-- Output of nmap and maparg --
nmap <buffer>
n  <F9>         @<F9>
n  <F8>         @<F8>
n  <F7>         @<F7>

echo maparg('<F7>', 'n', 0, 1)
{'silent': 0, 'noremap': 0, 'lhs': '<F7>', 'mode': 'n', 'nowait': 0,
'expr': 0, 'sid': 66, 'rhs': '<F7>', 'buffer': 1}
echo maparg('<lt>F8>', 'n', 0, 1)
{'silent': 0, 'noremap': 0, 'lhs': '<F8>', 'mode': 'n', 'nowait': 0,
'expr': 0, 'sid': 66, 'rhs': '<lt>F8>', 'buffer': 1}
echo maparg('<lt>F9>', 'n', 0, 1)
{'silent': 0, 'noremap': 0, 'lhs': '<F9>', 'mode': 'n', 'nowait': 0,
'expr': 0, 'sid': 66, 'rhs': '<F9>', 'buffer': 1}

Thanks,
Brett Stahlman

-- 
-- 
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

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to