Luc Hermitte (talk | contribs) (Now my comments) |
(Changed category) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{TipImported |
||
− | {{review}} |
||
− | {{Tip |
||
|id=650 |
|id=650 |
||
+ | |previous=649 |
||
− | |title=abbreviation that prompts whether to expand it or not |
||
+ | |next=651 |
||
− | |created=February 4, 2004 |
+ | |created=February 4, 2004 |
|complexity=basic |
|complexity=basic |
||
|author=Yakov Lerner |
|author=Yakov Lerner |
||
|version=6.0 |
|version=6.0 |
||
|rating=5/5 |
|rating=5/5 |
||
+ | |category1=Abbreviations |
||
− | |text= |
||
+ | |category2=Map |
||
⚫ | |||
− | |||
− | Here is how to define it: |
||
⚫ | |||
⚫ | |||
− | if answer==2 |
||
− | exec "normal! a".a:abbr |
||
− | else |
||
− | exec "normal! a".a:expansion |
||
− | endif |
||
⚫ | |||
− | |||
− | imap ABC <esc>:call AskExpand("ABC","...expansion for ABC ...")<cr>a |
||
− | imap XYZ <esc>:call AskExpand("XYZ","...expansion for XYZ ...")<cr>a |
||
}} |
}} |
||
⚫ | |||
+ | <pre> |
||
⚫ | |||
⚫ | |||
− | |||
⚫ | |||
− | It would be great if you could have the default prompt Yes or No for each abbreviation. |
||
⚫ | |||
− | It could be added as a parameter to the AskExpand. |
||
⚫ | |||
− | |||
⚫ | |||
− | eg. |
||
− | "defprompt: 2 => Yes, 1=> NO |
||
− | function! MyAskExpand(abbr,expansion,defprompt) |
||
− | if a:defprompt==2 |
||
− | let answer=confirm("Expand '".a:abbr."' [y] ", "&Yes\n&No") |
||
− | if answer==2 |
||
− | exec "normal! a".a:abbr |
||
− | else |
||
− | exec "normal! a".a:expansion |
||
− | endif |
||
− | else |
||
− | let answer=confirm("Expand '".a:abbr."' [n] ", "&No\n&Yes") |
||
− | if answer==1 |
||
− | exec "normal! a".a:abbr |
||
− | else |
||
− | exec "normal! a".a:expansion |
||
− | endif |
||
− | endif |
||
− | endfunction |
||
− | |||
− | "imap XYZ <esc>:call myAskExpand("XYZ","...expansion for XYZ ...")<cr>a |
||
− | imap abc <esc>:call MyAskExpand("abc",'buginf("\n:KV:%s ",__FUNCTION__ );',2)<cr>a "default is YES |
||
− | imap xyz <esc>:call MyAskExpand("xyz",'/* VITTAL_DEBUG */',1)<cr>a "default is NO. |
||
− | |||
− | vittal at cisco dot com |
||
− | , May 10, 2006 5:20 |
||
− | :This function does not need to be that complex: <tt>confirm()</tt> takes a third argument for the default choice. See my next comment. |
||
− | :--[[User:Luc Hermitte|Luc Hermitte]] 14:42, 20 July 2007 (UTC) |
||
− | ---- |
||
− | We can use <tt>:iab</tt> with no problem. The syntax is just slightly different. i.e: |
||
− | function! s:Ask(abbr,expansion,defprompt) |
||
− | let answer=confirm("Expand '".a:abbr."'?", "&Yes\n&No", a:defprompt) |
||
⚫ | |||
⚫ | |||
− | endfunction |
||
− | |||
⚫ | |||
⚫ | |||
− | NB: this is the kind of technique I propose in {{script|id=50|text=a vim library}}, and that by extension , I use in my {{script|id=336|text=C&C++ ftplugin suite}} -- except none of the abbreviations ask question, they are context sensitive. |
||
+ | </pre> |
||
+ | ==References== |
||
− | --[[User:Luc Hermitte|Luc Hermitte]] 14:42, 20 July 2007 (UTC) |
||
+ | *{{help|:iabbrev}} |
||
− | ---- |
||
+ | *{{help|:map-expression}} |
||
− | <!-- parsed by vimtips.py in 0.537500 seconds--> |
||
⚫ | |||
− | [[Category:Automated_Text_Insertion]] |
Revision as of 00:58, 29 November 2009
Tip 650 Printable Monobook Previous Next
created February 4, 2004 · complexity basic · author Yakov Lerner · version 6.0
You can define an abbreviation in such a way that it will ask whether to expand it or not. The trick is to define it as an expression, then have that expression ask for confirmation:
function! s:Ask(abbr,expansion,defprompt) let answer = confirm("Expand '" . a:abbr . "'?", "&Yes\n&No", a:defprompt) " testing against 1 and not 2, I correctly take care of <abort> return answer == 1 ? a:expansion : a:abbr endfunction iabbrev <expr> for <SID>Ask('for', "for () {\n}", 1)