ทำไมกลุ่มถึงบันทึกไฟล์ที่มีนามสกุล ~


180

ฉันพบว่าขณะใช้ Vim บน Windows Vim จะบันทึกไฟล์.ext.swpไฟล์ที่ถูกลบเมื่อปิดหน้าต่าง Vim และ.ext~ไฟล์

ฉันถือว่า.ext.swpไฟล์เป็นการสำรองเซสชันในกรณีที่เป็นกลุ่มเกิดปัญหา จุดประสงค์ของ.ext~ไฟล์คืออะไร นี่เป็นไฟล์สำรองถาวรหรือไม่ มันน่ารำคาญเพราะฉันต้องการคัดลอกไฟล์ทั้งหมดที่ฉันทำงานไปยังโฮสต์ของฉันโดยไม่ซ้ำกัน ฉันสามารถปิดนี้หรือถ้ามันมีเหตุผลที่ดีซ่อนไฟล์ ?


คุณมีไฟล์ใด ๆ .ext.swpที่เปิดพร้อมกันในสถานที่มากกว่าหนึ่งพวกเขาจะสร้าง
dirkgently

2
dirkgently: ไม่ที่นี่ฉันสามารถเปิดไฟล์ในหน้าต่าง vim เดียวและมันจะสร้างไฟล์. swp ฉันไม่ได้ยุ่งเกี่ยวกับเรื่องนี้มากนักเนื่องจากมันถูกลบออกเมื่อฉันบันทึก / ปิดหน้าต่าง
Ross

คำตอบ:


221

*.ext~ไฟล์เป็นไฟล์สำรองข้อมูลที่มีไฟล์ที่มันเป็นก่อนที่คุณจะแก้ไขมัน

*.ext.swpไฟล์แลกเปลี่ยนไฟล์ซึ่งทำหน้าที่เป็นแฟ้มล็อคและมีประวัติการเลิกทำ / ทำซ้ำเช่นเดียวกับอีกข้อมูลภายในที่เป็นกลุ่มความต้องการใด ๆ ในกรณีที่เกิดความผิดพลาดคุณสามารถเปิดไฟล์ของคุณใหม่และ Vim จะเรียกคืนสถานะก่อนหน้านี้จากไฟล์ swap (ซึ่งฉันพบว่ามีประโยชน์ดังนั้นฉันจึงไม่ปิดมัน)

หากต้องการปิดการสร้างไฟล์สำรองโดยอัตโนมัติให้ใช้ (ใน vimrc ของคุณ):

set nobackup
set nowritebackup

โดยที่nowritebackupการเปลี่ยนแปลงพฤติกรรม "บันทึก" เริ่มต้นของ Vim คือ:

  1. เขียนบัฟเฟอร์ไปยังไฟล์ใหม่
  2. ลบไฟล์ต้นฉบับ
  3. เปลี่ยนชื่อไฟล์ใหม่

และทำให้ Vim เขียนบัฟเฟอร์ไปยังไฟล์ต้นฉบับ (ส่งผลให้มีความเสี่ยงที่จะทำลายมันในกรณีที่เกิดข้อผิดพลาด I / O) แต่คุณสามารถป้องกันไฟล์ "กระโดด" บนเดสก์ทอป Windows กับมันซึ่งเป็นเหตุผลหลักสำหรับผมที่จะมีnowritebackupในสถานที่


7
+1 you prevent "jumping files" on the Windows desktopสำหรับ Googled และพบคำตอบนี้
Merlyn Morgan-Graham

1
ที่จริงแล้ว - ฉันต้องมีทั้งnobackupและnowritebackup? มีวิธีเขียนสำเนาของไฟล์เป็นข้อมูลสำรอง แต่ไม่เขียน / ลบ / เปลี่ยนชื่อสิ่งนี้หรือไม่
Merlyn Morgan-Graham

@ Merlyn: หากคุณมีbackup(ตรงข้ามกับnobackup) แล้ว Vim จะสร้างการสำรองข้อมูล ( *.ext~ไฟล์) nowritebackupนี้จะสมบูรณ์ไม่เกี่ยวข้องกับ
Tomalak

6
help backup-tableมีตารางการอธิบายพฤติกรรมที่แตกต่างระหว่างการรวมกันของสวิทช์นั้นคือ: มันกลับกลายเป็นว่าการตั้งค่าไม่ใช่nobackupหรือnowritebackupแต่การตั้งค่าแทนที่จะbackupcopy=yesแก้ปัญหา "การกระโดด" สิ่งนี้อาจทำร้ายผู้คนได้อย่างสมบูรณ์แบบดังนั้นสำหรับพวกเขาแต่ละคน
Merlyn Morgan-Graham

27
แทนที่จะปิดให้สำรองข้อมูลไปยังไดเรกทอรีset backupdir=~/.vim/backupใน. vimrc หรือ _vimrc บน windows
tsukimi

224

ฉันคิดว่าทางออกที่ดีกว่าคือการวางบรรทัดเหล่านี้ในไฟล์ vimrc ของคุณ

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

บรรทัดแรกใช้สำหรับไฟล์สำรองข้อมูลบรรทัดที่สองสำหรับสลับไฟล์ เครื่องหมายสแลชคู่ที่ส่วนท้ายช่วยให้มั่นใจว่าไม่มีความขัดแย้งในกรณีที่ไฟล์สองไฟล์มีชื่อเหมือนกันให้ดูความคิดเห็น (ในขณะที่แก้ไขตัวเลือกนี้จะได้รับเกียรติสำหรับไฟล์สลับเท่านั้นยังไม่ได้สำหรับไฟล์สำรอง ) การ,.อนุญาตให้vimใช้ไดเรกทอรีปัจจุบันหากไม่มีอยู่เดิม

คุณต้องสร้างไดเรกทอรีในโฮมไดเร็กตอรี่ที่ชื่อ vimtmp เพื่อให้มันใช้งานได้ ตรวจสอบด้วยว่าการสำรองข้อมูลถูกเปิดใช้งานในการกำหนดค่าของคุณ (เพิ่มset backupถ้าไม่ใช่)

ด้วยวิธีนี้คุณจะได้รับประโยชน์จากทั้งสองโลกคุณไม่จำเป็นต้องเห็นไฟล์ แต่ถ้ามีอะไรบางอย่างที่ทำให้คุณหลงไหลได้คุณสามารถไปรับไฟล์สำรองจาก vimtmp ได้ อย่าลืมล้างไดเรกทอรีออกเป็นระยะ ๆ


22
+1 จริง ๆ แล้วฉันมีการตั้งค่าของฉันเป็น ~ / .vim / tmp แต่อย่างใดนี่ได้ช่วยตูดฉันมากกว่าหนึ่งครั้ง
JC Yamokoski

11
ทำไมคุณต้องการ. ในตอนท้ายของแต่ละบรรทัด?
ชิน

9
@shin Vim จะใช้ dir ที่พร้อมใช้งานครั้งแรกดังนั้นในกรณีนี้หาก ~ / vimtmp ไม่มีอยู่มันจะใช้ไดเรกทอรีการทำงานปัจจุบัน
xixixao

3
@SalmanPK ในโลกอุดมคติคุณไม่ควรแก้ไขไฟล์กำหนดค่าโดยตรงบนเซิร์ฟเวอร์ที่สามารถเข้าถึงได้แบบสาธารณะ
Score_Under

12
ใช้เครื่องหมายทับสองด้านที่ส่วนท้ายของเส้นทาง ตัวอย่างเช่น set backupdir = ~ / .vim / .backup // - "//" ที่ส่วนท้ายของไดเรกทอรีหมายความว่าชื่อไฟล์จะถูกสร้างจากพา ธ ที่สมบูรณ์ไปยังไฟล์ที่มีตัวคั่นพา ธ ทั้งหมดแทนเปอร์เซ็นต์ "% "ลงชื่อเข้าใช้ สิ่งนี้จะช่วยให้แน่ใจว่ามีความไม่ซ้ำกันของชื่อไฟล์ในไดเรกทอรีสงวน
Hacknightly

25

หากต้องการปิดไฟล์เหล่านี้เพียงเพิ่มบรรทัดเหล่านี้ใน. vimrc (ไฟล์กำหนดค่า vim บนระบบปฏิบัติการยูนิกซ์):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files

12
:set nobackup 

จะปิดการสำรองข้อมูล คุณยังสามารถตั้งค่า backupdir หากคุณยังต้องการไฟล์สำรองเหล่านั้น แต่ในโฟลเดอร์กลาง วิธีนี้ dir ที่ทำงานของคุณจะไม่เกลื่อนไปด้วยไฟล์ ~

คุณจะพบข้อมูลเพิ่มเติมเกี่ยวกับการสำรองข้อมูลภายใต้เขาสำรอง


12

และคุณยังสามารถตั้งค่าการขยายการสำรองข้อมูลที่แตกต่างกันและการที่จะบันทึกผู้ที่สำรอง (ฉันชอบ~/.vimbackupsบนลินุกซ์) ฉันเคยใช้การสำรองข้อมูล "รุ่น" ผ่าน:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

ชุดนี้เป็นนามสกุลสำรองแบบไดนามิก ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup)


3
คุณอาจต้องการรวมถึงวิธีการตั้งค่าไดเรกทอรีสำรองเช่นใส่set backupdir=~/.vimbackupsใน ~ /
.vimrc

1
เสียงเรียกช่วยช่วยอธิบายเทคนิคนี้อย่างเต็มที่ ดู:help backupext
netjeff

8

ใส่บรรทัดนี้ในvimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


ใน นั่นคือ:

C:\Program Files (x86)\vim\_vimrc

ไฟล์สำหรับการกำหนดค่า vim ทั่วทั้งระบบสำหรับผู้ใช้ทั้งหมด

การตั้งค่าไฟล์ล่าสุดnoundofileเป็นสิ่งสำคัญใน Windows เพื่อป้องกันการสร้าง*~ไฟล์ tilda หลังจากแก้ไข


ฉันหวังว่ากลุ่มจะมีบรรทัดนั้นรวมอยู่โดยค่าเริ่มต้น ไม่มีใครชอบไดเรกทอรีที่น่าเกลียด

ให้ผู้ใช้เลือกว่าจะเปิดใช้งานคุณสมบัติการสำรองข้อมูล / เลิกทำไฟล์ขั้นสูงก่อนหรือไม่และอย่างไร

นี่เป็นส่วนที่น่ารำคาญที่สุดของ Vim

ขั้นตอนถัดไปอาจตั้งค่า:

set noeb vb t_vb= " errorbells visualbell

เพื่อปิดการใช้งานบี๊บ เช่นกัน :-)


ขอบคุณมากสำหรับเรื่องนี้! "noundofile" เป็นตัวเลือกที่ในที่สุดก็กำจัดขยะที่น่ากลัวที่สุด (และฉันเห็นด้วย 100% กับทุกสิ่งที่คุณเขียนในโพสต์ของคุณ!)
pwmusic

6

คุณถูกต้องว่า.swpไฟล์นั้นถูกใช้โดย vim เพื่อล็อคและเป็นไฟล์กู้คืน

ลองใส่set nobackupvimrc ของคุณถ้าคุณไม่ต้องการไฟล์เหล่านี้ ดูVim docsสำหรับตัวเลือกสำรองต่างๆที่เกี่ยวข้องหากคุณต้องการทั้ง scoop หรือต้องการมีไฟล์. bak แทน ...


+1 สำหรับการกล่าวถึงวัตถุประสงค์ในการล็อกไฟล์ ฉันไม่คิดอย่างนั้น
Tomalak

5

ตัวเลือกเดียวที่ใช้งานได้สำหรับฉันคือการวางบรรทัดนี้ในไฟล์ ~ / .vimrc ของฉัน

ตั้ง noundofile

ตัวเลือกอื่น ๆ ที่อ้างถึงไฟล์สำรองไม่ได้ป้องกันการสร้างไฟล์ชั่วคราวที่ลงท้ายด้วย ~ (tilde)


ในที่สุดก็ใช้งานได้สำหรับฉัน เหตุใดจึงไม่กล่าวถึงนี้ในคำตอบอื่น ๆ สิ่งนี้จะลบ.<filename>.un~ไฟล์: ในขณะที่ตัวเลือกอื่นจะลบ<filename>~ไฟล์เท่านั้น
JLT

0

ฉันต้องเพิ่มset noundofileใน ~ _gvimrc

สามารถระบุไดเรกทอรี "~" ได้ด้วยการเปลี่ยนไดเรกทอรีด้วยcd ~คำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.