{"action":"closed","issue":{"url":"https://api.github.com/repos/vim-jp/issues/issues/893","repository_url":"https://api.github.com/repos/vim-jp/issues","labels_url":"https://api.github.com/repos/vim-jp/issues/issues/893/labels{/name}","comments_url":"https://api.github.com/repos/vim-jp/issues/issues/893/comments","events_url":"https://api.github.com/repos/vim-jp/issues/issues/893/events","html_url":"https://github.com/vim-jp/issues/issues/893","id":144412176,"number":893,"title":"statuslineの%{}などでevalした際に，try-catch でVimのエラーをキャッチしていても statusline が disable されてしまう","user":{"login":"haya14busa","id":3797062,"avatar_url":"https://avatars.githubusercontent.com/u/3797062?v=3","gravatar_id":"","url":"https://api.github.com/users/haya14busa","html_url":"https://github.com/haya14busa","followers_url":"https://api.github.com/users/haya14busa/followers","following_url":"https://api.github.com/users/haya14busa/following{/other_user}","gists_url":"https://api.github.com/users/haya14busa/gists{/gist_id}","starred_url":"https://api.github.com/users/haya14busa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haya14busa/subscriptions","organizations_url":"https://api.github.com/users/haya14busa/orgs","repos_url":"https://api.github.com/users/haya14busa/repos","events_url":"https://api.github.com/users/haya14busa/events{/privacy}","received_events_url":"https://api.github.com/users/haya14busa/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":18,"created_at":"2016-03-29T22:54:34Z","updated_at":"2016-04-05T19:36:11Z","closed_at":"2016-04-05T19:36:11Z","body":"## 質問・報告の内容\r\nstatuslineの%{}などでevalした際に，try-catch でエラーをキャッチしていても statusline が disable されてしまう\r\n\r\n(キャッチされないエラーが発生したらstatuslineがdisableされるのは正しい)\r\n\r\n### 再現方法\r\n\r\n#### statusline_test.vimrc\r\n```vim\r\nset nocompatible\r\n\r\nfunction! StatuslineKiller() abort\r\n  try\r\n    \" :throw ではなく Vim のエラー(任意)を発生させる\r\n    call eval('')\r\n  catch\r\n    return 'OK: error catched!'\r\n  endtry\r\n  return 'OK'\r\nendfunction\r\n\r\nset laststatus=2\r\nset statusline=%{StatuslineKiller()}\r\n```\r\n\r\n1.  `vim -u statusline_test.vimrc -i NONE -N`\r\n  - 'OK: error catched!' がstatuslineに表示される (actual & expected)\r\n2. `:redrawstatus`\r\n  - `\" Press ENTER or type command to continue` が表示 (actual & expected)\r\n  - Enter を押す\r\n  - statusline が disable される (`&statusline == ''`)\r\n\r\n### Expected な挙動\r\n1.  `vim -u statusline_test.vimrc -i NONE -N`\r\n  - 'OK: error catched!' がstatuslineに表示される\r\n2. `:redrawstatus`\r\n  - 'OK: error catched!' がstatuslineに表示される\r\n\r\n### ~~関連問題~~\r\n- ~~actual: statuslineでVimのエラーが発生し，キャッチもされないと， silentlyにstatuslineがdisableされる~~\r\n- ~~個人的な? expected: statuslineでVimのエラーが発生すると，エラーメッセージを表示した上でstatuslineがdisableされる~~\r\n\r\n補足: statuslineがdisableされるのはstatuslineのredrawが起こるごとにエラーが出るとうっとおしいからdisableしているようです．\r\n\r\n\r\n### 修正パッチ案\r\nhttps://github.com/haya14busa/vim/commit/0cd2c2f736f8c9c4e75ec96d6b8fde53a71c6374\r\n\r\nちょっと詳しくなくて付け焼き刃の調査をしながらの修正です．\r\nなのでこれでいいのかよくわかりませんが，僕が意図した挙動になりました．\r\n\r\n\r\n\r\n## Vimのバージョン\r\n\r\n7.4.1386\r\n\r\n## OSの種類\r\n\r\n*   ArchLinux\r\n\r\nどのOSでも再現するはず\r\n\r\n#### その他\r\n- 関連 issues\r\n  - https://github.com/lambdalisue/vim-gita/pull/85#issuecomment-202053436\r\n  - https://github.com/vim-jp/vital.vim/pull/415#issuecomment-202070634\r\n\r\n両者ともログ長いし読む必要はないですが，上記issueで問題が発覚し，silentlyにstatuslineがdisableされるせいで異常にデバッグが難しかったです．\r\n\r\n問題や該当コードを見つけたのは @lambdalisue さんや [watiko](http://lingr.com/room/vim/archives/2016/03/29#message-23172726) さんです．\r\n\r\ncc @lambdalisue\r\n"}}