【问题标题】:Why does this Vim command wipe all characters from my terminal?为什么这个 Vim 命令会清除我终端上的所有字符?
【发布时间】:2013-04-12 16:06:57
【问题描述】:

我的 .vimrc 中有这个函数,我得到了 here

function! SetExecutableBit()
  let fname = expand("%:p")
  checktime
  execute "au FileChangedShell " . fname . " :echo"
  silent !chmod a+x %
  checktime
  execute "au! FileChangedShell " . fname
endfunction
command! Xbit call SetExecutableBit()

当我运行:call SetExecutableBit() 时,它按预期工作。但是当我运行:Xbit 时,所有字符都会从我的术语中消失(但在 Gvim 中不会)。我已经在 gnome-terminal 和 urxvt 上复制了这个。如果我尝试用鼠标或ggVG 突出显示某些文本,该文本将重新出现。

“之前”截图:

运行:Xbit后的词条截图:

选择一些文本后的屏幕截图:


更新,因为--noplugin 会发生此错误,但-u NONE 不会发生,它一定是我的 .vimrc 文件中的内容:https://gist.github.com/dbb/5373175

【问题讨论】:

    标签: vim terminal


    【解决方案1】:

    这可能只是重新绘制屏幕的问题。尝试将:redraw 添加到您的函数中。如果需要,将! 附加到此命令将首先清除屏幕。

    function! SetExecutableBit()
      let fname = expand("%:p")
       ...
      execute "au! FileChangedShell " . fname
      redraw
    endfunction
    

    :h :redraw

    【讨论】:

    • 不幸的是,:redraw 似乎没有做任何事情。另外,当我直接调用函数时(即:callSetExecutableBit(),不会发生错误;只有当我运行命令:Xbit 时才会调用函数。所以即使重绘是问题所在,我也不会认为这对我有帮助。
    • @Daniel 当然不是问题,但它可能会解决问题。如果将其附加到命令定义中会怎样? :command! Xbit call SetExecutableBit() <bar> redraw
    • 对不起,我搞砸了。当我在函数末尾使用redraw! 时,它确实有效(我第一次忘记了!)。我仍然很困惑为什么它只在调用命令时发生。
    • @Daniel 不用担心,我很高兴它解决了。嗯,实际上我不能告诉你究竟是什么原因造成的,但我的经验是,它确实发生了。根据您的插件集和一般配置,您可能需要偶尔自己重绘屏幕……
    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2018-11-05
    相关资源
    最近更新 更多