Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

特定のプラグイン使用時にVimが暴走する #403

Closed
nyangry opened this issue Jun 3, 2013 · 22 comments
Closed

特定のプラグイン使用時にVimが暴走する #403

nyangry opened this issue Jun 3, 2013 · 22 comments
Assignees

Comments

@nyangry
Copy link

nyangry commented Jun 3, 2013

環境

  • Mac OSX 10.7.5
  • iTerm2
  • MacVim 7.3.754, Vim 7.3.976
  • プラグインは全て最新のものを使用

現象

scss-syntax.vimをインストールした状態でSCSSファイルを開き、
インサートモードに入って何らかのキーを押下した瞬間から、
VimのCPU及びメモリの使用率が急激に上昇し、そのままVimがフリーズしてしまう。

Vimを7.3.754 -> 7.3.976 へ切り替えても同じ現象が発生する。

scss-syntax.vimをアンイストールすることで回避できることは確認済み。

Shougoさんより:

@lunchub あ、それはもしかすると正規表現エンジンの問題かもしれません。Vimを最新化して、それでも再現するようならvim-jpに報告してもらえますか?

使用プラグイン

├── gist-vim
├── html5.vim
├── jscomplete-vim
├── neobundle.vim
├── neocomplcache
├── neocomplcache-rsense
├── neosnippet
├── octoeditor.vim
├── ruby-matchit
├── scss-syntax.vim
├── simple-javascript-indenter
├── skk.vim
├── syntastic
├── taglist.vim
├── unite-rails_best_practices
├── unite-reek
├── unite-ruby-require.vim
├── unite.vim
├── vim-alignta
├── vim-css3-syntax
├── vim-endwise
├── vim-fakeclip
├── vim-fugitive
├── vim-haml
├── vim-indent-guides
├── vim-matchit
├── vim-mlh
├── vim-powerline
├── vim-quickrun
├── vim-rails
├── vim-rooter
├── vim-surround
├── vim-textobj-ruby
├── vim-textobj-user
├── vimproc
├── vimshell
├── webapi-vim
└── winresizer
@h-east
Copy link
Member

h-east commented Jun 3, 2013

新しい正規表現エンジンが導入されたのは 7.3.970 ですので、それ以前のバージョン(7.3.754)でもフリーズするのでしたら正規表現エンジンは関係ないことになります。

フリーズが発生するSCSSファイルをどこかにアップすることは可能でしょうか?
(サイズが小さければファイル内容のコピペで構いません)

@nyangry
Copy link
Author

nyangry commented Jun 3, 2013

SCSSであればどのファイルでも同じ現象になりますが、
一番最初に問題が発生したのは以下のファイルです。
自動生成されたもので手はつけていないため、1行しかありませんが・・

また、1点判明したことは、
ファイルを開いた瞬間ではなく、
インサートモードに入って、何らかのキーを押した瞬間から発生するようです。

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style scope.
 *
 *= require_self
 *= require_tree .
 */
@import "bootstrap";

@osyo-manga
Copy link

手元でも再現したので環境を晒しておきます。

環境

  • OS : WindowsXP SP3
  • Vim : Kaoriya 版 Vim 7.3.918

使用 vimrc

scriptencoding utf-8

set nocompatible
filetype off

set rtp+=$VIM/dotfiles/neobundle.vim/

if has('vim_starting')
    call neobundle#rc(expand($VIM."/.vim/neobundle"))
endif

NeoBundle "Shougo/neocomplcache"
NeoBundle "cakebaker/scss-syntax.vim"

filetype plugin indent on


" 有効にする
let g:neocomplcache_enable_at_startup=1

再現手順

  1. vim を起動
  2. set filetype = scss.css
  3. Insert に入って適当に書き込む
  4. フリーズ(補完処理が走るタイミング?)

状況

タイミング的には補完処理が走る時にフリーズしたような感じがしました。
上の vimrc で neocomplcache を使用しないようにしたらフリーズしなくなったのでそこら辺に原因があるのではないでしょうか。
また Kaoriya 版 Vim 7.3.969 でも同様の環境、手順で試してみましたがこちらのバージョンでは再現しませんでした。

@h-east
Copy link
Member

h-east commented Jun 3, 2013

@osyo-manga 情報ありがとうございます。

私の環境(Windows 7SP1 64bit, Vim7.3.875 +kaoriya, scss-syntax.vimインストール, neo*未インストール)でもフリーズしなかったので、Vim本体というよりはneocomplcacheの問題と思われます。
ですのでこのissueは閉じます。

@Shougo 引き取りよろしくお願いします。

@Shougo
Copy link
Member

Shougo commented Jun 3, 2013

引き取り班です。引き取り作業を行いました。ひとまず、上記Issueで問題の原因を突き止めることにします。

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

すみません、原因は判明しました。neocomplcacheの問題です。ラベルを張り替えました。修正は上記Issue内で行います。

@ghost ghost assigned Shougo Jun 4, 2013
@koron
Copy link
Member

koron commented Jun 4, 2013

特定のブラグイン=だいたいネオコン

の図式が確立しつつあるw

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

neocomplcacheは広く使われていて、相当に複雑なプラグインで、実装に裏技を使っている以上Vimのバグも踏みやすく、問題が起こるのはいかんともしがたい部分がありますね……。

@koron
Copy link
Member

koron commented Jun 4, 2013

いかんともしがたい

以下の様なフローを採用ししていれば、今回のケースに限って言えば避けられたのでは?

  1. neocomplcacheを使っているか確認 → 使っていなければvim-jp/vim_devに報告
  2. neocomplcacheを外して再現するか確認 → 再現すれば vim-jp/vim_devに報告
  3. 再現しなければ neocomplcache で対処

そういう切り分けのプロセスを踏んでないと
「またネオコンか」とか「またMacVimか」
みたいなことになるんですよ。

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

「いかんともしがたい」のは、「neocomplcacheで問題が起こること」です。

vim-jpにプラグインの問題が報告されてしまったことは私も反省していて、もっと原因の切り分けを行なってから報告されるべきでした。特定のプラグインをインストールしていて発生する問題に関しては、まずそのプラグイン内で議論するようにこれからは自分も気をつけますし、他の人にも働きかけていきます。

@thinca
Copy link
Member

thinca commented Jun 4, 2013

プラグインの問題か本体の問題かは、普通のユーザーには判断できません。特にどのプラグインが悪さしているかもわからない場合はなおさらです。
そこを判断してから登録しろ、とすると、問題報告自体を萎縮させてしまう可能性があります。
「本体かプラグインかよくわからないけど困ってる」って場合はとりあえず登録してもらうのがいいのではないでしょうか。切り分けに関するアドバイスもそこですれば良いと思います。
もちろん自力で調査ができる人にはやってもらいたいですが、すべての人ができるわけではないので、それくらいを受け入れる度量は欲しいところです。

@nyangry
Copy link
Author

nyangry commented Jun 4, 2013

お騒がせして申し訳ありません。

  • Vim自体の更新を行なっていない状態で問題が発生した
  • 特定のプラグインを外すことで問題が発生しなくなる

これらを考慮すれば、Vim本体の問題ではないことはほぼ自明だったはずで、
実際にどちらが悪さをしているか私では判断できないとはいえ、
「最小構成での検証」 これが欠けていた点を猛省しています。

@koron
Copy link
Member

koron commented Jun 4, 2013

@thinca
私の意見は普通のユーザにその義務を課すものではありません。プラグイン切り分けが難しいのは承知していて、そのためにできることが無いかは別issueを立ててあります。

しかし 今回のケースでは Shougo さんが初動としてtwitterでやりとりしています。その時にShougoさんが neocomplcache である可能性を考慮して、上記のようなフローに乗せることは十分できたはずだし、そうするべきだった と私は言っています。先の返信から本人もそれは理解していると、私は感じました。

あと最近 neocomplcache は特にコレ系のことが多いので、初期対応フローに組み込んでおいて損はないでしょう。

@lunchub 問題ありません。望ましい行動をとれるだけの知識や能力を持っていることが自明な人がそうしなかったたことを指摘したまでで、それが不明な人に適用されるものではありません。また適用しようとも考えていません。

逆にいうと今後 @lunchub さんに対する評価が「知識や能力を持っている」となった場合には遠慮なく適用しますよw

@h-east
Copy link
Member

h-east commented Jun 4, 2013

koronさんに完全に同意です。

PS
私の事を勘違いしている人が多いかもしれないので表明しときます。
私は「高い知識や能力を持っていると私が認めている vim-jper or 常連」にしかマサカリや椅子を投げません。
実際、当てはまらない人にマサカリや椅子を投げたことはない(と思う)し、丁寧に対応してきたつもりです。
ですからみなさんお気軽に登録お願いします 😄

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

しかし 今回のケースでは Shougo さんが初動としてtwitterでやりとりしています。その時にShougoさんが neocomplcache である可能性を考慮して、上記のようなフローに乗せることは十分できたはずだし、そうするべきだった と私は言っています。先の返信から本人もそれは理解していると、私は感じました。

はい。知識がない人が初回登録する場所を間違えることは仕方ないので、知識がある人が正しい方向に誘導していくしかないと考えています。今回は私が初回の誘導の方向を間違えたという事です。

私の事を勘違いしている人が多いかもしれないので表明しときます。
私は「高い知識や能力を持っていると私が認めている vim-jper or 常連」にしかマサカリや椅子を投げません。

私はよくマサカリを投げられますが、それだけ認められているという事で、ここは喜んだほうがいいんですかね?

@koron
Copy link
Member

koron commented Jun 4, 2013

私はよくマサカリを投げられますが、それだけ認められているという事で、ここは喜んだほうがいいんですかね?

微妙なところですねw
ただ無知や無能力のままでは居られないのも良いところなので
ここはやや複雑だけど喜んでおけば良いんじゃないですか?w

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

では、とりあえず喜んでおきます。

@h-east
Copy link
Member

h-east commented Jun 4, 2013

喜んで喜んで!
最近 @Shougo 氏は投げられ耐性が付いてきたような気がしているので新しい武器を物色中です:cat2::dash:

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

問題の解決は完了しました。お手数おかけしました。

@thinca
Copy link
Member

thinca commented Jun 4, 2013

しかし 今回のケースでは Shougo さんが初動としてtwitterでやりとりしています。

そこまで追ってませんでした。

ちなみに、多分みなさんもわかっているとは思いつつ一応言っておくと、調査には知識や能力だけではなく、時間も必要です。調査できるだけの能力はあるけど、時間がない場合、それが理由でいつまでも問題が報告されないのはもったいないです。時間がない(手間がかかりすぎる/面倒くさくて調査のやる気が出ないなども含む)場合は、能力があってもとりあえず報告してしまうと良いと思います。

ちなみに私はマサカリ怖い勢です。

@Shougo
Copy link
Member

Shougo commented Jun 4, 2013

ちなみに、多分みなさんもわかっているとは思いつつ一応言っておくと、調査には知識や能力だけではなく、時間も必要です。調査できるだけの能力はあるけど、時間がない場合、それが理由でいつまでも問題が報告されないのはもったいないです。時間がない(手間がかかりすぎる/面倒くさくて調査のやる気が出ないなども含む)場合は、能力があってもとりあえず報告してしまうと良いと思います。

かといって、不完全な状態で投げると他の人の時間を無駄に奪うことにもなりかねないのでバランスが難しいところです。
時間がなくてその時点では十分な調査ができていない場合、その旨を書いておくと良さそうです。

ちなみに私はマサカリ怖い勢です。

僕と契約して、マサカリを投げられる係になろうよ! (◕‿‿◕)

@h-east
Copy link
Member

h-east commented Jun 4, 2013

thinca氏はマサカリを(投げる、避ける、打ち返す)の3拍子そろったオールラウンダー。
つ 衣

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants