vimrc检测远程连接

时间:2013-04-04 10:35:00

标签: regex vim ssh remote-access

目前我必须硬编码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用于许多不同的远程计算机,它仍然绑定到一个客户端。我希望条件在所有远程会话中工作,无论客户端名称如何。所以我想知道,这可能吗?

2 个答案:

答案 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...

我发现这比在中心位置维护不断变化的主机名列表更具可扩展性。