neovim使用VIMINIT在ssh上移动配置几乎可以工作

问题描述

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

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

我在这里要做的是通过ssh发送环境变量LC_VIMINIT的内容,并将其内容移动到VIMINIT环境变量中。

为了填充LC_VIMINIT的内容,我在fish.config(鱼壳)中添加了以下内容

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忽略其内容的换行符?

也许更有经验的人可以启发我?

解决方法

在您的.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($1~/autocmd/){ print "execute \""$0"\""} else {print $0}}' | string collect) 

这里发生的是:

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

我认为您将无法做自己想做的事。我的Vim副本说的是这样:

$ VIMINIT的值用作Ex命令行。

请注意文章“一个”。在我阅读本文时,您可能会传递单个命令行,而不是用换行符分隔的多个Ex命令行。

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

我也不认为您可以同时获得一个Shell并执行一个RemoteCommand,即使可以,RemoteCommand也可能会在一个单独的非交互执行中外壳。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...