2

Macbook 10.7 を持っています。私は常にターミナル ウィンドウを最大化するので、バッテリーの状態を確認したい場合は、マウスを一番上に移動するか、最大の vim ウィンドウを終了する必要があります。だから私はvimのステータスバーにバッテリーを表示したいと思います。これが私がしたことです: ファイルを作成し、それを実行可能にします。

vi /bin/battery

#!/bin/bash
ioreg -l|grep -i capacity | tr '\n' ' | '|awk '{printf("%.1f%%", $10/$5 * 100)}'

ターミナルに「battery」と入力すると、87.6% のような出力が得られます。私の質問は、VIM ステータス バーにこれを表示するにはどうすればよいですか?

わかった!Romainl と Ingo の助けに感謝します。読んでテストした後、「完璧な」解決策が得られたと思います。少なくとも私は満足しています。:P

詳細はこちら。

sudo vi /bin/battery

#!/bin/bash
/usr/sbin/ioreg -l|grep -i capacity|tr '\n' ' | '|awk '{printf("%d%%",$10/$5*100)}'>~/.battery

crontab -e
#check battery every 4 mins.
*/4 * * * * /bin/battery

バッテリースクリプトはファイルに出力します。4分ごとに実行されます(crontabによって制御されます)。残りの部分は Ingo の回答とほぼ同じです。

:let g:battery = '???'
:autocmd CursorHold * let g:battery = system('cat ~/.battery')
:set statusline+=%{g:battery}
4

3 に答える 3

2

ステータスラインは非常に頻繁に (すべての移動で!) 更新されます。これは、外部スクリプトを呼び出すにはあまりにも頻繁です。

を見て:help autocommand-events、s を使用:autocmdして Vim 変数を更新し、その変数をステータスラインに含めるだけです。適切なイベントは次CursorHoldのとおりですFocusGainedBufRead

:let g:battery = '???'
:autocmd CursorHold * let g:battery = system('/bin/battery')
:set statusline+=%{g:battery}

(および/または変数を手動で更新するためのマッピングを定義します。)

于 2012-07-09T13:49:58.463 に答える
1

あなたのスクリプトは私の MacPro では何も出力しませんが、それはやや正常だと思います (バッテリーなし)。

とにかく、これはうまくいくはずです:

:set statusline+=%{system('/bin/battery')}

ステータスラインは非常に頻繁に更新されることに注意してください。/bin/batteryおそらく 1 秒間に数十回呼び出されるでしょう。バッテリーに良くないですね!

代わりに、通知システム (たとえば、Growl を使用) を設定することを検討しましたか?

または単にカスタム マッピング:

:nnoremap <F11> :exec('echo(sytem("date"))')<CR>
于 2012-07-09T12:42:22.180 に答える
1

おそらく、cronjob を設定してバッテリー レベルをファイルに入れてから、そのファイルを vim から読み取る方がよいでしょう。

于 2012-07-09T16:04:21.897 に答える