2014-02-14 27 views
1

我一直使用議會有一段時間了,但主要是在本地範圍內的本地文件,我在我的.vimrc,這樣做檢查Vim正在編輯一個遠程文件或Vimscript中

inoremap kj <C-c>:w<CR> 

kj將退出插入模式以及保存文件,這有助於提高我的速度與Vim很多。

最近我開始需要使用Vim通過FTP編輯遠程文件,而且正如您必須猜到的那樣,將文件從本地緩衝區寫入遠程服務器需要更長的時間。我可以調整我的.vimrc文件,以便在退出插入模式時不保存文件,但是這種編輯來回麻煩太多了。因此,有可能用Vimscript編寫一個函數,以便我的Vim的行爲如下面的僞代碼所描述的那樣:??????????????????????????????????????????

if (Vim is editing a local file): 
    inoremap kj <C-c>:w<CR> 
else if (Vim is editing a remote file with any protocol): 
    inoremap kj <C-c> 
+0

你可以嘗試檢查'B:netrw_method'和'B:netrw_fname'? 'netrw'應該在遠程訪問文件時定義和設置它們,但目前我無法驗證。 –

+1

確保您確實需要[Ctrl-c而不是Esc](http://stackoverflow.com/questions/80677/)。另外考慮使用'updadte'而不是'write'。 – mMontu

+0

@MichaelFoukarakis不,這兩個都沒有在我的緩衝區中定義。 – alxyzc

回答

0

無論您使用NETRW或其他FTP客戶端,文件編輯下載到一個臨時位置,編輯並上傳回寫時。

您需要做的是找到臨時文件的下載位置,然後寫入autocmd

假設臨時文件的路徑爲/temp/ftpclient/121354/file.html,你可以寫這樣的:

inoremap kj <C-c>:w<CR> 
augroup quickescape 
    autocmd! 
    augroup BufRead,BufNew /temp/**/* inoremap <buffer> kj <C-c> 
augroup END 
+0

我剛把這個添加到我的'.vimrc'中,它的行爲和以前完全一樣。如果您不介意,請幫助我解決這個問題:「quickescape」是什麼意思? 「BufRead,BufNew」到底做了什麼?我知道它們是'autocmd'事件,所以我假設它意味着每當我加載以'/ tmp/**/*'形式的緩衝文件(在我的情況下是臨時文件所在的位置)將當前緩衝區的'kj'映射到?但爲什麼它不工作? – alxyzc