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)
这里发生的事情是:
~/.config/nvim/init.vim
的内容已被 grep 从评论中删除。
- 然后以
autcmd
开头的每一行都换行在 execute "<line>"
中
- 这被收集到一个字符串中
- 字符串被放入
LC_VIMINIT
环境变量(任何 LC_* 环境变量都可以通过 ssh 发送)。
由于设置 SendEnv LC_VIMINIT
.,LC_VIMINIT
在连接到主机时通过 ssh 发送
- 连接到主机后,由于
RemoteCommand export VIMINIT=$LC_VIMINIT
. ,变量 VIMINIT
被 LC_VIMINIT
的内容填充
所以我试图通过 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)
这里发生的事情是:
~/.config/nvim/init.vim
的内容已被 grep 从评论中删除。- 然后以
autcmd
开头的每一行都换行在execute "<line>"
中
- 这被收集到一个字符串中
- 字符串被放入
LC_VIMINIT
环境变量(任何 LC_* 环境变量都可以通过 ssh 发送)。
由于设置 LC_VIMINIT
在连接到主机时通过 ssh 发送- 连接到主机后,由于
RemoteCommand export VIMINIT=$LC_VIMINIT
. ,变量
SendEnv LC_VIMINIT
.,VIMINIT
被 LC_VIMINIT
的内容填充