1. ホーム
  2. vim

[解決済み] Vimでのスマートラップ

2023-04-26 09:15:30

質問

Vim にコード行をスマートラップして、インデントしている行と同じインデントを維持する機能があるのかどうか疑問に思っていました。私は e-text editor などの他のテキストエディタでそれに気づき、それが私が見ているものをより簡単に理解するのに役立つことがわかりました。

例えば

<p>
    <a href="http://www.example.com">
        This is a bogus link, used to demonstrate
an example
    </a>
</p>

のように表示されます。

<p>
    <a href="somelink">
        This is a bogus link, used to demonstrate
        an example
    </a>
</p>

どのように解決するのですか?

この機能は 2014年6月25日に実装されました。 にパッチ 7.4.338 として実装されました。その後、この機能を改良するパッチがいくつかあり、最後のものは 7.4.354 ですので、このバージョンが必要です。

:help breakindent
:help breakindentopt

以下、vimのヘルプからの抜粋です。

'breakindent'     'bri'   boolean (default off)
                          local to window
                          {not in Vi}
                          {not available when compiled without the |+linebreak|
                          feature}
        Every wrapped line will continue visually indented (same amount of
        space as the beginning of that line), thus preserving horizontal blocks
        of text.

'breakindentopt' 'briopt' string (default empty)
                          local to window
                          {not in Vi}
                          {not available when compiled without the |+linebreak|
                          feature}
        Settings for 'breakindent'. It can consist of the following optional
        items and must be seperated by a comma:
                  min:{n}     Minimum text width that will be kept after
                              applying 'breakindent', even if the resulting
                              text should normally be narrower. This prevents
                              text indented almost to the right window border
                              occupying lot of vertical space when broken.
                  shift:{n}   After applying 'breakindent', wrapped line
                              beginning will be shift by given number of
                              characters. It permits dynamic French paragraph
                              indentation (negative) or emphasizing the line
                              continuation (positive).
                  sbr         Display the 'showbreak' value before applying the 
                              additional indent.
        The default value for min is 20 and shift is 0.

また、これと関連するのが showbreak の設定もあり、これはシフト量に指定した文字を付加します。

設定例

" enable indentation
set breakindent

" ident by an additional 2 characters on wrapped lines, when line >= 40 characters, put 'showbreak' at start of line
set breakindentopt=shift:2,min:40,sbr

" append '>>' to indent
set showbreak=>>   

動作に関する注意

を指定しない場合 sbr オプションを指定しない場合、すべての showbreak という文字がインデントに追加されます。 削除する sbr を削除すると、有効なインデントが 4 文字になります。 showbreak をインデント無しで使いたい場合は shift:0 .

また、負のシフトを与えることもでき、その場合は showbreak 文字、および折り返しテキストを、利用可能なインデントスペースに引き戻す効果があります。

を指定した場合 min の値を指定した場合、端末の幅が狭いとシフト量がつぶれてしまいますが showbreak の文字は常に保存されます。