3

私の .vimrc には次の行があります

:set foldmethod=marker
:set foldmarker=SECTION:,ENDSECTION:

カスタムコードの折り畳み用。私のファイルでは、対応する言語のコメント文字がコード折りたたみマーカーの前にあり、その後に対応するセクションのタイトルが続きます。例えば

# SECTION: First Section
some code
# SECTIION: Subsection
some more code
# ENDSECTION: 
# ENDSECTION: 

# SECTION: Second Section
some other code
# ENDSECTION: 

この構造には、次のようなファイルのコンテンツを生成するために必要なすべてのものがあります

First Section
    Subsection
Second Section

(理想的には、このインデックスにはvimヘルプシステムに似たマーカーがあり、対応するセクションに簡単にジャンプできます。これを実現する方法がわかりません)。このテキストを生成する簡単な perl スクリプトを思いつくことができますが、新しいウィンドウにインデックスを表示する vim スクリプトに基づくソリューションを好むでしょう。たぶん、これを行うソリューションがすでに存在しますか?

4

1 に答える 1

2

これを vimrc に入れて:MkIdxorを実行します<leader>z。コマンドに範囲を渡すこともできますが、デフォルトはバッファ全体です。

function! MkIdx() range
      let items = filter(getline(a:firstline, a:lastline), 'v:val =~ ''\C^\s*#\s\+SECTION''')
      new
      call setline(1, map(items, 'substitute(v:val, ''^\(\s*\)[^:]\+:\(.\+\)'', ''\1\2'', '''')'))
      " Mapping to jump to section:
      nnore <silent><buffer><leader>x :<C-U>call Go2Section()<CR>
endfunction

function! Go2Section()
      let section = matchstr(getline('.'), '^\s*\zs.*')
      quit
      call search('\C# SECTION:\s\+'.section, 'cw')
endfunction

command! -bar -range=% MkIdx <line1>,<line2>call MkIdx()
" Mapping to build the index:
nnore <silent><leader>z :<C-U>MkIdx<CR>

編集:新しいバッファにインデックスを置きます。

編集 2: 空行を残さないでください。

編集 3: でセクションにジャンプできるようにします<leader>x

于 2012-04-09T19:41:36.873 に答える