From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10491 invoked by alias); 10 May 2011 14:20:02 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 16013 Received: (qmail 5309 invoked from network); 10 May 2011 14:20:00 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.google.com designates 209.85.220.171 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=zVj5tFPWmtXVa3H4YyfB2ZlmabVJSbV7bf1vjKAyB6E=; b=n3fEdOpYoYV8AOM8/nrqoTQVm19Q8unDykEtoWjmp1x/Kkb5qABSZB610besBYaZIT 8xl7UPAD5GnNOCBp8UPWsrvKDvmRb2RIrzXBTUVOwswOtGba5pQ860Agsx/wVfyXgJSY tVI2MCURaStM4lugVAIz3SP0ZsqChylp08CcY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=JTfy17onjdFjXszeyI1IBI2al9YTrNLTClRnIHEtsOFZAgp7blE9aS/mHG8xjABObS FBtAcpLvSmY/fWDfVokideEZ8jCbZDVlq9RSeM6dW4r3vpWJoui8LZDr6lJ87BC9Fgxd k61MpDWUMwPKFrSJkiL5LCBCjpG1J4AHUdxfY= MIME-Version: 1.0 In-Reply-To: References: Date: Tue, 10 May 2011 16:12:37 +0200 Message-ID: Subject: Re: Substituting grep (and other) output to open files in Vim From: Mikael Magnusson To: Richard Hartmann Cc: zsh-users@zsh.org Content-Type: text/plain; charset=UTF-8 On 10 May 2011 15:46, Richard Hartmann wrote: > Hi all, > > I would like to be able to do the following, but I am stuck. Every > pair of lines is what I would execute and what it would be transferred > to. I am assuming that every file "name" (i.e. including colons etc) I > am running Vim on does not exist. If it exists, it should be opened > instead of magic happening. "foo" exists while "foo:" etc do not. > > vim foo: > vim foo > > vim foo:bar > vim foo > > vim foo:123 > vim foo +123 > > vim foo:123: > vim foo +123 > > vim foo:123:bar > vim foo +123 > > Ideally, the same would happen for vimdiff. And yes, vimdiff heeds > only one +n and the last one on the command line wins. That's fine. > > > I am pretty sure this is trivial to do in zsh, but as I said I am at a > loss as to how.. > > > Thanks, > Richard > This only does the foo:123: case, but you should be able to adapt it, if [[ $1 =~ ^(.*[^/]):([0-9]+):$ ]]; then 1=$match[1] 2=+$match[2] fi I also have a non-regex version commented out, it is arguably less readable, if [[ $1 = *[^/]##:(#b)([0-9]##)(#B): ]]; then 2=+${1[$mbegin[1],$mend[1]]} 1=${1[1,$mbegin[1]-2]} fi Ahead of this you'll want to check test -f $1 to avoid munging the argument if the file exists. Changing the regex to ^(.*[^/]):([0-9]+)[^0-9].*$ should cover two of your other cases, but you might want to be more restrictive than .* there, not sure what you want to allow bar to be. -- Mikael Magnusson