目前我必须硬编码vimrc上的服务器名称,以便在远程计算机上使其不同。这是通过在vim中使用hostname()
函数的条件语句完成的。我想使条件基于远程连接的状态而不是主机名。所以......
我找到的第一个可能的解决方案是在system()
中使用以下bash命令:
cat /proc/$PPID/status | head -1 | cut -f2
这不起作用,因为我使用GNU screen
,这不会正确检测我的连接状态。
我正在探索的第二个可能的解决方案是使用who am i
这可以可靠地显示是否已从哪个客户端进行远程连接,但我无法使用system()
if substitute(system('who am i'), "theclient", ????, "") == ""
...
我怎样才能????
以某种方式提取我的客户名称?
即使第二个解决方案有效,允许我将.vimrc用于许多不同的远程计算机,它仍然绑定到一个客户端。我希望条件在所有远程会话中工作,无论客户端名称如何。所以我想知道,这可能吗?
答案 0 :(得分:3)
以下行允许我创建一个检测远程连接状态的变量:
let g:remoteSession = ($STY == "")
现在,您可以通过以下方式围绕要在远程连接中忽略的行:
if g:remoteSession
...
endif
另一方面,我不知道查找环境变量与全局变量相比有多昂贵,但我猜测差异可以忽略不计。系统在像cygwin这样的环境中调用fork()
效率低下,值得进行优化。
答案 1 :(得分:2)
您可以选择源系统本地设置,而不是将条件逻辑添加到共享~/.vimrc
。我使用以下内容:
" Source system-specific .vimrc first.
if filereadable(expand('~/local/.vimrc'))
source ~/local/.vimrc
endif
" Stop sourcing if inclusion guard exists.
if exists('g:loaded_vimrc')
finish
endif
" Common settings of .vimrc here...
我发现这比在中心位置维护不断变化的主机名列表更具可扩展性。