Thursday, February 22, 2018

Re: making custom key names for mappings

2018-02-23 1:43 GMT+03:00 Renato Fabbri <renato.fabbri@gmail.com>:
> Well, from your comments, i put a:
>
> let g:aall = mapleader
> " let mapleader = '<Space>'
> if exists("g:aa_leader")
> let mapleader = g:aa_leader
> el
> let mapleader = 'anything'
> en
>
>
> before the mappings, and a:
>
> let mapleader = g:aall
>
> after them and it is all ok.
> (only these mappings use the
> temporarily defined leader key.)
>
> I did not understand how SourcePre
> would be used.
> Something like:
> au SourcePre mymappings.vim let [g:fooleader, mapleader] = ['something', mapleader]
>
> in combination with a somewhat SourcePost event to
> set mapleader to fooleader?

No, you set mapleader for *all* scripts, either to default or to
something else. There is no SourcePost for some reason; an alternative
is messing with SourceCmd, but this is harder to do right in general,
but easier to use for specific use cases.

>
> Anyway, I understood that it is not needed to define
> extra <XXX> key names, but is it possible within Vim standard
> capabilities?

What is possible? All XXX in `<XXX>` are defined at compile time only,
you can't evaluate expression inside XXX or something like this.

>
>
> Em quinta-feira, 22 de fevereiro de 2018 18:22:51 UTC-3, ZyX escreveu:
>> 2018-02-22 18:58 GMT+03:00 Renato Fabbri:
>> > leader and localleader are the standard, so one might
>> > have conflicts between scripts because
>> > all of them use leader and localleader.
>> >
>> > how would you define, say
>> > <coolleader>, which you set to the
>> > leader by default,
>> > but can be changed to any key
>> > sequence (including c-v derived).
>> >
>> > ==
>> > ideally, I would have a command mkKeyName with which to define
>> > <coolleader> such as
>> >
>> > :mkKeyName -default=leader coolleader
>> >
>> > and might set it to anything such as
>> > se mapcoolleader=^[
>> > se mapcoolleader=
>> > se mapcoolleader!
>> > se mapcoolleader!=<Space>
>> >
>> > (this implies that one would also able to use
>> > :setlocal mapcoolleader ??
>> >
>> > and use it in your mappings
>> > as in
>> > nnoremap <coolleader>B :call MyCoolFunction()<CR>
>>
>> This is not needed, there is `:execute` as something requiring changes
>> to plugin code. E.g. my plugins (on my frawor framework) allow
>> defining plugin-specific leader.
>>
>> To override `mapleader` for plugins which are not nice enough to allow
>> defining plugin-specific leader there is SourcePre event.
>>
>> I personally find mapleader and maplocalleader as quite *incomplete*
>> thing. For plugins much better idea would be key-value store: e.g. in
>> place of
>>
>> nnoremap <Plug>(FooPluginDoBar) :call foo#bar()<CR>
>> nnoremap <Plug>(FooPluginDoZab) :call foo#zab()<CR>
>>
>> nmap <Leader>fb <Plug>(FooPluginDoBar)
>> nmap <Leader>fz <Plug>(FooPluginDoZab)
>>
>> (last two possibly surrounded by `if !hasmapto(…)|endif`) one would write just
>>
>> mapdefineprefix FooPlugin <Leader>f
>> nnoremap <:FooPlugin:DoBar(b)> :call foo#bar()<CR>
>> nnoremap <:FooPlugin:DoZab(z)> :call foo#zab()<CR>
>>
>> and Vim will handle actually substituting values like this: each
>> `<:prefix:mapname(default)>` expands into a concat of two strings:
>>
>> 1. The rhs of the first `:mapdefineprefix` command with lhs equal to `prefix`.
>> 2. The rhs of the first `:mapdefine` command or the `default` value if
>> no `:mapdefine` commands with lhs equal to `prefix:mapname` were
>> issued. Inside `default` `<>` are good as long as they are balanced,
>> various special characters like `)` may be entered via something like
>> `<Char-41>`.
>>
>> In both cases using bang clears the prefix, so next non-banged command
>> will define it (normally it is ignored).
>>
>> E.g. in this case if user wants mappings of foo plugin start with `,o`
>> and not `<Leader>f` all he needs would be putting
>>
>> mapdefineprefix FooPlugin ,o
>>
>> into the vimrc (requirement: before sourcing actual plugin). If
>> additionally he thinks that `DoZab` command is easier to run with
>> `,oo` he would need
>>
>> mapdefine FooPlugin:DoZab o
>>
>> (requirement is the same).
>>
>> Currently plugins may do this on top of `:execute`, but nobody
>> bothers. I normally want this functionality to e.g. make NERDCommenter
>> mappings all start with `,c` (no, redefining `<Leader>` for all
>> plugins does not sound like a good idea; `SourcePre` is useful, but
>> still feels like a hack) or "undefine" (i.e. prefix with something you
>> would never type, e.g. `<Plug>XXXIWouldNeverTypeThisXXX`) mappings for
>> plugins I install for functionality other then mappings (not everybody
>> is nice enough to have g:NERDCreateDefaultMappings setting).
>>
>> >
>> > thanks again,
>> >
>> >
>> > --
>> > Renato Fabbri
>> > GNU/Linux User #479299
>> > labmacambira.sourceforge.net
>> >
>> > --
>> > --
>> > 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+unsubscribe@googlegroups.com.
>> > For more options, visit https://groups.google.com/d/optout.
>
> --
> --
> 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+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

--
--
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+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: