2012-03-09 51 views
1

我想替換cscope中的一個:tnext命令,但它不符合我的期望。vim scripting「我想替換爲cscope中的tnext」

1)下圖顯示代碼正在按預期工作。我可以到達符號的第二個實例。

function MyCounter() 

    if !exists("s:counter") 
     let s:counter = 1 
     echo "script executed for the first time" 
    else 
     let s:counter = s:counter + 1 
     echo "script executed " . s:counter . " times now" 
    endif 
endfunction 

nmap <space>w :ls<CR> 
nmap <space>i :call MyCounter() 
nmap <space>n :cs find s <C-R>=expand("<cword>")<CR><CR>2<CR> 

2)所示的代碼,其是不工作

function MyCounter() 
    if !exists("s:counter") 
     let s:counter = 1 
     echo "script executed for the first time" 
    else 
     let s:counter = s:counter + 1 
     echo "script executed " . s:counter . " times now" 
    endif 
endfunction 

nmap <space>w :ls<CR> 
nmap <space>i :call MyCounter() 
nmap <space>n :cs find s <C-R>=expand("<cword>")<CR><CR><C-R>=str2nr(s:counter)<CR> 

1和2的代碼段之間的差異是= str2nr(S:計數器) 即,當用戶符號的n個實例的動態計算按N鍵

按下空格鍵+妮之前一直按空格+我

請建議我爲什麼第二個代碼段無法正常工作。

回答

0

你可以嘗試

nmap <space>n :exec "cs find s" expand("<cword>") "\| norm" str2nr(s:counter) 

你似乎在正常模式下,這將不會工作,使用<C-R>=str2nr...

免責聲明:我還沒有能夠測試上述方法甚至可以工作。

編輯

您可能需要使用cscopetag設置:

     *cscopetag* *cst* 
If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will 
always use |:cstag| instead of the default :tag behavior. Effectively, by 
setting 'cst', you will always search your cscope databases as well as your 
tag files. The default is off. Examples: > 
    :set cst 
    :set nocst 

這應該給你一組豐富的使用標籤的命令,這可能會給你的方式做你想做的(:tjump:tnext等)

+0

我認爲,該命令將不會解決問題的問題,因爲,在這種情況下,提問要養活櫃檯和操作Cscope的'find'命令的交互式屏幕回車作爲行字符,不作爲普通模式命令(更具體地說,是一個沒有緊跟其後的命令而無用的計數器)。 – 2012-03-10 10:17:48

+0

是的,你是正確的,我想傳遞價值,爲「cscope find命令交互式屏幕」 – 2012-03-10 16:41:31

+0

@ManjunathaCachar我想起了'cscopetag'選項(參見編輯) – sehe 2012-03-10 18:08:37

0

問題是由試圖隊列進行處理得到 字符引起作爲表達評估的結果。有必要使 的表達式成爲表達式(見:help :map-<expr>)或使用 feedkeys()函數。爲了便於修改映射,我建議使用第一種方法並如下更改映射。

:nnoremap <expr> <space>n ':cs find s '.expand('<cword>')."\r".s:counter."\r\r" 
+0

令S:計數器= 3 – 2012-03-10 16:54:48

+0

IB嗨, 令S:計數器= 3 :nnoremap n':cs find s'.expand('')。「\ r」.s:counter。「\ r」 應顯示「cs find s debug_printf」的輸出的第3個符號,它不是展示。 – 2012-03-10 17:03:40