Wednesday, February 20, 2013

Re: vim script: repeat(\)

On 02/20/2013 03:12 PM, Ben Fritz wrote:
> 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>
>
and, this just works - the only issue is I don't know how to repeat the
<left> here..
and, I really really don't understand how come this works but the
function version doesn't ...
confusing...

nn ,gg :!git add -A .;git commit -m "msg: ";git push origin master"<left>

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