2017-09-14 4 views
1

私は以下の内容のファイルを持っています。vimの繰り返し線を折り返す

。 。 。 A コードの一部... A A A です。 。

私はvimの

2折り目が繰り返し行を折り返すことによって作成されたコード

  • の ワンピースに折りたたみ使用して、このような何かをしたいです。 これはファイルを開くと自動的に発生します。それはvimrcで行うことが可能ですか?

  • 答えて

    1

    それはあなたがあなた自身の関数を書くことができsetlocal foldmethod=exprを使用することにより可能でなければなりません:

    setlocal foldmethod=expr 
    setlocal foldexpr=CustomFold(v:lnum) 
    
    function! CustomFold(lnum) 
        if getline(a:lnum) == getline(a:lnum-1) || getline(a:lnum) == getline(a:lnum+1) 
        return '1' 
        endif 
    
        return '0' 
    endfunction 
    

    しかし、これはテストされていない、あなたはすべてのファイルのためにそれを行うにはしたくないでしょう。しかし、それは正しい方向にあなたを指す必要があります。また、100%一致し、あなたの基準ではないだろうが、あなたは、特定の問題を抱えていると、あなたは常に再び

    2

    この:help fold-exprについてどのように尋ねることができます。

    setlocal foldenable foldmethod=expr 
    let &l:foldtext = 'printf("+-%s %d times: %s", v:folddashes, (v:foldend - v:foldstart + 1), getline(v:foldstart))' 
    let &l:foldexpr = 'getline(v:lnum) ==# getline(v:lnum + 1) && v:lnum < line("$") ? 1 : (getline(v:lnum - 1) ==# getline(v:lnum) ? "<1" : 0)' 
    
    +1

    、私はそれが言及 'のどのような行動価値があるだろうと思います==# 'はこのシナリオのためのものです。だから私はIngoがそれに精通していることを知っていますが、私は他のユーザのために追加します: '==#'は常に大文字と小文字を区別します。あなたがそれを望んでいなければ '==?'を使うことができます。普通の '=='のような*ここではいくつかの人が答えを出していますが、通常は悪い考えです)。 'ignorecase'設定に依存して大文字小文字を区別します。 –

    +2

    @DoktorOSwaldoそのメモを追加していただきありがとうございます。実際には、私はここで '=='は意味をなさないと思う:もしユーザが ':set ic'を持っていれば、おそらく折り畳み比較が大文字と小文字を区別しないと考えられるだろう。しかし、私は決してその設定を使用していないので、それは純粋な推測です。 –

    +0

    あなたにもう一度お悔やみして申し訳ありませんが、私はあなたの意見を聞きたいと思います。私の(本当に限られた)経験では、誰も 'ic'設定を使用していないので、使用しないでください。ここで意味をなさないようですが、私はそれが与えられたファイル(型)によってむしろ与えられると思います。小文字の行が大文字の行と同じように解釈される場合、ファイルの内容によって異なります。だから私はそれをfoldexprで明示的に設定するべきだと思います。そのようなものであなたの経験は何ですか? –

    関連する問題