if_pythでvim.buffersした結果がvim8とneovimで違う #992

Closed
momo-lab opened this Issue Dec 2, 2016 · 4 comments

Projects

None yet

4 participants

@momo-lab
momo-lab commented Dec 2, 2016

質問・報告の内容

以下のコマンドを実行した結果が、vim8とneovimで違います。

vim8の場合

:python3 import vim
:python3 print([b.options['filetype'] for b in vim.buffers])
[b'']

neovimの場合

:python3 import vim
:python3 print([b.options['filetype'] for b in vim.buffers])
['']

vim8だとvim.buffersが返すバッファのfiletypeがバイト列になるんですが、
neovimだと文字列になるようです。
これが原因でdenite.nvimで:Denite bufferしたときの結果がvim8とneovimで変わってます。

Vimのバージョン

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Dec 02 2016 08:41:31)
Included patches: 1-118

NVIM 0.2.0-dev
Build type: RelWithDebInfo

( :version で確認できます)

OSの種類/ディストリ/バージョン

Ubuntu 16.04 64bit

使用している or 関係していそうなプラグイン

Pythonのバージョン
3.5.2 (default, Nov 16 2016, 22:51:46)
[GCC 5.4.0 20160609]

@koron koron added the kind/discuss label Dec 2, 2016
@koron
Member
koron commented Dec 4, 2016

@momo-lab
バイト配列になるのが好ましくない理由を、neovim や denite.vim とは関係のない事例で示してください。

現在はバイト配列になっており、それでも動いているVim scriptが存在していると考えられます。
にも関わらず、それをいきなり文字列に変更するというのは、互換性の観点からは非常にリスキーです。
ですから変更を提案するには、それなりに強い理由・動機が必要です。

たんに実装忘れで、バイト配列になっている可能性もなくはありません。
その場合は、Vim 8.0 + Python 3.x でオプションに依存して
バイト配列や文字列で帰ってきて一貫性がなくて良くないよね、ということができるはずです。
これは強い理由・動機となりえます。

そのあたり調査をお願いできないでしょうか?

@k-takata
Member
k-takata commented Dec 4, 2016

str型の方が使いやすいので、互換性を壊してneovimで変えてしまったのではないでしょうか。
プラグイン側としては、bytes型だったら 'encoding' の値でデコードすれば、とりあえずは同じように動くのでは?

filetype = vim.buffers[1].options['filetype']
if isinstance(filetype, bytes):
    filetype = vim.buffers[1].options['filetype'].decode(vim.options['enc'].decode())
@equal-l2
equal-l2 commented Dec 13, 2016 edited

neovimのレポジトリでIssueを投げてみました。(neovim/neovim#5768)
neovimが仕様を変更したということで間違いないようです。

neovimとしては、環境依存のエンコーディングで返ってくるよりは必ずUTF-8で返ってくる方が良いと考えたようです。
neovimではUTF-8以外の内部エンコーディングを使用できないようなので、その辺とも関わっているのだと思います。

@momo-lab

ようやくいろいろ確認しました。
neovim側が仕様を変更したということで了解です。

vim8/neovim両方に対応するには適宜decodeが必要だという理解をしましたので、
プラグイン側で対応するようにPR送ったりしてみます。

@momo-lab momo-lab closed this Dec 19, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment