2016-06-29 1 views
1

は、この関数の引数を分割し、リストでそれらを置くことができるのvimで任意のコマンドがあります:関数のグローバル引数を分割しますか?

qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 

問題は、最後の引数である

["void *base", "size_t nmemb", "size_t size", "int (*compar)(const void *, const void *)"] 

を取得します。

答えて

0

引数を取得するためです。私は、引数を分割しb:list変数に入れて機能GetArguments()を作成することで、終わった:私は最終的に自分自身の関数を作ることによって終わった

function! GetArguments() 
       let l:str=getline(".") 
       let l:str=substitute(l:str,'^\(\s\|\w\)*\("\|[\|(\|<\|{\)','','') 
       let l:str=substitute(l:str,'\("\|]\|)\|>\|}\)\s*\({\|;\)*\s*$','','') 
       let l:i='' 
       let l:oparen=0 
       let l:Arg="" 
       let b:list=[] 
       for l:i in split(l:str,'\zs') 
         if matchstr(l:i , '\("\|[\|(\|<\|{\)') != '' 
           let l:oparen+=1 
         elseif matchstr(l:i , '\("\|]\|)\|>\|}\)') != '' 
           let l:oparen-=1 
         endif 
         if matchstr(l:i, ',\|;') == '' 
           let l:Arg=l:Arg.l:i 
         elseif matchstr(l:i, ',\|;') != '' && l:oparen != 0 
           let l:Arg=l:Arg.l:i 
         elseif matchstr(l:i, ',\|;') != '' && l:oparen == 0 
           if strlen(l:Arg) != 0 
             call add(b:list,l:Arg) 
           endif 
           let l:Arg="" 
         endif 
       endfor 
       if strlen(l:Arg) != 0 
         call add(b:list,l:Arg) 
       endif 
endfunction 
3

argumentative.vimを使用すると、各引数をループすることができます。各ループで、引数を配列に追加して次の引数境界に移動できます。

command! GetArguments echo GetArguments() 
function! GetArguments() 
    let reg = @@ 
    let arr = [] 
    let view = winsaveview() 
    while getline('.')[col('.')-1] != ')' 
    normal yi, 
    call add(arr, @@) 
    normal ], 
    endwhile 
    let @@ = reg 
    call winrestview(view) 
    redraw! 
    return string(arr) 
endfunction 

単に最初の引数に無効にv上にカーソルを置き、:GetArgumentsを実行します。バッファにテキストを追加する場合は、:put=GetArguments()を使用します。

注:テストテキスト以外のテキストはテストしていません。必要に応じて変更する必要があります。

私は引数/パラメータの操作を助けるために働くargumentative.vimプラグインの著者です。議論は以下の機能を提供します>,<,経由

  • 新しいテキストオブジェクト、i,a,
  • シフト引数。
  • ],を介して次/前の引数の境界に移動し[,はそれぞれ

私は同様のことを行うそこに他のプラグインがあると確信しています。

+0

! +1 –

+0

@メキシコ、あなたは類似の問題を持つ他の人を助けるためにあなたの機能を投稿に入れたいかもしれません –

+0

@Rincker現時点で私が欲しいものを実際に行いましたが、改善が必要な単純な機能です! –

関連する問題