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

setline vs call setline

Expand Messages
  • cyboman
    i m writing a small script which uses setline. i m somewhat new to vim scripting. whenever setline was called i would get an error saying that this is not an
    Message 1 of 6 , Jul 1, 2011
    • 0 Attachment
      i'm writing a small script which uses setline. i'm somewhat new to vim
      scripting. whenever setline was called i would get an error saying
      that this is not an editor command. after looking up in the
      documentation for setline, i changed it to call setline and everything
      started working. but i'm confused. when should i use call and when i
      simply just call a function?

      any help is appreciated.

      --
      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
    • thinca
      Use :call. All of lines of vim script are commands. So, can t call a function directly. Use :call command to call a function. -- thinca --
      Message 2 of 6 , Jul 1, 2011
      • 0 Attachment
        Use :call.

        All of lines of vim script are commands.
        So, can't call a function directly.
        Use :call command to call a function.

        --
        thinca <thinca@...>

        --
        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
      • ZyX
        Reply to message «setline vs call setline», sent 21:20:49 01 July 2011, Friday by cyboman: You cannot ever call a function with ... . Functions are
        Message 3 of 6 , Jul 1, 2011
        • 0 Attachment
          Reply to message «setline vs call setline»,
          sent 21:20:49 01 July 2011, Friday
          by cyboman:

          You cannot ever call a function with
          :function()
          . Functions are accessible only from something that forces expression context
          (and :call command is one of these). Commands are not functions, though
          sometimes they have similar names (like `call', `function', `substitute').

          Original message:
          > i'm writing a small script which uses setline. i'm somewhat new to vim
          > scripting. whenever setline was called i would get an error saying
          > that this is not an editor command. after looking up in the
          > documentation for setline, i changed it to call setline and everything
          > started working. but i'm confused. when should i use call and when i
          > simply just call a function?
          >
          > any help is appreciated.
        • Taylor Hedberg
          Vim scripts are composed of ex commands. Functions are expressions, not ex commands, so they can t be used bare in a script; that is, they must be wrapped
          Message 4 of 6 , Jul 1, 2011
          • 0 Attachment
            Vim scripts are composed of ex commands. Functions are expressions, not
            ex commands, so they can't be used "bare" in a script; that is, they
            must be "wrapped" in a proper command.

            Not a valid Vimscript statement:

            foo()

            Valid:

            call foo()

            :call is just an ex command that essentially just invokes the given
            function and ignores its result. This is useful when you just care about
            the side effects of a function but not the value it returns (if any).

            Plenty of other commands can call functions as well, and all are valid
            as statements in a script. The only restriction is that you can't invoke
            a function by itself, without some kind of command that wraps it.
            Another simple example is :echo, which evaluates its argument (which may
            be a function) and prints the result.

            Hopefully that clears things up a little.

            --
            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
          • Tony Mechelynck
            ... In addition to all the replies you already got, there is an additional possibility: if setline(lnum, text) echoerr something went wrong calling setline(
            Message 5 of 6 , Jul 2, 2011
            • 0 Attachment
              On 01/07/11 19:20, cyboman wrote:
              > i'm writing a small script which uses setline. i'm somewhat new to vim
              > scripting. whenever setline was called i would get an error saying
              > that this is not an editor command. after looking up in the
              > documentation for setline, i changed it to call setline and everything
              > started working. but i'm confused. when should i use call and when i
              > simply just call a function?
              >
              > any help is appreciated.
              >

              In addition to all the replies you already got, there is an additional
              possibility:

              if setline(lnum, text)
              echoerr "something went wrong calling setline(" lnum
              \ . ", '" . string(text) . "')"
              endif

              since setline() returns a non-zero value if there was an error.


              Best regards,
              Tony.
              --
              Lackland's Laws:
              (1) Never be first.
              (2) Never be last.
              (3) Never volunteer for anything

              --
              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
            • cyboman
              ... thanks for the help everyone. i think i got it. taylor, your explanation did clear it up. -- You received this message from the vim_use maillist. Do not
              Message 6 of 6 , Jul 2, 2011
              • 0 Attachment
                On Jul 1, 1:38 pm, Taylor Hedberg <tmhedb...@...> wrote:
                > Vim scripts are composed of ex commands. Functions are expressions, not
                > ex commands, so they can't be used "bare" in a script; that is, they
                > must be "wrapped" in a proper command.
                >
                > Not a valid Vimscript statement:
                >
                >     foo()
                >
                > Valid:
                >
                >     call foo()
                >
                > :call is just an ex command that essentially just invokes the given
                > function and ignores its result. This is useful when you just care about
                > the side effects of a function but not the value it returns (if any).
                >
                > Plenty of other commands can call functions as well, and all are valid
                > as statements in a script. The only restriction is that you can't invoke
                > a function by itself, without some kind of command that wraps it.
                > Another simple example is :echo, which evaluates its argument (which may
                > be a function) and prints the result.
                >
                > Hopefully that clears things up a little.

                thanks for the help everyone. i think i got it. taylor, your
                explanation did clear it up.

                --
                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
              Your message has been successfully submitted and would be delivered to recipients shortly.