使用
编辑远程文件 vim scp://remote/file
使用:w
保存文件会阻止编辑器,直到文件更改保存到遥控器。
我试图使用:Dispatch :write
来避免被阻止,但这不起作用(使用tmux或iterm策略)。 :Dispatch
由插件vim-dispatch提供。
相关互联网搜索结果显示:
set directory=~/.vim/swaps//; set backupdir=~/.vim/backups
解决方案很有帮助,但需要设置vcs,配置文件等。
我更喜欢
保持ssh隧道打开也没有改善它。
更新 我想知道是否有异步运行保存过程的解决方案。保存过程在这里,如netrw在命令行中显示,scp调用将临时文件复制到远程,这可能需要一些时间。我想同时回到我的编辑中,不要被阻止。我希望这会让我的问题更清楚。
tpope/dispatch的替代方案是: Shougo/vimproc,idbrii/AsyncCommand,我还没有尝试过。
答案 0 :(得分:1)
这是一个老问题,但我遇到了如何有效使用远程文件的相同问题。
我的解决方案是使用unison
动态同步文件。定义一个命令来调用vim中的同步函数。
function! s:Sync()
call system("unison -batch /home/user ssh://user@server//home/user")
endfunction
command! Sync :call <SID>Sync()
使用unison同步文件的速度非常快,以至于我没有太多动力让它以异步方式运行。
答案 1 :(得分:0)
SSHFS:我的sshfs问题是使用lightline.vim
函数的vim插件fugitive.vim
。
当您滚动(行号更改)时,状态行会经常更新,因此始终会评估显示当前分支的逃逸函数。
这大大减慢了滚动速度。从状态行中删除逃犯状态可以缓解这种情况。
还有另一个插件https://github.com/seletskiy/vim-refugi报告
git通过sshfs很慢,因为地狱。
我还为逃犯安装了这个插件并应用了他们的提示
因为这个脚本使用ssh多路复用,所以最好配置你的 ssh自动打开主连接。
E.g。你在〜/ .ssh / config中需要这个:
host *
controlmaster auto
controlpath ~/.ssh/connections/%r_%h_%p
答案 2 :(得分:0)
插件AsyncRun for vim8 / neovim
在以下维基页面上介绍了如何在保存到远程时使用此插件获取netrw:
https://github.com/skywind3000/asyncrun.vim/wiki/Get-netrw-using-asyncrun-to-save-remote-files
补丁的副本:
以下差异到$ VIMRUNTIME / autoload / netrw.vim(版本156)当您放入vimrc时与AsyncRun异步保存g:netrw_write_AsyncRun = 1:
❯ git diff netrw-156.vim netrw.vim
diff --git a/netrw-156.vim b/netrw.vim
index 76485c2..183fc96 100644
--- a/netrw-156.vim
+++ b/netrw.vim
@@ -510,6 +510,7 @@ call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
call s:NetrwInit("g:netrw_win95ftp",1)
call s:NetrwInit("g:netrw_winsize",50)
call s:NetrwInit("g:netrw_wiw",1)
+call s:NetrwInit("g:netrw_write_AsyncRun",0)
if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif
" ---------------------------------------------------------------------
" Default values for netrw's script variables: {{{2
@@ -2377,6 +2378,14 @@ fun! netrw#NetWrite(...) range
" call Decho("(netrw) Processing your write request...",'~'.expand("<slnum>"))
endif
+ " NetWrite: Perform AsyncRun Write {{{3
+ " ============================
+ if exists("g:netrw_write_AsyncRun") && g:netrw_write_AsyncRun == 1
+ let bang_cmd = 'AsyncRun -post=call\ delete('.s:ShellEscape(tmpfile,1).')\ |\ echo\ "(netrw)\ Your\ write\ request\ has\ finished." '
+ else
+ let bang_cmd ="!"
+ endif
+
".........................................
" NetWrite: (rcp) NetWrite Method #1 {{{3
if b:netrw_method == 1
@@ -2515,7 +2524,7 @@ fun! netrw#NetWrite(...) range
else
let useport= ""
endif
- call s:NetrwExe(s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".s:ShellEscape(tmpfile,1)." ".s:ShellEscape(g:netrw_machine.":".b:netrw_fname,1))
+ call s:NetrwExe(s:netrw_silentxfer.bang_cmd.g:netrw_scp_cmd.useport." ".s:ShellEscape(tmpfile,1)." ".s:ShellEscape(g:netrw_machine.":".b:netrw_fname,1))
let b:netrw_lastfile = choice
".........................................
@@ -2612,9 +2621,11 @@ fun! netrw#NetWrite(...) range
" NetWrite: Cleanup: {{{3
" call Decho("cleanup",'~'.expand("<slnum>"))
- if s:FileReadable(tmpfile)
-" call Decho("tmpfile<".tmpfile."> readable, will now delete it",'~'.expand("<slnum>"))
- call s:NetrwDelete(tmpfile)
+ if !exists("g:netrw_write_AsyncRun") || g:netrw_write_AsyncRun == 0
+ if s:FileReadable(tmpfile)
+" call Decho("tmpfile<".tmpfile."> readable, will now delete it",'~'.expand("<slnum>"))
+ call s:NetrwDelete(tmpfile)
+ endif
endif
call s:NetrwOptionRestore("w:")