Sunday, February 17, 2013

Re: vim: current best available jekyll plugin? (or, sub-subject: how to write a ranged command calling ranged function)

On 2/17/2013 11:39 AM, Paul Isambert wrote:
I usually work in some a long , but organized text file. and sometime I   > really want to quickly put  > some really good texts that I'm editing/viewing into a blog post and   > publish it.  > currently I have to:  > 1) visual select the texts that i want to post  > 2) copy them into a new buffer  > 3) add some yaml front matter stuff like the following:  >   >   ---  >   layout: post  >   title: "github/jeklly notes"  >   description: ""  >   category:  >   tags: []  >   ---  >   {% include JB/setup %}  >   > 4) save them as a md file into the _post folder  >   > what is the best vim-way to automate these?  
I'd say, again, write a command/function, e.g.:    function! s:Post (fname) range    exe a:firstline . "," . a:lastline . "yank"    exe "tabnew /path/to/your/dir/" . a:fname . ".md"    call append(0, ["Some", "lines", "of", "text."])    normal p  endfunction    com! -nargs=1 Post call s:Post(<q-args>)    Best,  Paul  
hi Paul:
Thanks for the good sample code.
I spend some time to develop it into my need, I found 2 small (but key) issues here:

1) to make command support range, it seems i need to add "-range":
com! -nargs=1 Post call s:Post(<q-args>)

2) even with that,  I still can't catch the selected text range, but instead my test shows only 1st line(or "current") line
is yanked. so I tried this:

com! -range=% -nargs=1 Post :<line1>,<line2>call Post(<q-args>)

now it seems to work.

so it seems that to support "range" in command -- a common usage is to pass that range into a called func (also ranged),
that 2 elements can't be ignored...

not sure my understanding is correct or I still miss anything here?


regards
ping


No comments: