คำถามติดแท็ก save

การเขียนไฟล์ไปยังสื่อเก็บข้อมูลถาวร (โดยปกติจะเป็นฮาร์ดไดรฟ์หรือ SSD) ใน Vi สิ่งนี้ทำได้ด้วยคำสั่ง: write

2
อะไรคือความแตกต่างระหว่าง: wq <cr>: x <cr> และ ZZ เมื่อออกเป็นกลุ่ม?
Vi และ Vim ทุกคนรู้มีคำพ้องความหมายมากมาย มีสามวิธีที่ฉันรู้ในการบันทึกไฟล์และออกจาก Vim และ Vi เหล่านี้คือ: WQ &lt;CR&gt; , : x &lt;CR&gt;และZZ ฉันเคยได้ยินว่าสิ่งเหล่านี้มีความแตกต่างในบางวิธี มีความแตกต่างในทางปฏิบัติระหว่างการใช้: :x&lt;cr&gt; :wq&lt;cr&gt; หรือ ZZ จะบันทึกไฟล์และออกจาก Vim และ Vi ได้อย่างไร

4
ฉันจะเปลี่ยนชื่อไฟล์ที่ฉันแก้ไขได้อย่างไร
เป็นไปได้ไหมที่จะเปลี่ยนชื่อไฟล์ที่ฉันแก้ไขจากภายใน Vim? ปัจจุบันสิ่งที่ฉันทำคือออกจากกลุ่มเปลี่ยนชื่อไฟล์และเปิดจากกลุ่มอีกครั้ง

5
ฉันจะบันทึกไฟล์ในไดเรกทอรีที่ยังไม่มีอยู่ได้อย่างไร?
สมมติว่าฉันเริ่มเป็นกลุ่มเพื่อแก้ไขไฟล์ใหม่ในไดเรกทอรีที่ยังไม่ได้สร้าง: vim nonExisitingDirectory/newFile.txt Vim จะแสดงบัฟเฟอร์ว่างให้ฉันอย่างมีความสุขและฉันสามารถเริ่มเขียนไฟล์ใหม่ของฉันได้ แต่เมื่อฉันต้องการเขียนไฟล์ลงดิสก์ฉันได้รับข้อผิดพลาดนี้: E212: Can't Open file for writing. ฉันคิดว่านี่เป็นเพราะไดเรกทอรียังไม่มีอยู่ มีวิธีบังคับให้ Vim สร้างไดเรกทอรีให้ฉันหรือไม่?
35 save  autocmd 

7
เป็นไปได้ไหมที่จะทำให้ Vim บันทึกไฟล์อัตโนมัติ?
โปรแกรมประมวลผลคำและโปรแกรมแก้ไขข้อความอัตโนมัติบันทึกไฟล์ที่เราแก้ไขเป็นระยะ ๆ ซึ่งสะดวกมากสำหรับการเอาตัวรอดจากการล่มที่น่ารังเกียจ ฯลฯ มีวิธีทำให้ Vim บันทึกไฟล์ของเราโดยอัตโนมัติหรือไม่?

2
จะบันทึกไฟล์ที่ฉันไม่มีสิทธิ์เขียนได้อย่างไร?
บางครั้งมันเกิดขึ้นที่ฉันเปิดไฟล์และทำการปรับเปลี่ยนบางอย่างในฐานะผู้ใช้ของฉันเองโดยไม่สังเกตเห็นหรือ "ลืม" เพื่อสังเกต[read-only]คำเตือนในบรรทัดสถานะ (เช่น/etcไฟล์ config แบบสุ่มบางอย่าง/etc/resolv.conf) :w!เห็นได้ชัดว่าล้มเหลวในกรณีนี้เนื่องจากผู้ใช้ของฉันไม่มีสิทธิ์ในการเขียนอยู่แล้ว ดังนั้นฉันต้อง:w /home/filenameออกและsudo mv ...อึดอัดมาก มีวิธีใดบ้างที่ฉันเลื่อนระดับชั่วคราวไปที่รูทเพื่อให้สามารถบันทึกไฟล์ที่เปิดในปัจจุบันได้ (ฉันอยู่ในsudoersหรือ / และฉันสามารถsuโดยตรง)?

3
วิธีการทำให้เป็นกลุ่มเพิ่มขึ้นบรรทัดใหม่โดยอัตโนมัติในตอนท้ายของไฟล์?
ปกติแล้วกลุ่มจะเขียน&lt;EOL&gt;สำหรับบรรทัดสุดท้ายเฉพาะเมื่อมีหนึ่งในไฟล์ต้นฉบับ วิธีที่จะทำให้เป็นกลุ่มที่จะเขียนบรรทัดใหม่ในตอนท้ายของไฟล์ตลอดเวลา (เมื่อไฟล์ที่ไม่ได้เป็นแบบไบนารีและไม่มีอยู่แล้ว) ฉันทดสอบeolตัวเลือกแล้ว แต่ใช้งานไม่ได้ตามที่คาดไว้ ดูเพิ่มเติม: รักษาจุดสิ้นสุดของบรรทัดที่หายไปที่ท้ายไฟล์ข้อความแต่ตรงกันข้าม และ: ทำไมไฟล์ควรลงท้ายด้วยการขึ้นบรรทัดใหม่

2
อย่าแตะไฟล์ขณะเขียนหากไฟล์นั้นไม่เปลี่ยนแปลง
บางครั้งฉันก็หยุดพิมพ์:wเมื่อฉันอ่านอะไรบางอย่าง สิ่งนี้ทำให้เวลาในการแก้ไขของไฟล์เปลี่ยนแปลงและบางครั้งทำให้ระบบการสร้างของฉันต้องสร้างกลุ่มของโครงการโดยไม่จำเป็น มีวิธีการตั้งค่ากลุ่มให้เป็นเพียงแค่ไม่ทำอะไรเลยถ้าฉันพยายามเขียนไฟล์และมันไม่มีการเปลี่ยนแปลง?
15 save 

2
การบันทึกอัตโนมัติเป็นกลุ่มหรือไม่?
จาก:help swap-file: การอัพเดต swapfile ไฟล์ swap จะได้รับการอัพเดตหลังจากพิมพ์ 200 ตัวอักษรหรือเมื่อคุณไม่ได้พิมพ์อะไรเลยเป็นเวลาสี่วินาที สิ่งนี้จะเกิดขึ้นหากบัฟเฟอร์มีการเปลี่ยนแปลงไม่ใช่เมื่อคุณย้ายไปมาเท่านั้น สาเหตุที่ทำให้ไม่ทันสมัยอยู่ตลอดเวลาก็คือสิ่งนี้จะทำให้การทำงานปกติช้าลงมากเกินไป คุณสามารถเปลี่ยนจำนวน 200 ตัวอักษรด้วยตัวเลือก 'updatecount' คุณสามารถตั้งเวลาด้วยตัวเลือก 'updatetime' เวลาถูกกำหนดเป็นมิลลิวินาที หลังจากเขียนไปยังไฟล์ swap Vim จะซิงค์ไฟล์กับดิสก์ ใช้เวลาพอสมควรโดยเฉพาะในระบบ Unix ที่ไม่ว่าง หากคุณไม่ต้องการสิ่งนี้คุณสามารถตั้งค่าตัวเลือก 'swapsync' เป็นสตริงว่าง ความเสี่ยงในการสูญเสียงานจะยิ่งใหญ่ขึ้น ในระบบที่ไม่ใช่ Unix (MS-DOS, Amiga) ไฟล์ swap จะไม่ถูกเขียนเลย จากนี้ฉันมีคำถามสองสามข้อ: นี่หมายความว่า Vim บันทึกการทำงานของคุณโดยอัตโนมัติเป็นครั้งคราวหรือไม่? "หลังจากเขียนไปยังไฟล์ swap Vim จะซิงค์ไฟล์ไปยังดิสก์" สิ่งนี้หมายความว่า? นี่หมายถึงไฟล์ที่ถูกเขียนลงหน่วยความจำก่อนแล้วจึงไปที่ดิสก์หรือมันเป็นอย่างอื่น? บอกว่าฉันกำลังจดบันทึกในชั้นเรียน: ฉันเขียนได้อย่างรวดเร็วและฉันไม่จำเป็นต้องออกจากโหมดแทรก แต่หลายครั้งฉันเปลี่ยนเป็นปกติเพียงเพื่อบันทึกงานของฉัน ฉันต้องทำสิ่งนี้หรือไม่หรือให้แน่ใจว่างานส่วนใหญ่ของฉันได้รับการบันทึกแม้ว่าฉันจะไม่ออกจากโหมดแทรกหรือไม่
13 save  swap-file  backup 

4
ฉันจะแก้ไขไฟล์ crontab ด้วย Vim ได้อย่างไร (ฉันได้รับข้อผิดพลาด: 'ต้องแก้ไขไฟล์ temp')
ฉันจะแก้ไขcrontabไฟล์ใน FreeBSD ได้อย่างไร $ crontab -e # ... I do my thing in vim &amp; :wq "crontab.9ZcXiFaawt" 6L, 203C written crontab: temp file must be edited in place Exit 1 ใช้EDITOR=nviงานได้ดี ... Linux ดูเหมือนว่าจะทำงานได้ดี ...
12 save  unix 

1
เหตุใดเคอร์เซอร์จึงเลื่อนไปที่จุดเริ่มต้นของบรรทัดหลัง <Esc>
ฉันสังเกตว่าขณะแก้ไขตามบรรทัดในไฟล์. txt ในโหมดแทรกเคอร์เซอร์จะเลื่อนไปที่จุดเริ่มต้นของบรรทัดหลังจากเขียนโดยใช้ลำดับคีย์: &lt;esc&gt;:w ฉันต้องการเปลี่ยนพฤติกรรมนี้เพื่อให้เคอร์เซอร์อยู่ในตำแหน่งต่อไปนี้: เขียน เป็นไปได้ไหม ฉันไม่ต้องการให้เคอร์เซอร์อยู่ในโหมดแทรกฉันแค่อยากให้มันรักษาตำแหน่งสุดท้ายหลังจากเขียน ฉันใช้ gVim 7.4 บน windows . vimrc ของฉันเป็นแบบพื้นฐานมากฉันไม่เชื่อว่าการตั้งค่าใด ๆ ของฉันจะรบกวนการทำงานนี้ ฉันได้ลบการจัดหา mswin.vim และ example.vim ออกจาก. vimrc ของฉันด้วย (ซึ่งมาพร้อมกับโปรแกรมติดตั้ง windows vim.org อย่างเป็นทางการ) หลังจากอ่านความคิดเห็นด้านล่างฉันดูที่ปัญหาอีกครั้งและตระหนักว่าเคอร์เซอร์เพียงเลื่อนไปทางซ้ายสุดหลังจากเขียนบนบรรทัดซึ่งทั้งหมดประกอบด้วยพื้นที่สีขาวต่อท้าย ในคำอื่น ๆ เคอร์เซอร์เพียงสไลด์ไปทางซ้ายไกลเมื่อ ESC-: W เมื่อสายเป็นเยื้องแขวนที่ไม่มีอักขระอื่น ๆ นอกเหนือจากช่องว่าง . vimrc กำลังจัดการพฤติกรรมเยื้องกับการตั้งค่าเหล่านี้: set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab set …

2
วิธีตรวจสอบให้แน่ใจว่าไม่มีการเปลี่ยนแปลงเกิดขึ้นกับไฟล์
มีอยู่แล้วฉันสามารถตรวจสอบให้แน่ใจว่าไฟล์ถูกล็อคเพื่อที่ฉันไม่สามารถทำการเปลี่ยนแปลงใด ๆ กับมัน มีคำสั่งสำหรับการล็อค / ปลดล็อคไฟล์ในกลุ่ม บางครั้งฉันต้องการไฟล์ให้อยู่ในโหมดอ่านอย่างเดียว
11 save 

2
มี vim plugin ที่ใช้คุณสมบัติ hot exit จากข้อความประเสริฐ
Hot exit เป็นหนึ่งในคุณสมบัตินักฆ่าของ Sublime Text editor อนุญาตให้ปิดโปรแกรมแก้ไขเมื่อใดก็ได้โดยไม่ต้องกังวลเกี่ยวกับการแก้ไขไฟล์ที่เปิด - เพียงแค่ปิดโดยไม่มีคำถามใด ๆ เมื่อเรียกใช้ ST อีกครั้งไฟล์ที่เปิดและแก้ไขทั้งหมดจะอยู่ในสถานะเดิมเหมือนก่อนปิด ฉันสงสัยว่ามีวิธีการทำเช่นเดียวกันในกลุ่ม?
11 save 

3
อย่าเพิ่มบรรทัดใหม่ที่ท้ายไฟล์
Vim จะเพิ่มบรรทัดใหม่ที่ส่วนท้ายของไฟล์เมื่อทำการบันทึกและเป็นสาเหตุของข้อผิดพลาดในสคริปต์ PHP ของฉัน ฉันจะทำให้กลุ่มไม่เพิ่มบรรทัดใหม่นี้ในการบันทึกได้อย่างไร
11 save 

1
ฉันจะหยุด Vim ไม่ให้เขียนไฟล์โดยไม่เกิดข้อผิดพลาดได้อย่างไร
ฉันพยายามปรับปรุงรหัสจากคำตอบนี้เพื่อขอการยืนยันก่อนสร้างไดเรกทอรีที่ขาดหายไปนี่คือสิ่งที่ฉันเขียน: function! CreateDirectoryAskConfirmation(path) if !isdirectory(a:path) echohl Question echo "Create directory " . a:path . "?" echohl None let response = nr2char(getchar()) if response ==? "y" call mkdir(a:path, "p") endif endif endfunction autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("&lt;afile&gt;:p:h")) สิ่งหนึ่งที่ฉันหายไป: เมื่อฉันไม่กดyที่พรอมต์ฉันต้องการให้ Vim ยกเลิกการเขียนดังนั้นฉันจึงไม่ได้รับข้อผิดพลาดE212: Can't open file for writingและฉันไม่จำเป็นต้องกดปุ่มอื่นเพื่อให้ข้อความแสดงข้อผิดพลาดหายไป มีวิธีที่จะบรรลุเป้าหมายนี้หรือไม่?
10 save  autocmd  error 

4
คุณจะบันทึกไฟล์ที่คุณกำลังทำงานเป็นไฟล์ใหม่ได้อย่างไร
มีบางครั้งที่ฉันต้องการทดสอบการเปลี่ยนแปลงไฟล์ก่อนที่ฉันจะเขียนทับต้นฉบับ มีวิธีใดบ้างที่ฉันสามารถบันทึกไฟล์ที่ถูกแก้ไขเป็นไฟล์ใหม่ได้?
10 save 

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