Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^2: How do I create a simple, perl-based text filter for Vim

by dimar (Curate)
on Feb 14, 2005 at 01:15 UTC ( #430662=note: print w/replies, xml ) Need Help??


in reply to Re: How do I create a simple, perl-based text filter for Vim
in thread How do I create a simple, perl-based text filter for Vim

mr_mischief,

Thanks for your reply, which confirms a nagging suspicion: (this is really a problem with Windows and STDIN, not perl or Vim).

You have to provide a range either at the colon prompt, by visual selection, or by motion selection.

Understood, the method used to provide the range (visual selection in the instant case) was intentionally edited out of the original post for simplicity sake. Moreover, that does not seem to be at issue since the 'sort' (binary) variant worked as expected, while the 'myfilter.pl' variant did not work (all other things held constant) ceteris paribus. If the range were not properly specified, both variants should have failed.

your node mentions Windows, and I don't have any form of vi on any of my Windows machines at the moment.

Windows appears to be the culprit here. There were some problems on Linux but those were traced to script permissions. Moreover, none of the other suggestions in this thread (so far) have worked on Windows ... all produce blank output where the stuff from STDIN should be ... the test tags appear, but not the 'filtered' text.

  • Comment on Re^2: How do I create a simple, perl-based text filter for Vim

Replies are listed 'Best First'.
Re^3: How do I create a simple, perl-based text filter for Vim
by mr_mischief (Monsignor) on Feb 14, 2005 at 01:51 UTC
    I'm not sure if it would be a Windows issue or a porting issue of vim, and I'd be interested to know if any of these suggestions work:

    • as someone already mentioned, try using just <> instead of <STDIN>, which may work better with the C library on Windows, although I'm not sure why it would
    • Try using read() in a loop instead of the bracket operator.
    • Try playing with buffering. It shouldn't make a difference, of course, since you're getting both what's before the text and after it in the same print(). I'd consider it an unknown here, just because the results seem so bizarre.
    • Try some simple debugging on the program, even though the source is working. Make sure your perl gets the variable filled when the script is run from the command line. You've probably already done this, but I can see how it'd be overlooked for such a simple project.

    If all else fails, remember that from within vim you can edit a second file, save it, etc. You could yank the needed text, ':new temp' to edit another file, put (paste) the text there, ':w' to write the file, ':!./filter temp' to change the temp file on disk, yank the changed version from that window, quit the new window, reselect the portion in the original file, and paste the buffer over the original section. Since vim has a macro recording function, I'd record parts of that mess as macros. That may be part of what you're trying to avoid, too, though. In any case, it's probably more of a pain than you want.



    Christopher E. Stith
Re^3: How do I create a simple, perl-based text filter for Vim
by bmann (Priest) on Feb 14, 2005 at 02:20 UTC
    (this is really a problem with Windows and STDIN, not perl or Vim)

    That was my first thought too. Perl scripts often have difficulty with pipes on Windows.

    Have you tried wrapping the script you want to use as a filter with pl2bat? A quick test here works with Vim 6.3 on Win2K.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://430662]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (3)
As of 2023-02-05 08:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I prefer not to run the latest version of Perl because:







    Results (31 votes). Check out past polls.

    Notices?