2

目前我必须在我的 vimrc 上硬编码服务器的名称,以使其在远程机器上有所不同。这是通过使用hostname()vim 中的函数的条件语句来完成的。我想让条件基于远程连接的状态而不是主机名。所以...

我发现的第一个可能的解决方案是使用以下 bash 命令system()

cat /proc/$PPID/status | head -1 | cut -f2

这不起作用,因为我使用 GNU screen,这将无法正确检测我的连接状态。

我现在正在探索的第二种可能的解决方案是使用who am iThis 可靠地显示远程连接是否已从哪个客户端进行,但我无法使用它system()

if substitute(system('who am i'), "theclient", ????, "") == ""
     ...

我怎么能????以某种方式提取我的客户名称?

即使第二种解决方案有效,允许我将 .vimrc 用于许多不同的远程机器,它仍然绑定到一个客户端。无论客户端名称如何,我都希望条件在所有远程会话中都有效。所以我想知道,这可能吗?

4

2 回答 2

3

以下行允许我创建一个检测远程连接状态的变量:

let g:remoteSession = ($STY == "")

现在,您可以通过以下方式将要在远程连接中忽略的行包围起来:

if g:remoteSession
    ...
endif

附带说明一下,与全局变量相比,我不知道查找环境变量的成本有多高,但我猜测差异可以忽略不计。像cygwin这样低效的环境中的系统调用,fork()值得做优化。

于 2013-04-24T09:14:50.440 回答
2

除了将条件逻辑添加到 shared 之外~/.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...

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

于 2013-04-04T10:58:40.337 回答