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

set tags でワイルドカードを設定しPHP のオムニ補完を実行すると QuickFix ウインドウが開く #211

Open
heavenshell opened this issue Jun 19, 2012 · 17 comments

Comments

@heavenshell
Copy link
Member

PHP でオムニ補完を実行すると補完のポップアップが実行されずに、QuickFix のウインドウが開きます。

再現手順

autocmd!
set nocompatible
syntax enable
filetype plugin indent on
set backspace=indent,eol,start
if has('path_extra')
  set autochdir
  set tags+=$HOME/.vim/tags/**3/tags;
endif

autocmd QuickfixCmdPost grep,grepadd,vimgrep if len(getqflist()) != 0 | copen | endif
autocmd FileType php setlocal omnifunc=phpcomplete#CompletePHP
  1. vim -u .vimrc_simple sample.php で Vim を起動
  2. 入力モードのまま でオムニ補完を実行
  3. QuickFix のウインドウが開く

再現環境

  • Scientific Linux 6.1 Vim7.3 (最新版ソースを vim.org からダウンロードしコンパイル)をターミナルから使用
  • MacVim Kaoriya Vim7.3(最新版のバイナリをダウンロードし使用)をターミナルから使用

Linux の Vim と MacVim では挙動が少し異なり、

  • Linux の Vim では エラーメッセージが表示後 QuickFix が開き for と表示され、オムニ補完のポップアップが QuickFix に表示される
  • MacVim は QuickFix に for と入力されており、ポップアップは開かない

Linux のエラーメッセージ

E315: ml_get: 無効なlnumです: 2
E315: ml_get: 無効なlnumです: 2
E315: ml_get: 無効なlnumです: 2
E322: 行番号が範囲外です: 1 超えています
E320: 行 2 がみつかりません
E315: ml_get: 無効なlnumです: 2

ctags の set tags+=$HOME/.vim/tags/**3/tags; の設定箇所が怪しいです。
tag ファイルは $HOME/.vim/tags/py/tags という Python 用の ctags ファイルがあります。

!_TAG_FILE_FORMAT>2>/extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED>1>/0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR>-Darren Hiebert>-/dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME>-Exuberant Ctags>//
!_TAG_PROGRAM_URL>http://ctags.sourceforge.net>-/official site/
!_TAG_PROGRAM_VERSION>5.8>//
add>sample.py>/^def add(x, y):$/;">-f
hello>sample.py>/^def hello(x):$/;">f

set tags+=$HOME/.vim/tags/**3/tags;set tags+=$HOME/.vim/tags/py/tags; とすると発生しません。
また
autocmd QuickfixCmdPost grep,grepadd,vimgrep if len(getqflist()) != 0 | copen | endif から vimgrep を削ると発生しません。

Linux Vim
Vim(Linux)
MacVim
MacVim

@mattn
Copy link
Member

mattn commented Jun 20, 2012

tagfiles() がバグってそげ。

@mattn
Copy link
Member

mattn commented Jun 20, 2012

vim が内部で行う findfile は ; があった場合に上方検索を行うので、どんどん検索してメモリが足らなくなったのだと思います。この場合、; はどうしても必要ですか?

@mattn
Copy link
Member

mattn commented Jun 20, 2012

ちなみに、; を上方検索として使う場合

/usr/include/sys;/usr の様に ; の後に上方リミットとなるディレクトリを指定します。これが無い所を見ると、おそらく設定間違い?

@mattn
Copy link
Member

mattn commented Jun 20, 2012

まぁ、; が空の時に無限回に検索にいく vim も vim ですが。

@mattn
Copy link
Member

mattn commented Jun 20, 2012

あ、ちなみに僕が解析したのは

E315: ml_get: 無効なlnumです: 2
E315: ml_get: 無効なlnumです: 2
E315: ml_get: 無効なlnumです: 2
E322: 行番号が範囲外です: 1 超えています
E320: 行 2 がみつかりません
E315: ml_get: 無効なlnumです: 2

の件です。これは本来 vimscript を使っている限りでないエラーなのです。これはメモリ不足になったのが原因だと思います。
quickfix が出る件は別途調べます。

@mattn
Copy link
Member

mattn commented Jun 20, 2012

すごい簡単でした。tags ファイルが見つからない場合に vimgrep してます。その結果 quickfix が出てますね。
tags ファイルは中身も見て、function があるかを確認しているので、python の def な tags は無視されて、結果 vimgrep が行われた...という事です。

@heavenshell
Copy link
Member Author

ありがとうございます。
手元の MacVim で set tags+=$HOME/.vim/tags/**3/tags;$HOME とした所、現象が発生しました。
(Linux でも発生するかは帰宅してから確認します)

@mattn
Copy link
Member

mattn commented Jun 20, 2012

現象が発生しました。

ml_get のエラーは出ますか?どっちかっていうとそっちが気になります。
ちなみに quickfix の件は

diff -r 869a63c3f311 runtime/autoload/phpcomplete.vim
--- a/runtime/autoload/phpcomplete.vim  Wed Jun 13 19:19:41 2012 +0200
+++ b/runtime/autoload/phpcomplete.vim  Wed Jun 20 10:09:10 2012 +0900
@@ -476,7 +476,7 @@
        " Prepare list of functions from tags file
        let ext_functions = {}
        if fnames != ''
-           exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
+           exe 'noau silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
            let qflist = getqflist()
            if len(qflist) > 0
                for field in qflist

で直りませんか?

@mattn
Copy link
Member

mattn commented Jun 20, 2012

良く見たら結構おうちゃくだなこの処理w

a:base に正規表現が混じってたらアウトだ。

@heavenshell
Copy link
Member Author

ml_get のエラーは出ますか?どっちかっていうとそっちが気になります。

MacVim では元々 ml_get の方エラーは出ないです。
SL でやった時に発生しました。
ちょっと手元に環境がないので、しばらくお待ち下さいませ。

QuickFix の件はご提示のパッチで行けました!

@mattn
Copy link
Member

mattn commented Jun 20, 2012

QuickFix の件はご提示のパッチで行けました!

こっちは vim_dev に投げておきます。あざす。

@mattn
Copy link
Member

mattn commented Jun 20, 2012

@ghost ghost assigned mattn Jun 20, 2012
@heavenshell
Copy link
Member Author

Linux でも再現しました。
set tags+=$HOME/.vim/tags/**3/tags;$HOME でエラーメッセージが表示されました。
因に VM 環境でメモリが 512MB しか割り当ててないのも要因かもしれません。

ご提示のパッチを適応した場合、再現しませんでした。

@mattn
Copy link
Member

mattn commented Jun 20, 2012

本件は autoload/*.vim だけにして、エラー部分は #212 でやります。

@heavenshell
Copy link
Member Author

承知しました。
お手伝いできる事があればしますので、お声がけ下さい。

@mattn
Copy link
Member

mattn commented Jun 20, 2012

phpcomplete.vim の author にコンタクト取れとなw
重い作業だw

@mattn
Copy link
Member

mattn commented Aug 6, 2012

作者からメールが返ってこないのでbramがじきじきにメールだした←イマココ

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

2 participants