osyo-manga / unite-quickfix

29 stars 4 forks source link

start_insert #4

Closed NigoroJr closed 10 years ago

NigoroJr commented 10 years ago

ごめんなさい、間違えてIssueを開いてしまいました(T_T) (あほ

以前osyo-mangaさんが書かれた記事を参照してunite-quickfixを設定したのですが、g:quickrun_configにて'runner': 'vimproc'を設定した上で-start-insertでunite.vimを開始するとプロンプトが変になりました。unite-quickfixの問題かなと思っていたのですが、:QuickRun -runner vimprocでも同じことが起こるので違ったみたいです。報告まで。

osyo-manga commented 10 years ago

よくわからないのですがまとめると

`:QuickRun -runner vimproc` 中に『挿入モードでunite.vimを開始する』と意図しない挙動になる

という感じなのでしょうか。

NigoroJr commented 10 years ago

start_insertg:quickrun_configを以下のように設定し、エラーがあるコードで:QuickRunすると、--INSERT--となるはずのステータスバーが-- --となります。また、i, a, I, Aのいずれかを打つとプロンプトにzb0la>と文字か挿入されます。

if has('vim_starting')
  set nocompatible
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc.vim'
NeoBundle 'Shougo/unite.vim', {'depends': 'Shougo/vimproc.vim'}
NeoBundle 'osyo-manga/unite-quickfix', {'depends': 'Shougo/unite.vim'}
NeoBundle 'thinca/vim-quickrun', { 'depends': 'osyo-manga/shabadou.vim'}
call neobundle#end()
filetype plugin indent on

call unite#custom#profile('default', 'context', {
      \ 'start_insert': 1,
      \ })

let g:quickrun_config = {
      \ '_': {
      \   'hook/time/enable': 0,
      \   'hook/close_unite_quickfix/enable_hook_loaded': 1,
      \   'hook/unite_quickfix/enable_failure': 1,
      \   'hook/close_quickfix/enable_exit': 1,
      \   'hook/close_buffer/enable_empty_data': 1,
      \   'hook/close_buffer/enable_failure': 1,
      \   'outputter': 'multi:buffer:quickfix',
      \   'outputter/buffer/close_on_empty': 1,
      \   'runmode': 'async:remote:vimproc',
      \   'runner': 'vimproc',
      \ },
      \ }
osyo-manga commented 10 years ago

こちらで試してみましたが特に問題はないように感じました。 再現手順がよくわかっていないので、vim を起動してから意図しない動作になるまでの手順を箇条書きにして提示してもらえると助かります。

NigoroJr commented 10 years ago

焦ってしまい、すみません。以下の手順で再現できるかと思います。

  1. 次のコードをhoge.cppとして保存します。

    #include <iostream>
    
    int main() {
       std::cout << "hoge" << std::ndl;
       return 0;
    }
  2. 上記設定をvimrc_testとして保存した場合、vim -u vimrc_test hoge.cpphoge.cppを開きます。
  3. :QuickRun(引数なし)を実行するとエラーが出てunite-quickfixが表示されるので、aとタイプします
  4. プロンプトにzb0laと表示されます。

他のコードでも試してみたところ、hoge.cppの内容によって起こったり起こらなかったりするみたいです。#include <iostream>がないときはうまくいくみたい(?)です。

osyo-manga commented 10 years ago

焦ってしまい、すみません。以下の手順で再現できるかと思います。

ありがとうございます。こちらでも再現しました。

NigoroJr commented 10 years ago

よかったです。quickrunの設定が十分に理解できていないので、自分の設定ミスなのかバグなのか分からないのに、Issueのタイトルでエンターを打ってしまってびっくりしました…

これはunite-quickfixによるものでしょうか?

osyo-manga commented 10 years ago

これはunite-quickfixによるものでしょうか?

うーん、なんとも言えないですね。 多分 untie.vim 側の問題なんじゃないかとは思うんですが。

osyo-manga commented 10 years ago

こちらでも少し調べてみます。

NigoroJr commented 10 years ago

なるほど、今のところは'runner': 'vimproc'を外せば直るみたいなので、それで対処しています。

こちらでも少し調べてみます。

度々お手数おかけします、ありがとうございます。

osyo-manga commented 10 years ago

ちなみに根本的な解決にはならないですが g:quickrun_config

"hook/unite_quickfix/no_focus" : 1,

を追加することでも回避は可能ですが(この場合、quickrun が終了しても unite-quickfix にカーソルが移動しない。

Shougo commented 10 years ago

こんにちは。うーん、このままだとこちらで問題を特定することが難しいのでもうちょっと調べてもらったほうが良いですね。できれば、unite.vim だけで問題が再現できるとベターです。

NigoroJr commented 10 years ago

@Shougo 了解しました、色々試してみます。

osyo-manga commented 10 years ago

@Shougo まだ再現方法は絞り込んでいないのですがこの箇所をコメントアウトすると再現しなくなりました。

Shougo commented 10 years ago

その行は必要です。それは何かというと、カーソル位置がプロンプトから外れた時にカーソルをプロンプトに戻す部分です。

プロンプトにzb0laと表示されます。

そもそも、これが実行されるのがおかしいですね。やはり quickrun の unite-quickfix との連携処理がまずいのでしょう。 変な API 呼んでませんか

osyo-manga commented 10 years ago

変な API 呼んでませんか

うーん、特に変なことをやっているつもりはないですが…。 ちなみに untie.vim を起動している処理はこのあたりになります。

osyo-manga commented 10 years ago

unite-quickfix 以外でも再現しました。 以下の vimrc でも再現すると思います。

set runtimepath+=~/.vim/bundle/neobundle.vim
if has('vim_starting')
    set nocompatible
endif
filetype off
filetype plugin indent off     " required!

call neobundle#begin(expand($HOME."/neobundle"))

NeoBundle 'Shougo/vimproc.vim'
NeoBundle 'Shougo/unite.vim', {'depends': 'Shougo/vimproc.vim'}
NeoBundle 'thinca/vim-quickrun', { 'depends': 'osyo-manga/shabadou.vim'}

call neobundle#end()
filetype plugin indent on

call unite#custom#profile('default', 'context', {
      \ 'start_insert': 1,
      \ })

let g:quickrun_config = {
      \ '_': {
      \   'runner': 'vimproc',
      \ },
\ }

let s:hook = {
\   "name" : "test",
\   "kind" : "hook",
\   "config" : {
\       "enable" : 1,
\   }
\}

function! s:hook.on_exit(...)
    Unite file
endfunction

call quickrun#module#register(s:hook, 1)
unlet s:hook

set updatetime=500
NigoroJr commented 10 years ago

@osyo-manga こちらでも再現しました。

はじめにこのIssueを閉じたままだったので、もう一回開きますね。

Shougo commented 10 years ago

@osyo-manga 分かりました。こちらで再現させてみます。

Shougo commented 10 years ago

こちらでやってみたところ、一度しか再現しませんでした。 タイミングによるようで、これが unite.vim の問題なのかは微妙です。 一応対策してみましたが、こちらでこれ以上の調査も困難なので、サポート不能ということにします。

osyo-manga commented 10 years ago

@Shougo @NigoroJr さんが提示している C++ のソースコードではなくて、次の ruby のソースコードで試してもらえないでしょうか

sleep 3
Shougo commented 10 years ago

@osyo-manga まず、unite.vim 最新版ではどうですか。ちょっとそれを試してください。

osyo-manga commented 10 years ago

@Shougo unite.vim を更新して試してみましたがやはり再現しました。

Shougo commented 10 years ago

start_insertとg:quickrun_configを以下のように設定し、エラーがあるコードで:QuickRunすると、--INSERT--となるはずのステータスバーが-- --となります。また、i, a, I, Aのいずれかを打つとプロンプトにzb0la>と文字か挿入されます。

私が気になっているのはこれで、モードがおかしな状態(InsertNormal?)になっているようなのですよね。 Vim scriptで一番難しいのはインサートモードとノーマルモードの状態の混在で、こういうものはサポートが難しいのです。

Shougo commented 10 years ago

再現しました。

原因もおそらく分かりました。quickrunがCTRL-Oモードでunite.vimを呼んでいます。 その状態は未定義なので、CTRL-Oからunite.vimを呼ばないでください。 CTRL-Oではコマンドを入力した後インサートモードに戻ってしまうので、プロンプトがおかしくなってしまうようです。

Shougo commented 10 years ago

unite.vim側で一応対処できたので対処しました。unite.vimを更新してください。

osyo-manga commented 10 years ago

unite.vim側で一応対処できたので対処しました。unite.vimを更新してください。

試してみました。 zb0la が入力される不具合は改善されているようです。 ただ、insert ではなくて normal モードのままなのは以前と同じ挙動ですね。 あと今回対応された影響かわかりませんが、一度 insert に入ってから以下の画像の位置で i を押しても insert に入らなくなりました。

Shougo commented 10 years ago

ただ、insert ではなくて normal モードのままなのは以前と同じ挙動ですね。

その辺りはそもそもモード状態がおかしくなっているのでどうしようもないです。

あと今回対応された影響かわかりませんが、一度 insert に入ってから以下の画像の位置で i を押しても insert に入らなくなりました。

これは直しました。

osyo-manga commented 10 years ago

その辺りはそもそもモード状態がおかしくなっているのでどうしようもないです。

把握しました。

これは直しました。

こちらでも動作することを確認しました。

osyo-manga commented 10 years ago

ふと思ったんですが、unite.vim の起動を

call feedkeys(":Unite file\<CR>")

すればよかったりする…?

Shougo commented 10 years ago

hook の最中には呼ばれないのでマシになりそうですが、feedkeys()もタイミングによってはうまく処理できないことがあります。例えば neocomplete で Plug マッピングが入力されることがあるように。

osyo-manga commented 10 years ago

hook の最中には呼ばれないのでマシになりそうですが、feedkeys()もタイミングによってはうまく処理できないことがあります。

まぁそれはありますね。insert から呼ばれる可能性もありますし。

NigoroJr commented 10 years ago

全然参加できなくてすみません。

これは直しました。

こちらも問題なさそうです。ありがとうございます。

解決したようですので、このIssueは閉じます。お二人とも、お忙しい中対応ありがとうございました。