2015-11-08 55 views
1

我在vim中打開了7個文件的會話。在意外崩潰並重新加載會話後,每個文件都會給出E325: ATTENTION解釋文件比交換文件更新!我不記得這些文件是如何變得比原來的更新更新,但現在沒關係,因爲我想學習如何處理這種情況。如何輕鬆刪除放置在另一個目錄(vim)中的交換文件?

我認爲,如果交換文件沿着文件本身放置(例如.filename.swp旁邊filename),解決方案將很簡單。因爲我可以通過:!rm .%.swp刪除它。

但是我更改了交換文件的默認目錄,現在它設置爲directory=~/.vim/tmp/swp//。所以問題是如何獲得交換文件的完整路徑名。例如:

vim /home/timur/code/src/project/main.go 

E325: ATTENTION 
... 
Swap file "~/.vim/tmp/swp//%home%timur%code%src%project%main.go.swp" already exists! 
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort 

E or R 

After I opened the buffer I want to type something like this: 
:remove *swapname* 
or using a shortcut: 
<leader>rw 

我已閱讀文檔並找到顯示當前交換文件名的命令::swapname。但是看起來輸出名稱不適合將它傳遞給rm命令,因爲在交換名稱前面有額外的斜線。例如:

Actual file: 
/home/timur/.vim/tmp/swp/%home%timur%code%own%src%file 
The output of :swapname (adds odd slash before swap name) 
/home/timur/.vim/tmp/swp//%home%timur%code%own%src%file.swp 
         ^??? 

說得簡單:如何獲得直接/明確的路徑交換電流緩衝的文件?

+0

究竟是什麼問題?你想用'rm'去除文件。你知道文件的名稱和位置。我錯過了什麼? – melpomene

+0

1)即使我知道位置,我也不想輸入''/ home/timur/.vim/tmp/swp /%home%timur%code%own%src%file.swp'' 2)我不知道如何獲得交換文件的直接路徑(正如我提到':swapname'不提供文件的實際名稱)。 –

+0

1)複製/粘貼。 2)是的,它的確如此。你試過了嗎? – melpomene

回答

2

通過issue 355啓發,這裏是你的映射

nnoremap <silent> <Leader>rw :call DeleteSwapFile()<CR> 

function! DeleteSwapFile() 
     redir => s:a 
     exe ':sil sw' 
     redir end 
     let b:swapname = s:a[1:] 
     call delete(b:swapname) 
endfunction 
+0

什麼是:a'和':sil sw'? (sil =沉默,但'sw'怎麼辦)請給出一點解釋。我不喜歡「魔法代碼」) –

+0

'sw'是'swapname'的縮寫,'s:'表示[腳本變量](https://vimhelp.appspot.com/eval.txt.html#script-變量)。對不起,我認爲很容易找到它的幫助。 – ryuichiro

+0

嗯..有趣!)謝謝) –

1

如果你不介意使用一個Vim插件試圖Recover.vim插件解決問題。

當打開一個新文件時,它檢查交換文件是否已經存在。 如果是這樣給出了兩個additionals選擇:

  • [D]elete:刪除交換文件(我使用這個選項很少)
  • D(i)ff:比較文件和當前版本的恢復版本。如果它們相同,它會詢問您是否要刪除交換文件。如果它們不一樣,則打開一個vimdiff會話以便直觀比較差異。

真的一定有。

相關問題