🐍

vimのterminalでtqdmの出力がおかしくなる件

2021/06/02に公開

困ったこと

○とかをいい感じに表示させるために、 vimの設定でset ambiwidth=double をしていると、
vimのterminalで、Pythonのプログレスバー表示のtqdmの出力が、ずれてしまう。

解決方法

setcellwidths を利用して、tqdmで出力している文字の幅を1に変える。
なお、setcellwidthsを利用するには、vimのバージョンが、8.2.1537 以降 (8.2.1535 ?) である必要がある。

具体的には、.vimrc に以下を記述する。

call setcellwidths([[0x2588, 0x258f, 1]])

補足

tqdmのソースを読むと、

UTF = u" " + u''.join(map(_unich, range(0x258F, 0x2587, -1)))

というところで、空白から塗りつぶしの文字を指定しているようです。

Pythonでのrangeで降順で0x2587は含まない一方で、vimのsetcellwidthsは昇順で端を含むので、値がちょっとだけ違います。

Discussion