neocomplcache使用時にVimが暴走する #423

Closed
Shougo opened this Issue Jun 3, 2013 · 7 comments

Comments

Projects
None yet
2 participants
@Shougo
Owner

Shougo commented Jun 3, 2013

vim-jp/issues#403 から移転。

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
再現手順

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

状況

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

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Jun 3, 2013

Owner

~~7.3.969で再現しないという事は、neocomplcacheが使用している正規表現パターンがNFAエンジンのバグを付いている可能性もあります。~~neocomplcacheの単なるバグで無限ループになっている可能性もあります。

ひとまず、私の環境で再現するかの調査から始めます。

Owner

Shougo commented Jun 3, 2013

~~7.3.969で再現しないという事は、neocomplcacheが使用している正規表現パターンがNFAエンジンのバグを付いている可能性もあります。~~neocomplcacheの単なるバグで無限ループになっている可能性もあります。

ひとまず、私の環境で再現するかの調査から始めます。

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Jun 4, 2013

Owner

すみません。私の環境では再現できませんでした。

使用したスクリプトは以下です。私の環境に合わせ、スクリプトを少し書き直しました。この.vimrcを起動時に読み込むだけで自動に処理を行うようにしています。
なぜかset filetype=scssとやってもsyntax/scss.vimが読み込まれなかったので、無理やりruntime!で読み込むことにしました。

scriptencoding utf-8

set nocompatible
filetype off

set rtp+={最新版のneobundle.vimへのパス}
set rtp+={最新版のneocomplcache.vimへのパス}

if has('vim_starting')
    call neobundle#rc('~/.bundle')
endif

NeoBundle "cakebaker/scss-syntax.vim"

filetype plugin indent on


" 有効にする
call neocomplcache#initialize()

set filetype=scss

runtime! syntax/scss.vim

autocmd VimEnter * NeoComplCacheCachingSyntax

neocomplcacheにデバッグメッセージを埋め込みましたが、syntax補完は正常に候補を出しています。

Owner

Shougo commented Jun 4, 2013

すみません。私の環境では再現できませんでした。

使用したスクリプトは以下です。私の環境に合わせ、スクリプトを少し書き直しました。この.vimrcを起動時に読み込むだけで自動に処理を行うようにしています。
なぜかset filetype=scssとやってもsyntax/scss.vimが読み込まれなかったので、無理やりruntime!で読み込むことにしました。

scriptencoding utf-8

set nocompatible
filetype off

set rtp+={最新版のneobundle.vimへのパス}
set rtp+={最新版のneocomplcache.vimへのパス}

if has('vim_starting')
    call neobundle#rc('~/.bundle')
endif

NeoBundle "cakebaker/scss-syntax.vim"

filetype plugin indent on


" 有効にする
call neocomplcache#initialize()

set filetype=scss

runtime! syntax/scss.vim

autocmd VimEnter * NeoComplCacheCachingSyntax

neocomplcacheにデバッグメッセージを埋め込みましたが、syntax補完は正常に候補を出しています。

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Jun 4, 2013

Owner

使用したVim: 7.3.1078
neocomplcache: a20f1c9

Owner

Shougo commented Jun 4, 2013

使用したVim: 7.3.1078
neocomplcache: a20f1c9

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Jun 4, 2013

Owner

それっぽいのが再現しました。osyoさんの手順だと再現が無理で、scssファイルを用意してそれを開いた際にフリーズするようです。<c-c>で復帰できます。

Owner

Shougo commented Jun 4, 2013

それっぽいのが再現しました。osyoさんの手順だと再現が無理で、scssファイルを用意してそれを開いた際にフリーズするようです。<c-c>で復帰できます。

@ghost ghost assigned Shougo Jun 4, 2013

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Jun 4, 2013

Owner

原因が判明しました。filetypeの判別で無限ループになっているようです。今は時間がないので、修正にはもう少しかかります。

Owner

Shougo commented Jun 4, 2013

原因が判明しました。filetypeの判別で無限ループになっているようです。今は時間がないので、修正にはもう少しかかります。

@Shougo

This comment has been minimized.

Show comment
Hide comment
@Shougo

Shougo Jun 4, 2013

Owner

問題の修正が完了しました。syntaxファイルの有無は関係なく、:set filetype=css.scssとするだけで暴走していました。

Owner

Shougo commented Jun 4, 2013

問題の修正が完了しました。syntaxファイルの有無は関係なく、:set filetype=css.scssとするだけで暴走していました。

@Shougo Shougo closed this Jun 4, 2013

@nyangry

This comment has been minimized.

Show comment
Hide comment

nyangry commented Jun 4, 2013

😃

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