8

リモートファイルを編集する

 vim scp://remote/file

でファイルを保存すると:w、ファイルの変更がリモートに保存されるまでエディターがブロックされます。

ブロックされるのを避けるために使用しようとして:Dispatch :writeいましたが、うまくいきません (tmux または iterm 戦略を使用)。プラグインvim-dispatch:Dispatchによって提供されます。

関連するインターネット検索の結果は次のとおりです。

ソリューションは役に立ちますが、vcs、構成ファイルなどのセットアップが必要です。

私は好むだろう

  • 地元で働く
  • 各ファイルの構成はありません(エディターを一度だけ構成しても問題ありません)
  • すべての書き込みをコミットする必要はありません。

ssh トンネルを開いたままにしても、改善されませんでした。

更新 保存プロセスを非同期で実行するソリューションがあるかどうかを知りたいです。ここでの保存プロセスとは、コマンドラインに netrw が表示されているように、一時ファイルをリモートにコピーするための scp 呼び出しを意味します。これには時間がかかる場合があります。それまでの間、編集に戻りたいと思います。ブロックされないようにしてください。これで私の質問が明確になることを願っています。

tpope/dispatchの代替手段は 、まだ試していないShougo/vimprocidbrii/AsyncCommandです。

4

3 に答える 3

0

vim8/neovim 用プラグイン AsyncRun

次の wiki ページで、リモートに保存するときにこのプラグインを使用して netrw を取得する方法について説明します。

https://github.com/skywind3000/asyncrun.vim/wiki/Get-netrw-using-asyncrun-to-save-remote-files

パッチのコピー:

次の $VIMRUNTIME/autoload/netrw.vim (バージョン 156) への diff は、vimrc に let g:netrw_write_AsyncRun = 1 を入れると、AsyncRun で非同期に保存されます:

❯ 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:")
于 2016-12-20T16:54:28.650 に答える