Loading ...
Sorry, an error occurred while loading the content.

putting visually selected text into a string

Expand Messages
  • Vincent
    I have the following line in my vimrc file map :call RunProgram() In the RunProgram function i have let command = getline( . ) execute
    Message 1 of 9 , Nov 30, 2007
    • 0 Attachment
      I have the following line in my vimrc file

      map <buffer> <F3> :call RunProgram()<CR>

      In the RunProgram function i have

      let command = getline(".")
      execute "!osascript -e 'tell application \"R\" to cmd \"" .command.
      "\"'"

      The osascript stuff allows me on my mac to send R code to an R
      terminal.

      The issue: if I visually select a number of lines and press F3 the
      RunProgram function is run once for each line and I have to press <CR>
      to get every line of code send to R. Very annoying if you are trying
      to send 50 lines :(

      What I would like to do is have the selected lines put into the string
      'command' and have the execute line applied to that string once.
      Problem is i don't know how to do that.

      Any suggestions?

      Thanks,

      Vincent
      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_use" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    • sc
      ... i ll ask the question everyone with answers is wondering: what exactly do you want between what was the selected lines of the buffer as they are passed to
      Message 2 of 9 , Nov 30, 2007
      • 0 Attachment
        On Friday 30 November 2007 23:33, Vincent wrote:
        > I have the following line in my vimrc file
        >
        > map <buffer> <F3> :call RunProgram()<CR>
        >
        > In the RunProgram function i have
        >
        > let command = getline(".")
        > execute "!osascript -e 'tell application \"R\" to cmd \""
        > .command. "\"'"
        >
        > The osascript stuff allows me on my mac to send R code to
        > an R terminal.
        >
        > The issue: if I visually select a number of lines and press
        > F3 the RunProgram function is run once for each line and I
        > have to press <CR> to get every line of code send to R.
        > Very annoying if you are trying to send 50 lines :(
        >
        > What I would like to do is have the selected lines put into
        > the string 'command' and have the execute line applied to
        > that string once. Problem is i don't know how to do that.
        >
        > Any suggestions?

        i'll ask the question everyone with answers is wondering:
        what exactly do you want between what was the selected lines
        of the buffer as they are passed to osascript?

        sc

        > Thanks,
        >
        > Vincent
        >

        --~--~---------~--~----~------------~-------~--~----~
        You received this message from the "vim_use" maillist.
        For more information, visit http://www.vim.org/maillist.php
        -~----------~----~----~----~------~----~------~--~---
      • A.Politz
        ... Use the range mod for functions. func RunProgram() range ... let command = join(getline(a:firstline,a:lastline), n ) .... endfun ... -ap
        Message 3 of 9 , Dec 1, 2007
        • 0 Attachment
          Vincent wrote:

          >I have the following line in my vimrc file
          >
          >map <buffer> <F3> :call RunProgram()<CR>
          >
          >In the RunProgram function i have
          >
          >let command = getline(".")
          >execute "!osascript -e 'tell application \"R\" to cmd \"" .command.
          >"\"'"
          >
          >The osascript stuff allows me on my mac to send R code to an R
          >terminal.
          >
          >The issue: if I visually select a number of lines and press F3 the
          >RunProgram function is run once for each line and I have to press <CR>
          >to get every line of code send to R. Very annoying if you are trying
          >to send 50 lines :(
          >
          >What I would like to do is have the selected lines put into the string
          >'command' and have the execute line applied to that string once.
          >Problem is i don't know how to do that.
          >
          >Any suggestions?
          >
          >Thanks,
          >
          >Vincent
          >>
          >
          >
          Use the range mod for functions.

          func RunProgram() range
          ...
          let command = join(getline(a:firstline,a:lastline),"\n")
          ....
          endfun

          :h a:lastline
          :h function-range-example

          -ap

          --~--~---------~--~----~------------~-------~--~----~
          You received this message from the "vim_use" maillist.
          For more information, visit http://www.vim.org/maillist.php
          -~----------~----~----~----~------~----~------~--~---
        • Vincent
          sc, I might have a buffer with the following 2 lines: x
          Message 4 of 9 , Dec 1, 2007
          • 0 Attachment
            sc,

            I might have a buffer with the following 2 lines:

            x <- rnorm(100)
            plot(x)

            I used A.Politz suggestion (thanks!) and it almost works. The issue is
            that i get an error when i select both lines -- E492: Not an editor
            command: plot(x)"'

            R will accept code segments separated by at ';' but ideally it would
            be a return after each line of R code.

            Best,

            Vincent

            On Nov 30, 11:42 pm, sc <tooth...@...> wrote:
            > On Friday 30 November 2007 23:33, Vincent wrote:
            >
            >
            >
            > > I have the following line in my vimrc file
            >
            > > map <buffer> <F3> :call RunProgram()<CR>
            >
            > > In the RunProgram function i have
            >
            > > let command = getline(".")
            > > execute "!osascript -e 'tell application \"R\" to cmd \""
            > > .command. "\"'"
            >
            > > The osascript stuff allows me on my mac to send R code to
            > > an R terminal.
            >
            > > The issue: if I visually select a number of lines and press
            > > F3 the RunProgram function is run once for each line and I
            > > have to press <CR> to get every line of code send to R.
            > > Very annoying if you are trying to send 50 lines :(
            >
            > > What I would like to do is have the selected lines put into
            > > the string 'command' and have the execute line applied to
            > > that string once. Problem is i don't know how to do that.
            >
            > > Any suggestions?
            >
            > i'll ask the question everyone with answers is wondering:
            > what exactly do you want between what was the selected lines
            > of the buffer as they are passed to osascript?
            >
            > sc
            >
            > > Thanks,
            >
            > > Vincent
            --~--~---------~--~----~------------~-------~--~----~
            You received this message from the "vim_use" maillist.
            For more information, visit http://www.vim.org/maillist.php
            -~----------~----~----~----~------~----~------~--~---
          • Tony Mechelynck
            ... You can yank the selected text into a register, for example y to yank to the default ( quote ) register, or wy to yank it to a named register (here,
            Message 5 of 9 , Dec 1, 2007
            • 0 Attachment
              Vincent wrote:
              > I have the following line in my vimrc file
              >
              > map <buffer> <F3> :call RunProgram()<CR>
              >
              > In the RunProgram function i have
              >
              > let command = getline(".")
              > execute "!osascript -e 'tell application \"R\" to cmd \"" .command.
              > "\"'"
              >
              > The osascript stuff allows me on my mac to send R code to an R
              > terminal.
              >
              > The issue: if I visually select a number of lines and press F3 the
              > RunProgram function is run once for each line and I have to press <CR>
              > to get every line of code send to R. Very annoying if you are trying
              > to send 50 lines :(
              >
              > What I would like to do is have the selected lines put into the string
              > 'command' and have the execute line applied to that string once.
              > Problem is i don't know how to do that.
              >
              > Any suggestions?
              >
              > Thanks,
              >
              > Vincent

              You can yank the selected text into a register, for example

              y

              to yank to the default ("quote") register, or

              "wy

              to yank it to a "named" register (here, register w -- there are 26 such, from
              a to z).

              Then you can move your register to a variable if you want to, or you can even
              use it as a variable (the variable name is @" or @@ for the default register,
              @w for register w, etc.):

              y
              :let command = @@

              or

              "wy
              :let command = @w

              or even

              "cy

              then later use @c as a variable name in any expression.


              Best regards,
              Tony.
              --
              hundred-and-one symptoms of being an internet addict:
              151. You find yourself engaged to someone you've never actually met,
              except through e-mail.

              --~--~---------~--~----~------------~-------~--~----~
              You received this message from the "vim_use" maillist.
              For more information, visit http://www.vim.org/maillist.php
              -~----------~----~----~----~------~----~------~--~---
            • A.Politz
              ... Try to use system() instead of exec and ! . -ap -- Ich hab geträumt, der Krieg wär vorbei. --~--~---------~--~----~------------~-------~--~----~ You
              Message 6 of 9 , Dec 1, 2007
              • 0 Attachment
                Vincent wrote:

                >sc,
                >
                >I might have a buffer with the following 2 lines:
                >
                >x <- rnorm(100)
                >plot(x)
                >
                >I used A.Politz suggestion (thanks!) and it almost works. The issue is
                >that i get an error when i select both lines -- E492: Not an editor
                >command: plot(x)"'
                >
                >R will accept code segments separated by at ';' but ideally it would
                >be a return after each line of R code.
                >
                >Best,
                >
                >Vincent
                >
                >...
                >
                >>>execute "!osascript -e 'tell application \"R\" to cmd \""
                >>>.command. "\"'"
                >>>
                >....
                >
                >

                Try to use system() instead of exec and '!'.

                -ap



                --
                Ich hab geträumt, der Krieg wär vorbei.


                --~--~---------~--~----~------------~-------~--~----~
                You received this message from the "vim_use" maillist.
                For more information, visit http://www.vim.org/maillist.php
                -~----------~----~----~----~------~----~------~--~---
              • Vincent
                Thanks for the suggestions! The following works exactly as i had wanted. function! RunRProgram() range let command =
                Message 7 of 9 , Dec 1, 2007
                • 0 Attachment
                  Thanks for the suggestions!

                  The following works exactly as i had wanted.

                  function! RunRProgram() range
                  let command = join(getline(a:firstline,a:lastline),"\\n")
                  execute "!osascript -e 'tell application \"R\" to cmd
                  \"" .command. "\"'"
                  endfunction

                  ap: I tried using system but can't seem to get that to work.

                  system("osascript -e 'tell application \"R\" to cmd \"" .command.
                  "\"'")


                  Vincent


                  On Dec 1, 4:43 pm, "A.Politz" <poli...@...> wrote:
                  > Vincent wrote:
                  > >sc,
                  >
                  > >I might have a buffer with the following 2 lines:
                  >
                  > >x <- rnorm(100)
                  > >plot(x)
                  >
                  > >I used A.Politz suggestion (thanks!) and it almost works. The issue is
                  > >that i get an error when i select both lines -- E492: Not an editor
                  > >command: plot(x)"'
                  >
                  > >R will accept code segments separated by at ';' but ideally it would
                  > >be a return after each line of R code.
                  >
                  > >Best,
                  >
                  > >Vincent
                  >
                  > >...
                  >
                  > >>>execute "!osascript -e 'tell application \"R\" to cmd \""
                  > >>>.command. "\"'"
                  >
                  > >....
                  >
                  > Try to use system() instead of exec and '!'.
                  >
                  > -ap
                  >
                  > --
                  > Ich hab geträumt, der Krieg wär vorbei.
                  --~--~---------~--~----~------------~-------~--~----~
                  You received this message from the "vim_use" maillist.
                  For more information, visit http://www.vim.org/maillist.php
                  -~----------~----~----~----~------~----~------~--~---
                • Ben Schmidt
                  ... You would need to :call system(...), if you didn t. System is a function so needs to live inside an expression, and the :call command is a nice command
                  Message 8 of 9 , Dec 2, 2007
                  • 0 Attachment
                    > system("osascript -e 'tell application \"R\" to cmd \"" .command.
                    > "\"'")

                    You would need to :call system(...), if you didn't. System is a function so needs
                    to live inside an expression, and the :call command is a nice command that just
                    executes an expression and discards the result (unlike :exe which evaluates the
                    expression then executes the result as a command).

                    But hey, you have already solved your problem, so no need!

                    Ben.





                    Send instant messages to your online friends http://au.messenger.yahoo.com


                    --~--~---------~--~----~------------~-------~--~----~
                    You received this message from the "vim_use" maillist.
                    For more information, visit http://www.vim.org/maillist.php
                    -~----------~----~----~----~------~----~------~--~---
                  • Vincent
                    This is actually even nicer. Thanks for your help Ben! Best, Vincent ... --~--~---------~--~----~------------~-------~--~----~ You received this message from
                    Message 9 of 9 , Dec 2, 2007
                    • 0 Attachment
                      This is actually even nicer. Thanks for your help Ben!

                      Best,

                      Vincent

                      On Dec 2, 4:34 am, Ben Schmidt <mail_ben_schm...@...> wrote:
                      > > system("osascript -e 'tell application \"R\" to cmd \"" .command.
                      > > "\"'")
                      >
                      > You would need to :call system(...), if you didn't. System is a function so needs
                      > to live inside an expression, and the :call command is a nice command that just
                      > executes an expression and discards the result (unlike :exe which evaluates the
                      > expression then executes the result as a command).
                      >
                      > But hey, you have already solved your problem, so no need!
                      >
                      > Ben.
                      >
                      > Send instant messages to your online friendshttp://au.messenger.yahoo.com
                      --~--~---------~--~----~------------~-------~--~----~
                      You received this message from the "vim_use" maillist.
                      For more information, visit http://www.vim.org/maillist.php
                      -~----------~----~----~----~------~----~------~--~---
                    Your message has been successfully submitted and would be delivered to recipients shortly.