我使用的是Mac OS 10.13.4。
iTerm2版本是Build 2.1.1
Vim版是 VIM - Vi IMproved 8.0(2016年9月12日,2017年11月29日编译18:37:46) 包含的补丁:1-503,505-680,682-1283 由root@apple.com编译
我安装了 Vundle插件
当我使用oh-my-zsh在iTerm2中打开vim时,$ p出现在第一行。
它不会出现在Apple的Terminal.app中吗?
如何解决这个问题?
答案 0 :(得分:2)
vim假设iTerm2是xterm(不是一个好的假设),并试图通过发送包含 $p
的转义序列来确定cursorBlink
资源的状态iTerm2无法正常处理(有关转义序列的vim,请参阅source-code,以及uses the feature)。虽然vim以TERM
设置开始(即" xterm"),但它会进行一些检查以排除gnome-terminal之类的内容,如源代码注释中所述。但在这种情况下,iTerm2恰好欺骗了vim。结果就到了屏幕。
在 XTerm Control Sequences 中记录如下:
CSI ? Ps$ p
Request DEC private mode (DECRQM). For VT300 and up, reply is
CSI ? Ps; Pm$ y
where Ps is the mode number as in DECSET/DECSET, Pm is the
mode value as in the ANSI DECRQM.
Two private modes are read-only (i.e., 1 3 and 1 4 ), pro-
vided only for reporting their values using this control
sequence. They correspond to the resources cursorBlink and
cursorBlinkXOR.
虽然vim在这里被愚弄,但问题是由于iTerm2,你可能已经将TERM
环境变量设置为xterm-256color
,或类似的东西。它不能很好地匹配iTerm2的行为(功能键不匹配等)。 ncurses提供了一个更好的。但开箱即用的MacOS有一个大约十年的终端数据库,并且没有这个条目。要获得一个好的终端数据库(例如,您可以将TERM
设置为iterm2
),您可以使用MacPorts或家庭酿造。
运行infocmp以衡量(正确的) iterm2
条目与 linux
之间的差异, {{1 <}> 显示
xterm-256color
(一个Apple没有提供的Terminal.app的正确的条目)38行差异,nsterm-256color
,包含76行和linux
还有94行。iTerm2中缺少或错误实现的功能不在终端描述中:它是vim必须猜测的特殊功能。
答案 1 :(得分:2)
如上所述,该$ p是由于vim发送了用于光标闪烁请求的控制序列。在您的.vimrc中,您可以通过清除t_RC终端选项来关闭光标闪烁请求。我将其包装在一个条件中,该条件仅对256色端子关闭。
if &term =~ '256color'
set t_RC=
endif
答案 2 :(得分:0)
将终端明确设置为
export TERM=linux
为我解决了这个问题:
Future.delayed
答案 3 :(得分:-1)
p表示 打印,这是给出范围的命令,是的..它会向您显示该范围内的内容。
在 vim 中,您可以查看:help:range和:help:print ,详细了解其工作原理。 sed和其他编辑也使用这些类型的范围。
他们可能会使用教程中的 1,$术语来明确,但请注意,您也可以使用%作为其等价物。因此,%p 也会打印文件中的所有行。