linux - 删除当前目录下所有VIM临时文件的正确命令是什么?
PHP中文网
PHP中文网 2017-04-17 11:34:43
0
4
1101

在使用VIM的过程中,会产生大量以波浪线(~)结尾的VIM临时文件,请问有没有一条删除所有VIM临时文件的命令?

rm *.*~

好像可以,不知道会产生不良后果吗?总感觉不是很安全

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(4)
大家讲道理
  set nobackup
  set undodir=~/.undodir

都用git或icloud dropbox之類的雲端備份了,實在沒看到什麼vim備份檔的必要,那個檔案還會影響grep,太不方便了。

阿神

我有一個專門的腳本來處理 Vim 的備份檔。依賴 Python 3 和 mlocate。會刪除兩種情況下的備份檔案:原始檔案已經很久沒修改過了;原始檔案已經不存在了。

不建議停用備份功能,雖然現在有持久性撒消,但是資料多個備份總是會更安全。

還是把程式碼在這裡貼一份:

#!/usr/bin/env python3
# fileencoding=utf-8

'''从列表中读取备份文件(*~)列表,并检测原文件是否存在;若不存在则删之'''

import sys, os
import subprocess
import datetime

if len(sys.argv) == 1:
  db = None
elif len(sys.argv) == 2:
  db = sys.argv[1]
else:
  sys.exit('argument error')

if db:
  f = subprocess.getoutput("locate -d '%s' -e -b '*~' 2> /dev/null" % db).split('\n')
else:
  f = subprocess.getoutput("locate -e -b '*~' 2> /dev/null").split('\n')

def filter(i):
  if not os.path.isfile(i[:-1]):
    return True
  try:
    atime = datetime.datetime.fromtimestamp(os.stat(i).st_atime)
  except FileNotFoundError:
    return False
  now = datetime.datetime.today()
  interval = datetime.timedelta(days=30)
  if now - atime > interval:
    return True
  return False

for i in f:
  if i.endswith('~') and os.access(os.path.split(i)[0], os.W_OK):
    if filter(i):
      try:
        print("删除", i)
        try:
            os.unlink(i)
        except FileNotFoundError:
            print(i, '在被删除前消失了:-(')
        # print(i)
      except:
        print(i+': error'+repr(sys.exc_info()), file=sys.stderr)
左手右手慢动作
$vim ~/.vimrc

加入

set nobackup

試試好用不

阿神

這樣刪你躲不開:

  1. 檔名以-開始(會被誤認為參數)(這是一個經典的坑)
  2. 檔名不含.

正確的指令是rm -f -- *~

以上只解答本問題的表象(Y題)。對於對付vim的臨時文件的本質目標(X問題),也請以 @依雲 為代表的本站更多vim高手做解答

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板