当我使用 SSH 时如何带上 .vimrc?

Apr*_*che 37 ssh vim

我的工作往往涉及使用 SSH 连接到各种机器,然后使用 vim 编辑这些机器上的文件。问题是我必须不断地复制我的 .vimrc 文件。打开vim而且没有任何设置很烦人。是否可以将我的 vim 设置随身携带从一台机器到另一台机器,而无需在任何地方手动复制它?

Tom*_*ner 48

与其将 .vimrc 带到您需要处理的每个服务器,为什么不从本地 vim 编辑远程文件:

在 vim/gvim 中,运行:

:e scp://remoteuser@server.tld//path/to/document
Run Code Online (Sandbox Code Playgroud)

或者像这样启动 vim:

vim scp://remoteuser@server.tld//path/to/document
Run Code Online (Sandbox Code Playgroud)

这会在适当的位置无缝地打开文件(它实际上是在本地复制文件),并且在您保存时,它会将编辑过的文件发送回服务器。

它要求输入 ssh 密码,但这可以通过 ssh 密钥简化。

正如其他人所提到的,这种方法的唯一缺点是您不会像直接在机器上工作时那样获得路径/文件竞争。

有关更多信息,请查看以下教程


sun*_*256 24

我感觉到你的痛苦。我的所有 ~/.*rc 文件都在版本控制 (Subversion) 之下,自从我 1998 年开始使用 CVS 以来一直运行良好。一种方法是,当您站在主目录中时,像这样检查所有 rc 文件:

svn co svn+ssh://user@host/path/to/repo/trunk/home/user .
A    .signature
A    .vimrc
A    .bashrc
A    .screenrc
A    .psqlrc
[...]
Checked out revision 7645.
Run Code Online (Sandbox Code Playgroud)

这样,当您运行 svn update 时,配置文件也将在各种计算机上同步和更新。

  • 也许使用 git 或其他一些分布式版本控制系统。在这种情况下,访问一台已检出配置文件的机器就足够了。 (5认同)
  • 我想这是最好的。诀窍是我必须在一台机器上设置一个可以从所有其他机器访问的存储库。对于安全的网络拓扑,这并不总是那么容易。 (3认同)

chm*_*eee 18

您可以制作一个 bash 脚本以在您每次登录时自动复制它,如下所示:

#!/usr/bin/env bash

scp ~/.vimrc $1:
ssh $1
Run Code Online (Sandbox Code Playgroud)

例如,您可以将其称为 ssh_vim。这不是一个理想的解决方案,但会解决您的问题。

您可以改进它以首先检查是否已经存在。如果您不总是在同一台机器上运行 ssh,您可以更改脚本以从另一台机器上的 scp 获取文件。

编辑1

在相关说明中,您还可以使用 sshfs 挂载远程机器的文件系统。这样你就可以从你的环境和工具(不仅仅是 .vimrc)中受益,并且你有 shell 完成(你没有使用 scp://)。

编辑2

我刚刚发现您可以使用 scp:// 获取 .vimrc 文件,如下所示:

:source scp://you@your_computer//yourpath/.vimrc
Run Code Online (Sandbox Code Playgroud)

这在 vim 命令行中有效,但目前我不知道如何自动化它。它似乎不适用于 '-u' 开关,也不适用于 .vimrc 或 $VIMINIT。

编辑3

我找到了!您可以这样做以使用从您的参考主机中获取的 .vimrc 启动 vim:

vim -c ':source scp://you@your_computer//yourpath/.vimrc'
Run Code Online (Sandbox Code Playgroud)

选项 '-c' 在启动 vim 后立即执行命令。

您可以在您选择的 shell 中创建别名以避免键入。在 bash 中,它会是这样的:

alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"
Run Code Online (Sandbox Code Playgroud)

  • 这仅在您 ssh'ing * 进入 * 的计算机可以连接回您 ssh'ing * from * 的计算机时才有效。情况并非总是如此,例如,如果您的计算机位于 NAT 之后。 (2认同)

omr*_*umi 14

如果您使用公钥身份验证,您可以在您的~/.ssh/config

Host *
   PermitLocalCommand yes
   LocalCommand bash -c 'scp -P %p %d/.vimrc %u@%n: &>/dev/null &'
Run Code Online (Sandbox Code Playgroud)

我比上面建议的脚本技巧更喜欢它,因为它不会干扰ssh命令的调用(在指定额外参数等时)

  • 这是最好的。对我来说,我必须将 `%u@%n:` 更改为 `%r@%n:` 因为 ssh 用户名与我笔记本电脑的用户名不同 (2认同)