From: "A.J.Mechelynck" <[EMAIL PROTECTED]>
Subject: Re: How to insert text via script/function call ?
Date: Sat, 19 Aug 2006 07:47:11 +0200

> Meino Christian Cramer wrote:
> > From: "A.J.Mechelynck" <[EMAIL PROTECTED]>
> > Subject: Re: How to insert text via script/function call ?
> > Date: Fri, 18 Aug 2006 18:05:13 +0200
> > 
> >> Meino Christian Cramer wrote:
> >>> From: "A.J.Mechelynck" <[EMAIL PROTECTED]>
> >>> Subject: Re: How to insert text via script/function call ?
> >>> Date: Fri, 18 Aug 2006 07:29:05 +0200
> >>>
> >>>> Meino Christian Cramer wrote:
> >>>>> Hi,
> >>>>>
> >>>>>  I often need to place a header above a function defintion (C-source)
> >>>>>  fpr documentational purposes.
> >>>>>
> >>>>>  What I treid is to write a short function for vim, which dioes insert
> >>>>>  the text skeleton -- but I did not find any already existing function
> >>>>>  in the API which does this for me. With :i I got weird effects --
> >>>>>  sure my fault, but... .
> >>>>>
> >>>>>  How can I insert text via a script ?
> >>>>>
> >>>>>  Kind regards,
> >>>>>  mcc
> >>>>>
> >>>>>
> >>>>>  
> >>>>>
> >>>>>
> >>>> If your text is in a file on its own, you can use ":r" with a line 
> >>>> number (the number of the line after which to insert, or 0 for "before 
> >>>> first line", or . for "after cursor line", or $ for "after last line"; 
> >>>> default is after cursor line) in the "range" position, i.e. just before 
> >>>> the r. The file name comes as an argument at the end.
> >>>>
> >>>> Example (after line 5):
> >>>>
> >>>>  5r ~/template.txt
> >>>>
> >>>> If your text is in a register, you can use ":put" with a line number 
> >>>> (again) in the range position and the register name (including ", which 
> >>>> must be escaped as \", for the default register; or + for the system 
> >>>> clipboard) after the ":put".
> >>>>
> >>>> Example (before cursor line):
> >>>>
> >>>>  .-1put \"
> >>>>
> >>>>
> >>>> See
> >>>>  :help :read
> >>>>  :help :put
> >>>>
> >>>>
> >>>> Best regards,
> >>>> Tony.
> >>>>
> >>> Hi Tony,
> >>>
> >>>  thank you for your reply ! :)
> >>>
> >>>  No, sorry...I was simply searching for a function call like
> >>>
> >>>    printf( "This is my text!" )
> >>>
> >>>  but instead of C and printing onto stdout it should be vim-script
> >>>  and the text should go right at the current cursor position.
> >>>
> >>>  Thats all.
> >>>  No registers, no script magic, not extra files. Simply put a string
> >>>  after the cursor into the text.
> >>>
> >>>  Keep hacking!
> >>>  mcc
> >>>
> >>>
> >>>
> >> (Untested):
> >> Characterwise:
> >>    exe "normal aThis is my text!\<Esc>"
> >>
> >> Linewise:
> >>    exe "normal oThis is my text!\<Esc>"
> >>
> >> If I didn't goof, you can paste one of the above lines straight into 
> >> your script (via the clipboard).
> >>
> >>
> >> Best regards,
> >> Tony.
> >>
> > 
> > Hi Tony,
> > 
> >  this works so far...with an unwanted sideeffekt:
> > 
> >  Instead of
> > 
> >              This is my text!
> > 
> >  in my buffer I get
> > 
> >          This is my text!<Esc>
> > 
> >  in my text.
> 
> I get the text properly inserted. Are you sure that you used double 
> quotes around the string and that it ended (before the closing double 
> quote) with backslash, less-than, E-for-Echo, s-for-Sierra, 
> c-for-Charlie, greater-than ? If it didn't, then you didn't use the 
> lines above by copy-paste as I told you. Or else, maybe you have 
> 'compatible' set? (check it by ":verbose set compatible?" without the 
> quotes but with the question mark).
> 
> > 
> >  When using 
> > 
> >          exe "normal aThis is my text!"\<Esc>
> > 
> >  instead, vim says in the commandline:
> > 
> >          E121: Undefined variable: Esc
> >          E15 Invalid expression: "normalaThis is my text"<Esc>
> > 
> >  .
> > 
> >  No way out ?
> > 
> >  Kind regards,
> >  mcc
> > 
> > 
> 
> Try
>       :exe "normal aThis is my text!\e"
> and make sure that you use double quotes, not single quotes.
> 
> see ":help expr-string"
> 
> 
> Best regards,
> Tony.
> 

Hi Tony,

 thanks again your help ! :)

 Yes, I did a mistake (copy'n'waste does not work from Emacs, which
 I use as mailclient using Mew, to the vim, so I had to type it in
 myself) -- I forgot the backslash. With backslash everything works
 fine!

 Have a nice weekend!
 mcc

 

Reply via email to