neovim 使用 VIMINIT 通过 ssh 移动配置(几乎可以工作)

neovim move config over ssh using VIMINIT (almost working)

所以我试图通过 ssh 自动移动我的 neovim 配置我在我的 ssh 配置中使用以下技巧来做到这一点:

Host *
    SendEnv LC_VIMINIT
    RequestTTY yes
    RemoteCommand export VIMINIT=$LC_VIMINIT

我在这里所做的是通过 ssh 发送环境变量 LC_VIMINIT 的内容,一旦它的内容被移动到 VIMINIT 环境变量中。

为了填充LC_VIMINIT的内容我在我的fish.config(鱼shell)

set -gx LC_VIMINIT (cat ~/.config/nvim/init.vim)

当我通过 ssh 连接并执行 echo $VIMINIT 时,它可以工作并包含我的 vim 配置!启动 neovim 时,我的配置未加载 :(

如果我 export VIMINIT='set number' 并启动 neovim 它会显示行号并且 VIMINIT 已正确加载。

我不确定为什么它不起作用,我目前的假设是 (cat ~/.config/nvim/init.vim) 删除了导致 neovim 忽略其内容的换行符?

也许有经验的人可以赐教?

我不认为你能做你想做的事。我的 Vim 副本是这样写的:

The value of $VIMINIT is used as an Ex command line.

注意冠词“一个”。正如我所读,您可以传递 单个 命令行,而不是多个由换行符分隔的 Ex 命令行。

当然,您可以尝试将它们与 | 连接起来,但这对某些 Ex 命令不起作用。

我也不认为你可以同时获得 shell 和执行 RemoteCommand,即使你可以,RemoteCommand 也可能会在一个单独的,non-interactive shell.

大多数人只是创建一个 Git 存储库并以这种方式同步他们的点文件,这既简单又优雅。当然,如果您使用多台机器,那会很不方便,但由于我有自定义配色方案和各种附加插件,所以在这种情况下我只处理使用默认设置。

在您的 .ssh/config 中输入以下内容:

Host *
    SendEnv LC_VIMINIT
    RequestTTY yes
    RemoteCommand export VIMINIT=$LC_VIMINIT

接下来将以下内容放入./config/fish/config.fish

set -gx LC_VIMINIT (cat ~/.config/nvim/init.vim | grep -P -o '^.*(?=")|^[^"]+$' | awk '{if(~/autocmd/){ print "execute \""[=11=]"\""} else {print [=11=]}}' | string collect) 

这里发生的事情是:

  1. ~/.config/nvim/init.vim 的内容已被 grep 从评论中删除。
  2. 然后以 autcmd 开头的每一行都换行在 execute "<line>"
  3. 这被收集到一个字符串中
  4. 字符串被放入 LC_VIMINIT 环境变量(任何 LC_* 环境变量都可以通过 ssh 发送)。
  5. 由于设置 SendEnv LC_VIMINIT.,
  6. LC_VIMINIT 在连接到主机时通过 ssh 发送
  7. 连接到主机后,由于 RemoteCommand export VIMINIT=$LC_VIMINIT.
  8. ,变量 VIMINITLC_VIMINIT 的内容填充