我的朋友几天前在Emacs上给我展示了一个很酷的技巧,他可以在远程服务器上打开文件,而我立刻想到“也应该在vim中这样做”,这是事实。

我可以使用:e scp://user@server//filepath来做到这一点,没问题;)。但是,他可以只键入服务器名称,然后完成文件路径和名称(带有选项卡),而这是我无法做到的。有人知道这是否可以在vim中完成吗?

评论

尽管ctrlp可能会支持它……但显然这是一项功能请求。

#1 楼

是的,但是目前(2015年)不是开箱即用的,因为vim的内置文件管理器本身不支持远程浏览。 。

更新Q3 @ 2016:

有几种解决方法,它们在舒适性/兼容性/努力程度上各不相同。它们在一起构成一个很好的解决方案,但它们也可以单独使用:



在您的shell初始化文件中设置用户级afuse / sshfs守护程序

几行脚本来自例如.profile,您可以在以下目录下设置按需自动安装器~/scp/。有关此集成的详细信息,请参见Unix&Linux SE。这是最舒适的选择,远程文件“出现”在本地,但是需要afusesshfs可供您使用。


为远程文件路径设置shell命令行完成

bash的完成功能包具有为sshscp完成而设计的一些功能。通过包装函数vim(),将远程路径整理成vim的预期形式,可以将它们用于将TAB完成的远程文件提供给vim。此处还详细介绍了这种方法的次要缺点。对于没有侮辱的情况。需要安装bash-completion或与之等效的其他外壳。


如果您不能修改环境或仅-43:在vim文件管理器中,可以使用//?用于向前/向后搜索的键,您可以将TAB映射到其中之一。这比听起来要强大得多,它可以使您快速浏览文件系统。下面的描述。

基本解决方法(对于带有NetRW的标准vim):


不要将vim指向远程文件
指向目录“在顶部”,例如.vimrc$HOMEvim scp://files//

NetRW插件在所需的顶级文件夹中打开(vim scp://files////)。 >
要在$HOME上使用NetRW编辑远程/etc/network/interfaces,请执行以下操作: 。

甚至更好,几乎可以模仿TAB完成,请在/中添加:为TreeView配置NetRW:?


如果需要(我使用它),请为.vimrc添加一个远程VExplore开关。
我还建议为NetRW或所有缓冲区。

与“常规”制表符完成相比,以上内容有所不同,但非常舒适。

注意:以上所有内容均基于ssh证书autocmd filetype netrw noremap <buffer> <TAB> /中具有用户,端口,压缩,JumpHost(ProxyCommand的无密码连接)的设置使得只需要主机名/别名即可。 />和这里

评论


您可以通过总结链接来扩展技巧吗?如果站点出现故障或死掉,纯链接不是很有用。

–muru
15年8月10日在2:18

我认为,这或多或少是我最终的“解决方案”,直到NetRW可以本地完成。我仍然会处理其余的已知问题,但希望找到(或指出)更多的细微错误,修复和增强功能。它们将被处理/合并。感谢您的评论。

– Alex Stragies
15年8月12日在18:47