Closed NigoroJr closed 10 years ago
よくわからないのですがまとめると
`:QuickRun -runner vimproc` 中に『挿入モードでunite.vimを開始する』と意図しない挙動になる
という感じなのでしょうか。
start_insert
とg: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',
\ },
\ }
こちらで試してみましたが特に問題はないように感じました。 再現手順がよくわかっていないので、vim を起動してから意図しない動作になるまでの手順を箇条書きにして提示してもらえると助かります。
焦ってしまい、すみません。以下の手順で再現できるかと思います。
次のコードをhoge.cpp
として保存します。
#include <iostream>
int main() {
std::cout << "hoge" << std::ndl;
return 0;
}
vimrc_test
として保存した場合、vim -u vimrc_test hoge.cpp
でhoge.cpp
を開きます。:QuickRun
(引数なし)を実行するとエラーが出てunite-quickfixが表示されるので、a
とタイプしますzb0la
と表示されます。他のコードでも試してみたところ、hoge.cpp
の内容によって起こったり起こらなかったりするみたいです。#include <iostream>
がないときはうまくいくみたい(?)です。
焦ってしまい、すみません。以下の手順で再現できるかと思います。
ありがとうございます。こちらでも再現しました。
よかったです。quickrunの設定が十分に理解できていないので、自分の設定ミスなのかバグなのか分からないのに、Issueのタイトルでエンターを打ってしまってびっくりしました…
これはunite-quickfixによるものでしょうか?
これはunite-quickfixによるものでしょうか?
うーん、なんとも言えないですね。 多分 untie.vim 側の問題なんじゃないかとは思うんですが。
こちらでも少し調べてみます。
なるほど、今のところは'runner': 'vimproc'
を外せば直るみたいなので、それで対処しています。
こちらでも少し調べてみます。
度々お手数おかけします、ありがとうございます。
ちなみに根本的な解決にはならないですが g:quickrun_config
に
"hook/unite_quickfix/no_focus" : 1,
を追加することでも回避は可能ですが(この場合、quickrun が終了しても unite-quickfix にカーソルが移動しない。
こんにちは。うーん、このままだとこちらで問題を特定することが難しいのでもうちょっと調べてもらったほうが良いですね。できれば、unite.vim だけで問題が再現できるとベターです。
@Shougo 了解しました、色々試してみます。
@Shougo まだ再現方法は絞り込んでいないのですがこの箇所をコメントアウトすると再現しなくなりました。
その行は必要です。それは何かというと、カーソル位置がプロンプトから外れた時にカーソルをプロンプトに戻す部分です。
プロンプトにzb0laと表示されます。
そもそも、これが実行されるのがおかしいですね。やはり quickrun の unite-quickfix との連携処理がまずいのでしょう。 変な API 呼んでませんか
変な API 呼んでませんか
うーん、特に変なことをやっているつもりはないですが…。 ちなみに untie.vim を起動している処理はこのあたりになります。
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
@osyo-manga こちらでも再現しました。
はじめにこのIssueを閉じたままだったので、もう一回開きますね。
@osyo-manga 分かりました。こちらで再現させてみます。
こちらでやってみたところ、一度しか再現しませんでした。 タイミングによるようで、これが unite.vim の問題なのかは微妙です。 一応対策してみましたが、こちらでこれ以上の調査も困難なので、サポート不能ということにします。
@Shougo @NigoroJr さんが提示している C++ のソースコードではなくて、次の ruby のソースコードで試してもらえないでしょうか
sleep 3
@osyo-manga まず、unite.vim 最新版ではどうですか。ちょっとそれを試してください。
@Shougo unite.vim を更新して試してみましたがやはり再現しました。
start_insertとg:quickrun_configを以下のように設定し、エラーがあるコードで:QuickRunすると、--INSERT--となるはずのステータスバーが-- --となります。また、i, a, I, Aのいずれかを打つとプロンプトにzb0la>と文字か挿入されます。
私が気になっているのはこれで、モードがおかしな状態(InsertNormal?)になっているようなのですよね。 Vim scriptで一番難しいのはインサートモードとノーマルモードの状態の混在で、こういうものはサポートが難しいのです。
再現しました。
原因もおそらく分かりました。quickrunがCTRL-Oモードでunite.vimを呼んでいます。 その状態は未定義なので、CTRL-Oからunite.vimを呼ばないでください。 CTRL-Oではコマンドを入力した後インサートモードに戻ってしまうので、プロンプトがおかしくなってしまうようです。
unite.vim側で一応対処できたので対処しました。unite.vimを更新してください。
unite.vim側で一応対処できたので対処しました。unite.vimを更新してください。
試してみました。
zb0la
が入力される不具合は改善されているようです。
ただ、insert ではなくて normal モードのままなのは以前と同じ挙動ですね。
あと今回対応された影響かわかりませんが、一度 insert に入ってから以下の画像の位置で i
を押しても insert に入らなくなりました。
ただ、insert ではなくて normal モードのままなのは以前と同じ挙動ですね。
その辺りはそもそもモード状態がおかしくなっているのでどうしようもないです。
あと今回対応された影響かわかりませんが、一度 insert に入ってから以下の画像の位置で i を押しても insert に入らなくなりました。
これは直しました。
その辺りはそもそもモード状態がおかしくなっているのでどうしようもないです。
把握しました。
これは直しました。
こちらでも動作することを確認しました。
ふと思ったんですが、unite.vim の起動を
call feedkeys(":Unite file\<CR>")
すればよかったりする…?
hook の最中には呼ばれないのでマシになりそうですが、feedkeys()もタイミングによってはうまく処理できないことがあります。例えば neocomplete で Plug マッピングが入力されることがあるように。
hook の最中には呼ばれないのでマシになりそうですが、feedkeys()もタイミングによってはうまく処理できないことがあります。
まぁそれはありますね。insert から呼ばれる可能性もありますし。
全然参加できなくてすみません。
これは直しました。
こちらも問題なさそうです。ありがとうございます。
解決したようですので、このIssueは閉じます。お二人とも、お忙しい中対応ありがとうございました。
ごめんなさい、間違えてIssueを開いてしまいました(T_T) (あほ
以前osyo-mangaさんが書かれた記事を参照してunite-quickfixを設定したのですが、
g:quickrun_config
にて'runner': 'vimproc'
を設定した上で-start-insert
でunite.vimを開始するとプロンプトが変になりました。unite-quickfixの問題かなと思っていたのですが、:QuickRun -runner vimproc
でも同じことが起こるので違ったみたいです。報告まで。