Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
neovim使用VIMINIT在ssh上移动配置(几乎正常工作)_Vim_Ssh_Fish_Neovim - Fatal编程技术网

neovim使用VIMINIT在ssh上移动配置(几乎正常工作)

neovim使用VIMINIT在ssh上移动配置(几乎正常工作),vim,ssh,fish,neovim,Vim,Ssh,Fish,Neovim,因此,我试图通过ssh自动移动neovim配置,我在ssh配置中使用以下技巧: Host * SendEnv LC_VIMINIT RequestTTY yes RemoteCommand export VIMINIT=$LC_VIMINIT 我在这里做的是通过ssh发送环境变量LC_VIMINIT的内容,一旦它的内容被移动到VIMINIT环境变量中 为了填充LC_VIMINIT的内容,我在fish.config(fish shell)中有以下内容 当我通过ssh连接并

因此,我试图通过ssh自动移动neovim配置,我在ssh配置中使用以下技巧:

Host *
    SendEnv LC_VIMINIT
    RequestTTY yes
    RemoteCommand export VIMINIT=$LC_VIMINIT
我在这里做的是通过ssh发送环境变量LC_VIMINIT的内容,一旦它的内容被移动到VIMINIT环境变量中

为了填充LC_VIMINIT的内容,我在fish.config(fish shell)中有以下内容

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

如果我导出VIMINIT='set number'并启动neovim,它将显示行号,并且VIMINIT已正确加载

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


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

我认为你不能做你想做的事。我的Vim副本上说:

$VIMINIT的值用作Ex命令行

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

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

我也不认为您可以获得一个shell并同时执行
RemoteCommand
,即使您可以,
RemoteCommand
也可能在一个单独的、非交互式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($1~/autocmd/){ print "execute \""$0"\""} else {print $0}}' | string collect) 

这里发生的是:

  • grep从注释中删除了
    ~/.config/nvim/init.vim
    的内容
  • 然后以
    autcmd
    开头的每一行都被包装在
    execute”“
  • 这被收集到一个字符串中
  • 字符串被放入
    LC_VIMINIT
    环境变量中(任何LC_*环境变量都可以通过ssh发送)
  • 由于设置了
    SendEnv LC_VIMINIT
    ,因此在连接到主机时通过ssh发送
    LC_VIMINIT
  • 连接到主机后,变量
    VIMINIT
    将填充
    LC_VIMINIT
    的内容,因为
    RemoteCommand export VIMINIT=$LC_VIMINIT

  • 我刚刚测试了
    VIMINIT=$'set nu\nset rnu'vim
    ,它按预期工作,同时启用了
    'number'
    'relativeEnumber'
    ,因此我认为这实际上不是问题所在……也许可以使用
    env
    命令检查环境,看看
    LC\u VIMINIT
    是否正确?您有任何sp吗vimrc中可能不容易转换为VIMINIT的特殊设置?也许可以尝试使用较小的vimrc,直到它工作,然后再添加设置,直到它崩溃?嗯…那
    env
    命令很方便^^^结果是命令
    set-gx LC_VIMINIT(cat~/.config/nvim/init.vim)
    删除我本地机器上已经存在的换行符。试试:
    set-gx LC_VIMINIT(cat~/.config/nvm/init.vim | string split0)
    …或者试试bash或zsh@filbranden,结果是cat将每一新行拆分成一个参数数组,这与bash中的情况完全相同。它与
    (cat~/.config/nvm/init.vim | string collect)一起工作
    set -gx LC_VIMINIT (cat ~/.config/nvim/init.vim | grep -P -o '^.*(?=")|^[^"]+$' | awk '{if($1~/autocmd/){ print "execute \""$0"\""} else {print $0}}' | string collect)