On 09/14/2012 03:19 PM, Tony Mechelynck wrote:
> On 14/09/12 20:38, sc wrote:
>> On Fri, Sep 14, 2012 at 01:14:58PM -0500, sc wrote:
>>> On Fri, Sep 14, 2012 at 01:11:45PM -0500, sc wrote:
>>>> On Fri, Sep 14, 2012 at 12:46:08PM -0500, Tim Chase wrote:
>>>>> On 09/14/12 12:10, Ben Fritz wrote:
>>>>>> On Friday, September 14, 2012 12:06:41 PM UTC-5, sc wrote:
>>>>>>> On Fri, Sep 14, 2012 at 12:14:41PM -0400, ping wrote:
>>>>>>>> assume I have a tar ball containing muliple files and I don't want
>>>>>>>> to uncompress everything in a folder to start my search (since vim
>>>>>>>> can open compressed/tar.ed files on the fly), is there way to
>>>>>>>> search
>>>>>>>> a keyword through all the files in the tarball?
>>>>>>>
>>>>>>> do you have zgrep available? if so you can
>>>>>>> zgrep 'pattern' tar-gz-file | vim -
>>>>>>
>>>>>> I didn't know about zgrep! But how about setting 'grepprg' to use
>>>>>> it rather than grep? Then you can navigate results easier.
>>
>>>>> Does it work for you with gzipped tar files? I know you can use
>>>>> zgrep for plain (non-tar'ed) gzipped files, but when I try it on a
>>>>> gzipped tar file, it only tells me that a binary file matches:
>>
>>>>> ~$ cd tmp
>>>>> ~/tmp$ mkdir d
>>>>> ~/tmp$ cd d
>>>>> ~/tmp/d$ echo alpha > a.txt
>>>>> ~/tmp/d$ echo beta > b.txt
>>>>> ~/tmp/d$ echo delta > d.txt
>>>>> ~/tmp/d$ cd ..
>>>>> ~/tmp$ tar cvfz d.tgz d/
>>>>> d/
>>>>> d/a.txt
>>>>> d/d.txt
>>>>> d/b.txt
>>>>> ~/tmp$ zgrep alpha d.tgz
>>>>> Binary file (standard input) matches
>>
>>>> to be honest I don't know -- I learned about zgrep quite recently and
>>>> have never had occasion to use it -- I only briefly scanned the man
>>>> page before posting -- forgive me, I assumed it would handle tarfiles
>>>> too
>>
>>>> maybe you'd need something like
>>
>>>> tar -xz tar-gz-file | grep 'pattern'
>>
>>> and let me add an O:
>>
>>> tar -xzO tar-gz-file | grep 'pattern'
>>
>>> that should do it
>>
>> no, but
>>
>> tar -zxOf targzfile
>>
>> will send it to stdout, but grep just reports the binary file matches
>>
>> so to use vim and search you could
>>
>> tar -zxOf targzfile | vim -
>>
>> and then search the buffer for your pattern
>>
>> sc
>>
> You would still have all files concatenated, which might be a little
> unwieldy if there are many of them. Maybe untar them to disk (into some
> empty ad-hoc directory if the archive doesn't create a top-level
> directory), then use the :vimgrep command (q.v.)?
>
> mkdir foobar
> tar -zxvC foobar -f rah-rah-blah-604.3.2.en-US.linux-x86_64.tar.gz
> gvim
> :0verbose vimgrep /pattern/ foobar/**
> :cnext
> ...
> (The same works for a .tar.bz2, but with -j instead of -z)
>
> The following mappings may come handy with any quickfix commands:
>
> map <F2> :cnext<CR>
> map <S-F2> :cprev<CR>
> map <F3> :cnfile<CR>
> map <S-F3> :cpfile<CR>
> map <F4> :clast<CR>
> map <S-F4> :cfirst<CR>
>
>
> Best regards,
> Tony.
thanks for all the test and response...
in summary here are all suggested/discussed solutions:
1) use zAPPs:
I guess zless, zgrep , zcat, ...these zAPP can't handle tarball, so if I
have a couple of gz files:
a.gz
b.gz
c.gz
they can all do the work in the fly, or redirect to stdout and a "| vim
- "can hand it over.
2) tar with -O (stdout) option, this works fine
tar -zxOf targzfile | vim -
but the issue is (tony pointed out): it looks all file contents are
concatenated, it's not easy to find out from what file the match happens
3) set grepgrp to zgrep
I'm not sure how to make use of this?
currently I can open .gz, or tar.gz with vim directly already
vim abc.tar.gz
4) untar/unzip into flat files into a folder, then use internal/external
tools to recursively search within the folder.
a) external grep:
grep! -R "pattern" . this prints the matches and also gives a quickfix
windows.
b) internal grep:
vimgrep /pattern/ foobar/**
I'll rate solution 3) the best, so it falls into category 3 of following:
this involves 3 possible solution as I can think of per my limited
knowledge:
1) search everything "on the fly", without download and extract tarball
locally
vim scp://user@server/
or
vim
:Nread scp://user@server/
browse to locate the tarball
open it
search the whole tarball
2) open from vim everything single files in the tar ball that I want to
search in, then use bufdo? still I don't know of a convenient way of
doing this...
vim scp://user@server/
or
vim
:Nread scp://user@server/
browse to locate the tarball
open it
open each files in the tarball (turn them into local buffers)
bufdo ...
3) of course, if I uncompress everything in a folder, that will be
easier -- external recursive grep can do that I think,
this is our current solution after download/extract files to a folder:
a) external grep:
grep! -R "pattern" . this prints the matches and also gives a quickfix
windows.
b) internal grep:
vimgrep /pattern/ foobar/**
anyway:
is it possible to get a solution in 1) or 2), that we can get same work
done for remote tarball file, from within vim? ideally I assume this
should be done in netrw if it is possible...
let me copy dr. chip on this...
--
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
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment