On 2011-05-29, hdc1112 wrote:
> hi, I met a problem when debugging my first vim script.
> 
> the project is filled with codes like this:
> struct ngx_pool_s
> {
>     ....
> };
> typdef struct ngx_pool_s ngx_pool_t;
> 
> ngx_pool_t *p;
> 
> so, if cursor is under ngx_pool_t, my script is expected to jump directly to
> the definition of ngx_pool_s instead of the "typedef" line.
> 
> my script is: (it has a problem when passing variable to cscope, please help
> me.)
> 
> 
> "function:
> "move cursor to ngx_pool_t and press shift+F
> "we can goto the defition of ngx_pool_s
> 
> function! Dachuan_nginx()
>       let w = expand("<cword>")
>       if -1 == match(w, '_t$')
>               return
>       endif
>       let w = substitute(w, '_t$', '_s', "g")
> 
>       cs find g <C-R>=substitute(expand("<cword>", '_t$', '_s', "g")<CR><CR>
>       "cs find g <C-R>=substitute(w, '_t$', '_s', "g")<CR><CR>
>       "cs find g w   (I CAN'T USE VARIABLE w DIRECTLY HERE, HOW TO DO IT?)
> endfunction
> 
> nmap F :call Dachuan_nginx()<CR>
> 
> and by the way, I have already solve this problem using another method, 
> nmap F :cs find g <C-R>=substitute(expand("<cword>"),'_t$', '_s',
> "g")<CR><CR>
> but I still want to know the previous problem for future use.

In answer to the question of expanding w in

    cs find g w

you can use :execute like this:

    exe 'cs find g' w
    
The :execute command inserts spaces between its arguments before
executing them all, but some people prefer to explicitly concatenate
the components into a single string argument like this:

    exe 'cs find ' . w

The end result of either is the same.  You could also do this:

    exe 'cs find g' substitute(expand("<cword>"), '_t$', '_s', '')

Note that since your pattern matches only at the end of the string,
the "g" flag is unnecessary.

Regards,
Gary

-- 
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

Reply via email to