4

我知道我的问题标题解释性不够,所以让我试着解释一下。

我创建了一个vim function显示我当前电池状态的。我的功能如下:

function! BatteryStatus()

     let l:status = system("~/battery_status.sh")
     echo join(split(l:status))

endfunction

我已将上述函数映射为nnoremap <F3> :call BatteryStatus()<cr>. 现在,当我按下F3它时,它会显示我的电池状态,Discharging, 56%, 05:01:42 remaining这是我需要的输出,但我的问题是如何使上述输出消失。

目前发生的情况是在函数调用之后它不断显示输出,我必须手动使用:echo来清除命令窗口(:)。

因此,需要在我的函数中进行哪些必要的更改,以便我可以实现类似切换的行为。

电池状态.sh

acpi | awk -F ": " '{print $2}'

PS:这是学习练习的一部分。所以,请不要建议替代品vim scripts

4

4 回答 4

3

切换输出的简单直接方法:

let s:battery_status_output_flag = "show"

function! BatteryStatus()

    if s:battery_status_output_flag == "show"
        let l:status = system("~/battery_status.sh")
        echo join(split(l:status))
        let s:battery_status_output_flag = "clear"
    else
        echo ""
        let s:battery_status_output_flag = "show"
    endif

endfunction

注意s:前缀,见:help script-variable

于 2012-08-31T06:07:18.920 回答
2

您可以定义一个autocmd

:au CursorHold * redraw!

Vim 在空闲 4 秒后重绘自己(由updatetime选项设置)。

于 2012-08-31T00:33:16.653 回答
2
vim
function! pseudocl#render#clear()
  echon "\r\r"
  echon ''
endfunction
于 2015-11-22T12:25:37.627 回答
1

您只需Ctrl+L即可清除状态行上的消息。

于 2019-05-05T09:19:42.917 回答