Re: Multiple commands from Fkey
On 2007-05-14, "John R. Culleton" <[EMAIL PROTECTED]> wrote: > Gary wrote in part: > > nmap :call DoSub() > > function DoSub() > %s/^"/``/e > %s/ "/ ``/ge > %s/"$/''/e > %s/" /'' /ge > endfunction > > For my other F keys I have used noremap instead of nmap, thus: > inoremap :!pdftex book.tex > nnoremap :!pdftex book.tex > inoremap :!texexec book.tex >/dev/null > nnoremap :!texexec book.tex >/dev/null > inoremap :!acroread book.pdf > nnoremap :!acroread book.pdf > nnoremap 1GgqG > > Which is the better usage? I have read but do not understand fully > the "help" item suggested previousely. Without the "nore" part, when the use presses the mapped key, vim executes the rhs of the mapping including executing any mappings it finds on the rhs. For example, if you define the following mapping, nmap D dj to delete the current line and the line below, and some plugin has redefined 'j' with nmap j k then when you type 'D', your macro will delete the current line and the line _above_. Adding "nore" tells vim to ignore any mappings on the rhs and to execute any commands on the rhs with their default actions. Continuing the example above, changing the 'D' mapping to nnoremap D dj will ensure that (as long as D itself is not remapped) typing 'D' will delete the current line and the line below regardless of any mapping of 'd' or 'j'. Including "nore" is then the safer usage since it protects the rhs of the macro from being affected by any mappings of the functions on the rhs. I didn't use 'nnoremap' in the mapping above because I thought there was no possibility of a remapping of anything on the rhs, so that the "nore" would be superfluous, but now I see that the macro would be affected if someone defined ':' as a macro (a really poor choice). Regards, Gary -- Gary Johnson | Agilent Technologies [EMAIL PROTECTED] | Mobile Broadband Division | Spokane, Washington, USA
Re: Multiple commands from Fkey
Gary wrote in part: nmap :call DoSub() function DoSub() %s/^"/``/e %s/ "/ ``/ge %s/"$/''/e %s/" /'' /ge endfunction For my other F keys I have used noremap instead of nmap, thus: inoremap :!pdftex book.tex nnoremap :!pdftex book.tex inoremap :!texexec book.tex >/dev/null nnoremap :!texexec book.tex >/dev/null inoremap :!acroread book.pdf nnoremap :!acroread book.pdf nnoremap 1GgqG Which is the better usage? I have read but do not understand fully the "help" item suggested previousely. I will use the code in two different rc files: one for my own use on a Linux system using gvimrc, and one ( _vimrc) to be used by customers who are presumed to be using evim at leas to start. -- John Culleton Able Indexing and Typesetting Precision typesetting (tm) at reasonable cost. Satisfaction guaranteed. http://wexfordpress.com
Re: Multiple commands from Fkey
On 2007-04-19, "John R. Culleton" <[EMAIL PROTECTED]> wrote: > I want a single F key assignment via user's gvimrc to activate several > commands in order, e.g.: > %s/^"/``/ > %s/ "/ ``/g > %s/"$/''/ > %s/" /'' /g > (The left hand part contains an inch sign and the right hand part > contains either two back ticks or two apostrophes.) I may add more > such commands to the same F key. > > Can I string them all together in a gvimrc command or would it be > handier to have the F key call a script somehow? This will be for a > naive user. (I am pretty naive myself :) You can certainly string them together in a single mapping using as a separator and as a terminator, e.g., nmap :%s/^"/``/ %s/ "/ ``/g %s/"$/''/ %s/" /'' /g However, that mapping will fail as soon as one of the substitutions fails, so a better mapping would include the 'e' flag at the end of each substitution, e.g., nmap :%s/^"/``/e %s/ "/ ``/ge %s/"$/''/e %s/" /'' /ge That mapping will leave the command visible in the command line after the user presses the function key, and if the command is long or the window is narrow, the user will also get the "Press ENTER or type a command to continue" prompt when the command is done. To avoid that, you can add to the mapping, e.g., nmap :%s/^"/``/e %s/ "/ ``/ge %s/"$/''/e %s/" /'' /ge Such a long mapping can be difficult to maintain. One way to make that easier is to put the commands in a function and have the mapping just call that function, e.g., nmap :call DoSub() function DoSub() %s/^"/``/e %s/ "/ ``/ge %s/"$/''/e %s/" /'' /ge endfunction See also :help :bar :help map_bar :help :s_flags :help map- :help user-functions HTH, Gary -- Gary Johnson | Agilent Technologies [EMAIL PROTECTED] | Mobile Broadband Division | Spokane, Washington, USA
Multiple commands from Fkey
I want a single F key assignment via user's gvimrc to activate several commands in order, e.g.: %s/^"/``/ %s/ "/ ``/g %s/"$/''/ %s/" /'' /g (The left hand part contains an inch sign and the right hand part contains either two back ticks or two apostrophes.) I may add more such commands to the same F key. Can I string them all together in a gvimrc command or would it be handier to have the F key call a script somehow? This will be for a naive user. (I am pretty naive myself :) -- John Culleton Able Indexing and Typesetting Precision typesetting (tm) at reasonable cost. Satisfaction guaranteed. http://wexfordpress.com