【问题标题】:how to clear the screen after exit vim退出vim后如何清屏
【发布时间】:2015-07-23 18:31:50
【问题描述】:

有时vim会在终端上留下一些东西,即按任意键继续,退出vim后有什么方法可以返回到清晰的终端? 我是 vim 新手,请告诉我我应该做什么。

抱歉,我第一次表达的想法不够清楚。我真正想问的是,有没有一种方法可以在 vim 中键入 :q 后返回一个清晰的终端,而无需进一步输入命令。 我在 Ubuntu 中使用 VIM 7.4,终端类型是 xterm。

【问题讨论】:

  • vim 通常不应该那样做——但即使那样做,又有什么坏处呢?
  • 请说明您使用的平台和终端。
  • Ubuntu上的VIM 7.4,终端类型是xterm

标签: vim


【解决方案1】:

添加到你的 ~/.vimrc:

au VimLeave * :!clear

【讨论】:

    【解决方案2】:

    我使用别名来清除任何退出方法,包括:q:wqa。 (这是我的 osx brewed 二进制文件,用 which vim 找到你自己的 vim 二进制文件)

    # .zshrc
    alias vim="/usr/local/Cellar/vim/8.0.0094/bin/vim && clear"
    

    【讨论】:

    • 如此简单,如此强大,却如此被低估:)
    • 这个解决方案有点工作,但不是很好,因为它阻止将参数传递给 vim 并且 clear 实际上并没有清除回滚缓冲区,除非定义了 E3 功能(它不是在标准 Ubuntu 上的 bash 中)。
    • 我同意,我也发现它也缺少它,并且没有找到我真正满意的解决方案
    • 我 100% 受到了这个答案的启发,但是为了解决这个答案上的 cmets:将以下行添加到您的 .bashrcfunction vim { vim "$@" && clear; } 这可以让您将参数传递给 vim但也会在vim 以任何方式退出后清除终端屏幕。如果这不适用于zshxterm,我深表歉意!
    【解决方案3】:

    有一种方法可以通过编辑您的.vimrc 文件来做更多的事情

    将此添加到您的 .vimrc 中

    command Qc :call ClearAndExit()
    function ClearAndExit()
        :!clear
        :q!
    endfunction
    

    使用:Qc退出....它也会清除屏幕

    【讨论】:

    • 在此之前只需在您的终端上 export TERM=xterm 并尝试相同的操作
    • 这是我得到信息的链接。来自unix.stackexchange.com/questions/60499/…
    • 我也修改了.vimrc的答案
    • 你尝试了哪一个? .vimrc 或更改 TERM ?
    【解决方案4】:

    如果 Vim 编译时支持切换 xterm-screens,它可以默认执行此操作,如果您设置 t_tit_te(Vim 通常会计算出需要自行设置的值) .血淋淋的细节在:h xterm-screens(粘贴在下面)进行了解释

    (来自 comp.editors,由 Juergen Weigert 回答问题)

    :> 另一个问题是退出vim后,屏幕仍然是 它 :> 是,即我正在查看(编辑)的文件的内容是 留在 :> 屏幕上。我之前的“ls”输出是 丢失,:> 即。不再在滚动缓冲区中。我知道有一个 方法:>退出vim或其他vi后恢复屏幕 编辑,:> 我只是不知道怎么做。帮助表示赞赏。谢谢。 : :我 想象一下其他人可以回答这个问题。我认为虽然 vim 和 vi do : 对于给定的 xterm 设置,彼此做同样的事情。

    他们不一定会做同样的事情,因为这可能是一个 termcap vs. 术语信息问题。您应该知道有两个数据库 用于描述特定类型终端的属性:termcap 和术语信息。当条目不同时,这可能会导致差异 当有问题的程序中一个使用 terminfo 而另一个使用 termcap(另见 +terminfo)。

    在您的特定问题中,您正在寻找控制序列 ^[[?47h 和 ^[[?47l。这些在 xterms 交替和主要之间切换 屏幕缓冲区。作为一种快速解决方法,命令序列如 回声 -n "^[[?47h"; vim ... ; echo -n "^[[?47l" 可以做你想做的事。 (我的符号 ^[ 表示 ESC 字符,再往下你会 看到数据库使用 \E 代替)。

    在启动时,vim 会回显 termcap 变量 ti (terminfo: smcup) 到终端。退出时,它会回显 te (terminfo: rmcup)。 因此,这两个变量是上述的正确位置 提到的控制序列应该去。

    将您的 xterm termcap 条目(位于 /etc/termcap)与您的比较 xterm terminfo 条目(使用“infocmp -C xterm”检索)。两者都应该 包含类似于以下内容的条目: :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:

    PS:如果您发现任何不同之处,应该有人(您的系统管理员?)更好 查看 完整的 termcap 和 terminfo 数据库以确保一致性。

    注意 1: 如果你重新编译 Vim 并定义了 FEAT_XTERM_SAVE feature.h,内置 xterm 将包括提到的“te”和“ti” 条目。

    注意 2:如果您想禁用屏幕切换,并且您不 想要更改您的 termcap,您可以将这些行添加到您的 .vimrc 中: :set t_ti= t_te=

    【讨论】:

      【解决方案5】:

      是的。你当然可以。

      使用 UNIX 命令清除屏幕。 clear

      【讨论】:

      • 或者在 shell 提示符下输入 Control-L。
      • 抱歉,我的想法表达得不够清楚。我真正想问的是,有没有一种方法可以在 vim 中输入 :q 后返回一个清晰的终端,而无需进一步输入命令。
      【解决方案6】:

      我不想通过 manoj 使用不同的命令来退出 Vim(例如 :Qcsuggested),而 EntangledLoops 的 .vimrc method 对我不起作用。

      受柏拉图answer的启发,我找到了类似的解决方案,将以下函数放入.bashrc

      # Vim exits to clear terminal screen
      function vim {
         /usr/bin/env vim "$@" && clear
      }
      

      在函数内部只使用vim会出现问题,因为函数会递归调用自身并创建无限循环,但添加/usr/bin/env会消除此问题,忽略该函数并执行PATH中的第一个vim .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 2016-01-27
        • 2019-01-16
        • 2022-11-29
        • 2021-11-29
        相关资源
        最近更新 更多