Wednesday, February 20, 2013

Re: vim script: repeat(\)

On Wednesday, February 20, 2013 1:35:16 PM UTC-6, ping wrote:
> On 02/20/2013 02:30 PM, Ben Fritz wrote:
>
> > On Wednesday, February 20, 2013 1:14:14 PM UTC-6, ping wrote:
>
> >> nn ,gg :call MyGit("new post:")
>
> >>
>
> >>
>
> >>
>
> >> what's the problem?
>
> >>
>
> > nn, or :nnoremap, is a mapping from normal mode. So, all characters on the right-hand side will be executed by Vim as if you typed them from normal mode.
>
> >
>
> > In other words, Vim will enter the command line when it "types" the ':' character, inserts the rest of the line on the command line, and then...does nothing, because there is nothing else in the mapping for it to do.
>
> >
>
> > Follow up your mapping with "<CR>" or "<Enter>" to tell Vim to send the enter key for you.
>
> >
>
> > I.e. you mapping should be:
>
> >
>
> > nn ,gg :call MyGit("new post:")<CR>
>
> >
>
> I just tested, no luck still...
>
>
>
> //code:
>
> function! MyGit(commitmsg)
>
> let commitmsg=a:commitmsg
>
> let GitCmd=":
>
> \!git add -A .;
>
> \!git commit -m " .
>
> \commitmsg . ";" . "
>
> \!git push origin master" .
>
> \repeat("\<left>", 30)
>
> exec GitCmd
>
> endf
>
> command! -nargs=? MyGit :call MyGit(<q-args>)
>
> nn ,gg :call MyGit("new post:")<CR>
>
>
>
> //result:
>
> Error detected while processing function MyGit:
>
> line 8:
>
> E34: No previous command
>
> Press ENTER or type command to continue
>
>
>
> so that repeat thing still confuses me...

You said your problem was that Vim would put a bunch of stuff on your command line but not actually hit enter for you.

Now you are beyond that issue and ran into another problem.

Strings in Vim cannot be split over multiple lines.

Instead of this (which will not work):

let mystring = ":
\ abc
\ def"

You need to do this:

let mystring = ":"
\ ."abc"
\ ."def"

However, looking at what you are trying to do, this STILL will not work. You have at least two other conceptual problems:

1. You cannot string together commands like :!command1 !command2. No Vim command works that way, you need to separate them with |. :! is special though so that even that won't work, because it will just get passed to the shell. You need to do it like :exec "!command1" | exec "!command2".
2. :exec will not leave the cursor somewhere for input. You can't use a function in this way. If you want to use <Left><Left> repeatedly to place the cursor awaiting further input, you will need to have your function RETURN a value instead of executing it, and additionally use an expression map or abbreviation. See :help :map-<expr>

--
--
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@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment