On Thu, Jun 01, 2006 at 01:43:48PM +0200, Johannes Schwarz wrote:
> Hello,
> 
> I'm trying to write my first vim-plugin, but I got stucked.
> 
> I managed to execute an external command, which gives me back a list of
> filenames.
> One filename per line.
> 
> For each of the filenames I want to execute another command. 
> I tried it with code:
> 
> let line=getline(".")
> while (strlen(line)!=0)
>   "do sth. here -- construct the external command and so on
>   j
>   let line=getline(".")
> endwhile

     Remember that a vim script (including a plugin) is a list of
commands in Command-Line (Ex) mode, not Normal mode.  So that j means
:j[oin], not "move the cursor down one line."  If you change "j" to "+"
it will be a step in the right direction.

> When I execute the code, it runns into an infinite loop, because the
> lines are joined together with each loop
> 
> file:
> text1.txt
> text2.txt
> text3.txt
> 
> after interrupting the loop the looks like
> text1.txt text2.txt text3.txt

     That's right.

> it seems j is interpreted as a J (join line) here.
> And by the way, I think this is a bad solution anyway. 
> Can someone give me a hint how to do it in a clean way?

     Either

:g/./<any Command-Line mode command here>

or

let linenr = 0
while linenr < line("$")
  let linenr += 1       " The += construction requires vim 7.0 .
  let line = getline(linenr)
  " ...
endwhile

HTH                                     --Benji Fisher

Reply via email to