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

Re: vim command to include a file into current file

Expand Messages
  • Marc Weber
    Hi Javier, talk about your use case, not what you want. Replacing include looks to me you want text snippets such as
    Message 1 of 9 , Aug 16, 2013
    • 0 Attachment
      Hi Javier,

      talk about your use case, not what you want.

      Replacing \include looks to me you want text snippets such as
      http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html
      (this page is incomplete).

      > Basically, I would like to have a conceal behaviour for such an order
      > that loads a file as is in that moment so changes in the file included
      > are reflected in the file that includes it.

      SVN (version control system) can do so replacing revision numbers.
      Some editors (or vim plugins?) allow special markers which get replaced.

      Implementing such yourself is easy: On opening file use search( function
      to find START marker, use /END_MARKER<cr> to select everything till
      END_MARKER,
      then use whatever you like to replace it with something else.

      You may still consider thinking about your design, an alternative is to
      have such file layout:

      templates/footer

      mail-with-template-markers.txt: containing:
      \include{footer}

      Then have postprocessing which inserts footer into the mail and saves it
      to
      results/mail-ready.txt

      So it all depends on your true use case which you didn't talk about.

      Marc Weber

      --
      --
      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

      ---
      You received this message because you are subscribed to the Google Groups "vim_use" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • Tim Chase
      ... [snip] ... I think the OP is asking for FoldOpen and FoldClose autocommands (that would provide and replacements to specify the lines
      Message 2 of 9 , Aug 16, 2013
      • 0 Attachment
        On 2013-08-16 10:57, Gary Johnson wrote:
        > On 2013-08-16, Javier Mediavilla Vegas wrote:
        > > Hi all,
        > > Is there any command or any method that allows to include a file
        > > in the current file you are editing?
        > >
        > > By including a file I don't mean to read it with :read and paste
        > > it. I mean something like
        > > \include{file}
        > >
        > > The semantic that I am looking can be (merely an example):
        > > In normal mode, if some include is expanded, it deletes it
        > > contents and replaces the \include statement
        > >
        > > In insert mode, when the cursor is hover the line the include
        > > is written, vim reads the file, and copy its content to the
        > > line the statement was.
        > >
        > > Basically, I would like to have a conceal behaviour for such an
        > > order that loads a file as is in that moment so changes in the
        > > file included are reflected in the file that includes it.
        >
        > Do you mean something like this?
        [snip]
        > If not, it would help to know more about what you are trying to
        > achieve.

        I think the OP is asking for FoldOpen and FoldClose autocommands
        (that would provide <foldstart> and <foldend> replacements to
        specify the lines involved in the fold) in which one could do
        something like (totally from the hip)

        :set fdm=marker
        :autocmd FoldOpen *.tex <foldstart>+1,<foldend>-1d_|<foldstart>r file.txt

        This could be made more complex to pick the filename off the
        fold-marker starting line, so you could have something like

        \include{file1.txt} {{{
        some recent(ish) content
        from file1.txt
        that would be replaced
        with fresh content
        from file1.txt
        every time this fold is opened.
        If the content of the include above
        was changed, then closing and
        reopening the fold would populate
        the content from the new file-name
        }}}

        Unfortunately, I don't believe Vim exposes events when folds are
        opened/closed.

        -tim








        --
        --
        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

        ---
        You received this message because you are subscribed to the Google Groups "vim_use" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      • Javier Mediavilla Vegas
        ... Sorry for not putting an example. ... this is a snippet ... this is the main text include{snippet.txt} So, If I hover the cursor over line 2 of main.txt
        Message 3 of 9 , Aug 17, 2013
        • 0 Attachment
          El viernes, 16 de agosto de 2013 19:15:36 UTC+2, Javier Mediavilla Vegas escribió:
          > Hi all,
          > Is there any command or any method that allows to include a file in the current file you are editing?
          >
          > By including a file I don't mean to read it with :read and paste it. I mean something like
          > \include{file}
          >
          > The semantic that I am looking can be (merely an example):
          > In normal mode, if some include is expanded, it deletes it contents and
          > replaces the \include statement
          >
          > In insert mode, when the cursor is hover the line the include is written, vim
          > reads the file, and copy its content to the line the statement was.
          >
          > Basically, I would like to have a conceal behaviour for such an order that loads a file as is in that moment so changes in the file included are reflected in the file that includes it.
          >
          > Thanks in advance,
          >
          > Regards,
          > Javier.

          Sorry for not putting an example.
          I want to achieve a latex like behaviour. For example:

          ---- snippet.txt ----
          this is a snippet

          ---- main.txt ----
          this is the main text
          \include{snippet.txt}

          So, If I hover the cursor over line 2 of main.txt in insert mode, vim substitutes \include{snippet.txt} by its contents.

          ---- main.txt ----
          this is the main text
          this is a snippet

          If I exit insert mode, the text becomes again as before, with \include. Suppose now I change the file snippet.txt to

          ---- snippet.txt ----
          this is a snippet
          added some new stuff

          Then, with main.txt opened, hover over \include{snippet.txt} to get

          ---- main.txt ----
          this is the main text
          this is a snippet
          added some new stuff

          When I change to normal mode, the file main.txt becomes to the original state, that is

          ---- main.txt ----
          this is the main text
          \include{snippet.txt}

          Cheers,
          Javier

          --
          --
          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

          ---
          You received this message because you are subscribed to the Google Groups "vim_use" group.
          To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
          For more options, visit https://groups.google.com/groups/opt_out.
        • Javier Mediavilla Vegas
          ... I read more carefully tim response, because I didn t get the first time. Folds could be a point buy I prefer that the action to be managed by vim so I
          Message 4 of 9 , Aug 17, 2013
          • 0 Attachment
            El sábado, 17 de agosto de 2013 11:16:05 UTC+2, Javier Mediavilla Vegas escribió:
            > El viernes, 16 de agosto de 2013 19:15:36 UTC+2, Javier Mediavilla Vegas escribió:
            >
            > > Hi all,
            >
            > > Is there any command or any method that allows to include a file in the current file you are editing?
            >
            > >
            >
            > > By including a file I don't mean to read it with :read and paste it. I mean something like
            >
            > > \include{file}
            >
            > >
            >
            > > The semantic that I am looking can be (merely an example):
            >
            > > In normal mode, if some include is expanded, it deletes it contents and
            >
            > > replaces the \include statement
            >
            > >
            >
            > > In insert mode, when the cursor is hover the line the include is written, vim
            >
            > > reads the file, and copy its content to the line the statement was.
            >
            > >
            >
            > > Basically, I would like to have a conceal behaviour for such an order that loads a file as is in that moment so changes in the file included are reflected in the file that includes it.
            >
            > >
            >
            > > Thanks in advance,
            >
            > >
            >
            > > Regards,
            >
            > > Javier.
            >
            >
            >
            > Sorry for not putting an example.
            >
            > I want to achieve a latex like behaviour. For example:
            >
            >
            >
            > ---- snippet.txt ----
            >
            > this is a snippet
            >
            >
            >
            > ---- main.txt ----
            >
            > this is the main text
            >
            > \include{snippet.txt}
            >
            >
            >
            > So, If I hover the cursor over line 2 of main.txt in insert mode, vim substitutes \include{snippet.txt} by its contents.
            >
            >
            >
            > ---- main.txt ----
            >
            > this is the main text
            >
            > this is a snippet
            >
            >
            >
            > If I exit insert mode, the text becomes again as before, with \include. Suppose now I change the file snippet.txt to
            >
            >
            >
            > ---- snippet.txt ----
            >
            > this is a snippet
            >
            > added some new stuff
            >
            >
            >
            > Then, with main.txt opened, hover over \include{snippet.txt} to get
            >
            >
            >
            > ---- main.txt ----
            >
            > this is the main text
            >
            > this is a snippet
            >
            > added some new stuff
            >
            >
            >
            > When I change to normal mode, the file main.txt becomes to the original state, that is
            >
            >
            >
            > ---- main.txt ----
            >
            > this is the main text
            >
            > \include{snippet.txt}
            >
            >
            >
            > Cheers,
            >
            > Javier

            I read more carefully tim response, because I didn't get the first time. Folds could be a point buy I prefer that the action to be managed by vim so I don't have to care about that.

            --
            --
            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

            ---
            You received this message because you are subscribed to the Google Groups "vim_use" group.
            To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
            For more options, visit https://groups.google.com/groups/opt_out.
          • Christian Brabandt
            Hi Javier! ... Wouldn t that rather be annoying? Vim can t really do that and I doubt there exists an plugin that does that for you. There are too many
            Message 5 of 9 , Aug 17, 2013
            • 0 Attachment
              Hi Javier!

              On Sa, 17 Aug 2013, Javier Mediavilla Vegas wrote:

              > Sorry for not putting an example.
              > I want to achieve a latex like behaviour. For example:
              >
              > ---- snippet.txt ----
              > this is a snippet
              >
              > ---- main.txt ----
              > this is the main text
              > \include{snippet.txt}
              >
              > So, If I hover the cursor over line 2 of main.txt in insert mode, vim substitutes \include{snippet.txt} by its contents.
              >
              > ---- main.txt ----
              > this is the main text
              > this is a snippet
              >
              > If I exit insert mode, the text becomes again as before, with \include. Suppose now I change the file snippet.txt to
              >
              > ---- snippet.txt ----
              > this is a snippet
              > added some new stuff
              >
              > Then, with main.txt opened, hover over \include{snippet.txt} to get
              >
              > ---- main.txt ----
              > this is the main text
              > this is a snippet
              > added some new stuff
              >
              > When I change to normal mode, the file main.txt becomes to the original state, that is
              >
              > ---- main.txt ----
              > this is the main text
              > \include{snippet.txt}

              Wouldn't that rather be annoying?

              Vim can't really do that and I doubt there exists an plugin that does
              that for you. There are too many questions with this example, e.g. What
              happens, if you edit that snippet part, while in insert mode? How would
              Vim know, which part belongs to the snippet and which part it should
              keep in the main file?

              regards,
              Christian
              --

              --
              --
              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

              ---
              You received this message because you are subscribed to the Google Groups "vim_use" group.
              To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
              For more options, visit https://groups.google.com/groups/opt_out.
            • Tim Chase
              ... The original post had mentioned refreshing when folds were opened, so I assumed that you requested what you wanted. :-) I m not sure there s an easy way
              Message 6 of 9 , Aug 17, 2013
              • 0 Attachment
                On 2013-08-17 02:18, Javier Mediavilla Vegas wrote:
                > > ---- main.txt ----
                > >
                > > this is the main text
                > >
                > > \include{snippet.txt}
                >
                > I read more carefully tim response, because I didn't get the first
                > time. Folds could be a point buy I prefer that the action to be
                > managed by vim so I don't have to care about that.

                The original post had mentioned refreshing when folds were opened, so
                I assumed that you requested what you wanted. :-)

                I'm not sure there's an easy way for Vim to do this automatically (at
                least not without more overhead/testing than I'd be willing to give
                up). However, one could make a "update all my includes" mapping.

                Also note that you'd need to have markers bracketing both the start
                *and the end* of the included text so that it could be removed and
                replaced with new content. Otherwise, you'd not know where the
                inserted text ended. Thus, I might map something like

                :g/^\\include{.*}/+,/^% end include/-d|?\\include{.*}?|exec 'r
                '.substitute(getline('.'), '\\include{\([^}]*\)}', '\1', '')


                which finds everything from

                \\include{filename.txt}

                through a line starting with

                % end include

                (it looks like you're working in LaTeX, and a quick search suggests
                that this is how you do a single-line comment).

                Thus you could map a single key to update all the inclusions in your
                file.

                -tim


                --
                --
                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

                ---
                You received this message because you are subscribed to the Google Groups "vim_use" group.
                To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
                For more options, visit https://groups.google.com/groups/opt_out.
              • Javier Mediavilla Vegas
                ... Thanks for the help. That is what I wanted and I have learnt up some vim commands. Regards, Javier -- -- You received this message from the vim_use
                Message 7 of 9 , Aug 17, 2013
                • 0 Attachment
                  El sábado, 17 de agosto de 2013 15:00:32 UTC+2, Tim Chase escribió:
                  > On 2013-08-17 02:18, Javier Mediavilla Vegas wrote:
                  >
                  > > > ---- main.txt ----
                  >
                  > > >
                  >
                  > > > this is the main text
                  >
                  > > >
                  >
                  > > > \include{snippet.txt}
                  >
                  > >
                  >
                  > > I read more carefully tim response, because I didn't get the first
                  >
                  > > time. Folds could be a point buy I prefer that the action to be
                  >
                  > > managed by vim so I don't have to care about that.
                  >
                  >
                  >
                  > The original post had mentioned refreshing when folds were opened, so
                  >
                  > I assumed that you requested what you wanted. :-)
                  >
                  >
                  >
                  > I'm not sure there's an easy way for Vim to do this automatically (at
                  >
                  > least not without more overhead/testing than I'd be willing to give
                  >
                  > up). However, one could make a "update all my includes" mapping.
                  >
                  >
                  >
                  > Also note that you'd need to have markers bracketing both the start
                  >
                  > *and the end* of the included text so that it could be removed and
                  >
                  > replaced with new content. Otherwise, you'd not know where the
                  >
                  > inserted text ended. Thus, I might map something like
                  >
                  >
                  >
                  > :g/^\\include{.*}/+,/^% end include/-d|?\\include{.*}?|exec 'r
                  >
                  > '.substitute(getline('.'), '\\include{\([^}]*\)}', '\1', '')
                  >
                  >
                  >
                  >
                  >
                  > which finds everything from
                  >
                  >
                  >
                  > \\include{filename.txt}
                  >
                  >
                  >
                  > through a line starting with
                  >
                  >
                  >
                  > % end include
                  >
                  >
                  >
                  > (it looks like you're working in LaTeX, and a quick search suggests
                  >
                  > that this is how you do a single-line comment).
                  >
                  >
                  >
                  > Thus you could map a single key to update all the inclusions in your
                  >
                  > file.
                  >
                  >
                  >
                  > -tim

                  Thanks for the help. That is what I wanted and I have learnt up some vim commands.

                  Regards,
                  Javier

                  --
                  --
                  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

                  ---
                  You received this message because you are subscribed to the Google Groups "vim_use" group.
                  To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@....
                  For more options, visit https://groups.google.com/groups/opt_out.
                Your message has been successfully submitted and would be delivered to recipients shortly.