Skip to content

Instantly share code, notes, and snippets.

@thinca
Created August 22, 2012 02:14
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinca/3421512 to your computer and use it in GitHub Desktop.
Save thinca/3421512 to your computer and use it in GitHub Desktop.
neobundle command
#!/bin/sh
if [ -z "$1" ]; then
echo Usage: $0 {config-file}
exit
fi
vim -N -u NONE -i NONE -V1 -e -s --cmd "source $1" --cmd NeoBundleInstall! --cmd qall!
@if "%1" == "" (
echo Usage: %0 {config-file}
exit
)
@vim -N -u NONE -i NONE -V1 -e -s --cmd "source %1" --cmd NeoBundleInstall! --cmd qall!
" neobundle コマンドに渡すファイルのサンプル
" vimrc から source することで共通で使える
set runtimepath^=~/.vim/bundle/neobundle.vim
call neobundle#rc(expand('~/.vim/bundle'))
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neocomplcache-snippets-complete'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/vimproc', {
\ 'build' : {
\ 'windows' : 'echo "Sorry, cannot update vimproc binary file in Windows."',
\ 'cygwin' : 'make -f make_cygwin.mak',
\ 'mac' : 'make -f make_mac.mak',
\ 'unix' : 'make -f make_unix.mak',
\ },
\ }
NeoBundle 'Shougo/vimfiler'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vinarise'
" ...
@thinca
Copy link
Author

thinca commented Aug 22, 2012

問題点

  • -e -s の際に 'verbose' を1以上にしておくと :echo などが標準エラー出力に出るのを利用して -V1 を指定しているが、これだと関係ないエラーも出てしまう。
    • ちゃんとやるなら、内部的にスクリプトモードなどを(変数などによって)認識して、メッセージ吐くときだけ :set verbose=1 などとする。
  • 即座に終了するため、エラーが出ても確認できない。
    • ログをファイルに出せるようにできないか。
    • 更新日時や更新前後のリビジョンをログに出すようにすると普段からでも有用なはず。
  • 一番最後の出力に改行が入ってなくて気持ち悪い。
    • zsh とかだと最後に % とか出してくれるけど、多分 bash とかだと出力の右側にプロンプトが出ちゃう。
    • 最後に空の :echo '' が必要?

@thinca
Copy link
Author

thinca commented Aug 22, 2012

その他

  • 引数に毎度 bundle ファイルを渡すの面倒。
    • 各自 wrapper スクリプトを用意する、くらいしか思い付かない。
    • bundle ファイルの標準推奨位置などがあれば (例: ~/.vim/bundle.vim)、それをデフォルト値にすることも可能。だが、標準の位置の存在自体が若干微妙な気もする。
  • 個別に更新したい場合どうするか。
    • neobundle ~/.vim/bundle.vim unite.vim とかできると嬉しいが…。
    • スクリプトファイルが複雑になってもいいなら頑張ればできそう。
    • ただ、.bat もあるのであまり複雑にはしたくない。

@Shougo
Copy link

Shougo commented Aug 23, 2012

方向性としてはありですが、まだいろいろ未完成なので標準で取り込むわけには行きません。
まずはドキュメントの用意をお願いします。READMEとdoc/neobundle.txt内で解説する必要があります。
gistで開発を進めるのは大変でしょうから、neobundleをforkしてみてはどうですか。

-e -s の際に 'verbose' を1以上にしておくと :echo などが標準エラー出力に出るのを利用して -V1 を指定しているが、これだと関係ないエラーも出てしまう。

ちゃんとやるなら、内部的にスクリプトモードなどを(変数などによって)認識して、メッセージ吐くときだけ :set verbose=1 などとする。

このあたりの実装はthincaさんの側でお願いします。

即座に終了するため、エラーが出ても確認できない。
ログをファイルに出せるようにできないか。
更新日時や更新前後のリビジョンをログに出すようにすると普段からでも有用なはず。

この実装については、neobundle本体側でやろうと思います。
ただ、どういった実装にするかは検討中です。

一番最後の出力に改行が入ってなくて気持ち悪い。
zsh とかだと最後に % とか出してくれるけど、多分 bash とかだと出力の右側にプロンプトが出ちゃう。
最後に空の :echo '' が必要?

これはthincaさんの側でお願いします。

引数に毎度 bundle ファイルを渡すの面倒。
各自 wrapper スクリプトを用意する、くらいしか思い付かない。
bundle ファイルの標準推奨位置などがあれば (例: ~/.vim/bundle.vim)、それをデフォルト値にすることも可能。だが、標準の位置の存在自体が若干微妙な気もする。

私は .vimrc をそのまま読みこませれば十分だと思います。インストールされていないスクリプトをチェックして、:finishすればよいのです。
そのあたりはdoc/neobundle.txtにサンプルがあります。

個別に更新したい場合どうするか。
neobundle ~/.vim/bundle.vim unite.vim とかできると嬉しいが…。
スクリプトファイルが複雑になってもいいなら頑張ればできそう。
ただ、.bat もあるのであまり複雑にはしたくない。

面倒くさいので、私はそこについてはノータッチです。それが面倒だから高速化などを頑張ったので。

@Shougo
Copy link

Shougo commented Aug 23, 2012

ちなみに、Diffの部分はすでに取り込んで有ります。

@Shougo
Copy link

Shougo commented Aug 23, 2012

Update時に、更新日時を出すようにしました。ただし、gitのみ。他のVCSはリビジョン番号しか出ません。

@Shougo
Copy link

Shougo commented Aug 23, 2012

即座に終了するため、エラーが出ても確認できない。
ログをファイルに出せるようにできないか。

実装しました。g:neobundle_log_filename です。

@thinca
Copy link
Author

thinca commented Aug 29, 2012

問題点追記。<C-c> などで強制終了すると Vim の Ex モードで復帰してしまう。終了するには :q 。わかっていれば対処は簡単だが結構アレ。

@thinca
Copy link
Author

thinca commented Aug 29, 2012

ちなみに更新日時というのはプラグインのリポジトリ上での更新日時ではなくってユーザが操作した日時って意味のつもりでした。この際こだわりませんが。

@soramugi
Copy link

soramugi commented Dec 2, 2013

問題点追記。 などで強制終了すると Vim の Ex モードで復帰してしまう。終了するには :q 。わかっていれば対処は簡単だが結構アレ。

自分はtry使って対処してみました

#!/bin/bash
vim \
-N -u NONE -i NONE -V1 -e -s \
--cmd "source ~/.vimrc" \
--cmd "
try
  NeoBundleInstall!
catch
  qall!
endtry" \
--cmd qall!
echo ''

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