rcmdnk's blog
Last update

実践Vim 思考のスピードで編集しよう! (アスキー書籍)

Vimのちょっと前のアップデート でbreakindentというオプションが加わって 折り返された部分もインデント出来る様になった様で、 しばらく気になったままおいておきましたが Vimをアップデートして色々設定してみました。

breakindent (bri)

breakindentはVim 7.4, patch 338から加わったオプションで 1wrapオプションを有効にしている時なんかに 折り返された部分もインデントされるようにするオプションです。

breakindent

こんな感じで、もともと折り返された部分は左端から始まりますが、 それがインデントされたコラムから始まる様になります。

breakindentopt (briopt)

breakindentを有効にした時の動作を設定するオプションです。

設定できるのは(カッコ内はデフォルト値):

  • min:{n} (n=20): 折り返した後の行では、{n}文字以上は必ず表示する。(インデントが深すぎる場合に、右端でごちゃごちゃしないように。)
  • shift:{n} (n=0): 折り返した行でn文字さらにインデントする。(下のsbrをセットしていない場合はインデントされた後にさらにshowbreakが入ってずれるので注意。)
  • sbr (セットされていない): showbreakで設定した値を折り返し行の先頭に表示する。sbrがセットされてない時はインデントの後にshowbreakを表示し、その後に行の内容を書き出す。

の3つ。

ただ、この値は最初にVimを開いた時には有効になるんですが、 Vimの中で新たにファイルを開いたりすると無効になります。 minのデフォルトの20に関しても無効になって0になってしまいます。

上のgifではbreakindentoptの値は設定していないのですが、 :help breakindentでヘルプファイルを開いた後での作業ですが、 デフォルト値も無効化されて 一番短いbreakindent briの部分が右端で短くなってしまっていることが見えます。

まだ出来たばかりなので今後仕様が変更されるかもしれませんが 2、 取り敢えず新しく開いたファイルでも有効にしたいので、 autocmdを使って毎回ファイルを開いた時なんかに設定し直す様にしてみました。

現在の業折り返し設定

コレを含めたwraplinebreak等の行折り返し関連の設定はこんな感じにしています。

.vimrc
1
2
3
4
5
6
7
8
9
10
11
set wrap           " the longer line is wrapped
set linebreak      " wrap at 'breakat'
"set breakat=\      " break point for linebreak (default " ^I!@*-+;:,./?")
set showbreak=+\   " set showbreak
if (v:version == 704 && has("patch338")) || v:version >= 705
  set breakindent    " indent even for wrapped lines
  " breakindent option
  " autocmd is necessary when new file is opened in Vim
  " necessary even for default(min:20,shift:0)
  autocmd MyAutoGroup BufEnter * set breakindentopt=min:20,shift:0
endif

追記: 2014/07/15

autocmdのとこで使ってるMyAutoGroupは 他のところでも自分で定義するautocmdに宛てていて、 .vimrcの上の方で

augroup MyAutoGroup
  autocmd!
augroup END

とリセットしています。

追記ここまで

wrapに加えて設定しているlinebreakは行を折り返す時に、 単語の途中とかで無理やり折り返さずに、良い感じの所で折り返してくれるオプションです。

linebreakでは、breakatで指定された文字の部分で折り返します。 デフォルトではスペースに加えていくつかの記号が指定されていますが、 スペースだけの方が普通かな、という感じがしたら上のコメントしてある部分みたいに、 breakatにスペースを指定します。

showbreakの所は+に加えて一文字の空白(\ )を入れています。

breakindent関連の所は古いバージョンの場合にエラーを出さないように無視でするように設定。

breakindentoptの所はBufEnter*を指定しているので 全てのファイルを開く時にこの設定を有効にします。

特定のファイルのみの場合だけ有効にしたい場合は

1
autocmd MyAutoGroup BufEnter *.cxx,*.py set breakindentopt=min:20,shift:0

みたく拡張子で指定してみたり。

上の設定だとこんな感じです。

breakindentcurrent

Sponsored Links
Sponsored Links

« GNU screenのUTF8パッチ付きのHomebrew用Formula フォントを変更してみる(M+とかMiguとか) »

}