2012-03-09 10 views
1

私はcscopeのa:tnextコマンドを置き換えたいと思っていますが、期待通りに動作しません。vimスクリプト "cscopeのtnextを置き換えたい"

1)下の図は、期待どおりのコードを示しています。私はシンボルの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のコードスニペットの違いを動作していないコード以下

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)= str2nrある(S:カウンタ) すなわち、ユーザ時のシンボルのN個のインスタンスの動的計算プレスN

スペース+ NIを押す前に、必ずスペースを押してください+ 2番目のコードスニペットが動作していないのはなぜ

私を提案してください。

答えて

0

あなたは動作しませんノーマルモードで<C-R>=str2nr...を使用しているように見える

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

を試みることができます。

免責事項:私は上記の方法でも動作することができるかどうかをテストすることはできませんでした。これはあなたにあなたが欲しいものを行う方法を与えるかもしれないタグで働くコマンドの豊富なセットを、与えるべき

     *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 

:あなたはcscopetag設定を使用する場合があります

編集

:tjump,:tnextなど)

+0

ノーマルモードのコマンド(より具体的には、コマンドの直後に無意味なカウンター)である。 –

+0

はい私は値を "Cscope find command interactive screen"に渡したいと思っています –

+0

@ManjunathaCachar私は 'cscopetag'オプションを思い出しました(編集参照) – sehe

0

この問題は、文字を処理するためにキューに入れようとしたために発生しました。 表現の評価の結果として。 を表現式(:help :map-<expr>参照)にするか、 feedkeys()関数を使用する必要があります。マッピングの変更を容易にするため、 は、最初のアプローチを使用し、マッピングを次のように変更することをお勧めします。私は、この場合には、質問者がCscopeの `find`コマンドの対話画面を操作する行文字としてカウントし、キャリッジリターンを供給したいと考え、以来、コマンドは、問題の問題を解決しないとないと思う

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

let s:counter = 3 –

+0

こんにちは let s:counter = 3 "\ r" .s:counter "\ r""cs find s debug_printf"の出力の3番目のシンボルを表示する必要があります。 表示します。 –

関連する問題