退出vim后如何清屏

问题描述 投票:0回答:6

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

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

vim xterm terminfo
6个回答
11
投票

添加到你的~/.vimrc:

au VimLeave * :!clear

4
投票

我使用别名来清除任何退出方法,包括

:q
:wqa
。 (这是我的 osx 编译的二进制文件,使用
which vim
找到你自己的 vim 二进制文件)

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

2
投票

有一种方法可以通过编辑您的

.vimrc
文件来完成更多事情

将其添加到您的 .vimrc

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

使用

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


1
投票

如果 Vim 编译时支持切换 xterm 屏幕,那么如果您设置

t_ti
t_te
(Vim 通常会计算出需要自行设置的值),那么默认情况下它可以执行此操作。血淋淋的细节在
:h xterm-screens
(粘贴在下面)

有解释

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

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

他们不一定做同样的事情,因为这可能是 termcap 与 termcap 的比较。 术语信息问题。您应该知道有两个数据库 用于描述特定类型终端的属性:termcap 和术语信息。当条目不同并且 相关程序何时一个使用 terminfo 而另一个使用 termcap(另请参阅+terminfo)。

在您的特定问题中,您正在寻找控制序列 ^[[?47h 和 ^[[?47l。这些在 xterms 备用和主之间切换 屏幕缓冲区。作为一种快速解决方法,命令序列如下 回声-n“^[[?47h”;维姆...; 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:如果您使用中定义的 FEAT_XTERM_SAVE 重新编译 Vim feature.h,内置 xterm 将包含提到的“te”和“ti” 条目。

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


0
投票

是的。你当然可以。

使用 UNIX 命令清除屏幕。

clear


0
投票

我不想使用 manoj 的不同命令来退出 Vim(例如

:Qc
作为 建议),而 EntangledLoops 的
.vimrc
方法 对我不起作用。

受到柏拉图答案的启发,我通过将以下函数放入

.bashrc
中找到了类似的解决方案:

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

在函数内仅使用

vim
是有问题的,因为函数递归调用自身并创建无限循环,但添加
/usr/bin/env
可以消除此问题,忽略该函数并执行
vim
中的第一个
PATH

© www.soinside.com 2019 - 2024. All rights reserved.