问题描述
所以我试图将我的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)
这里发生的是:
- grep从其注释中删除了
~/.config/nvim/init.vim
的内容。 - 然后,以
autcmd
开头的每一行都被包裹在execute "<line>"
中
- 这被收集到一个字符串中
- 将字符串放入
LC_VIMINIT
环境变量中(任何LC_ *环境变量都可以通过ssh发送)。
由于设置 -
SendEnv LC_VIMINIT
通过ssh发送。 - 由于
VIMINIT
,连接到主机后变量LC_VIMINIT
充满了RemoteCommand export VIMINIT=$LC_VIMINIT
的内容。
LC_VIMINIT
,连接到主机时我认为您将无法做自己想做的事。我的Vim副本说的是这样:
$ VIMINIT的值用作Ex命令行。
请注意文章“一个”。在我阅读本文时,您可能会传递单个命令行,而不是用换行符分隔的多个Ex命令行。
您当然可以尝试将它们与|
连接起来,但这不适用于某些Ex命令。
我也不认为您可以同时获得一个Shell并执行一个RemoteCommand
,即使可以,RemoteCommand
也可能会在一个单独的非交互执行中外壳。
大多数人只是创建一个Git存储库并以这种方式同步其点文件,这既简单又优雅。当然,如果您要使用很多机器,那将很不方便,但是由于我拥有自定义的配色方案和各种其他插件,因此在这种情况下,我只需要使用默认设置即可。