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

"autocmd" คือคำสั่งที่ดำเนินการโดยอัตโนมัติในบางเหตุการณ์ คำถามเกี่ยวกับการสร้างหรือแก้ไขคำจำกัดความ "autocmd" เหมาะสมกับแท็กนี้

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

3
เหตุใดฉันจึงควรใช้ augroup
ฉันเข้าใจว่าคำสั่งอัตโนมัติทำงานอย่างไรและใช้งานอย่างไร แต่ฉันก็ค่อนข้างแน่ใจว่าเป็นกลุ่มใด ฉันอ่าน:help augroup *:aug* *:augroup* :aug[roup] {name} Define the autocmd group name for the following ":autocmd" commands. The name "end" or "END" selects the default group. To avoid confusion, the name should be different from existing {event} names, as this most likely will not do what you intended. สิ่งนี้ไม่ได้อธิบายว่าทำไมพวกเขาถึงมีประโยชน์หรือทำไมฉันต้องการสร้างชื่อกลุ่มข้อความอัตโนมัติและเพียงแค่กำหนดกลุ่มข้อความอัตโนมัติที่อยู่ติดกัน …
31 autocmd 

2
มีวิธีการและเหตุการณ์ใน autocmd หรือไม่
ผมอยากจะเรียกautocmd ทั้งสองเหตุการณ์ที่เกิดขึ้น autocmdแต่ไม่ใช่ในลักษณะที่จะทำมักจะเป็นเช่นถ้าเหตุการณ์ใดเหตุการณ์หนึ่งที่เกิดขึ้นแล้วเรียก ฉันต้องการที่จะเรียกมันถ้าเหตุการณ์ทั้งสองเกิดขึ้น ตัวอย่างเช่น: วิธีปกติในการทำ autocmd BufWrite,BufRead *.c *.py *.h :call StripTrailingWhitespaces() รหัสนี้จะเรียก StripTrailingWhiteSpaces () บน BufWrite หรือ BufRead ฉันต้องการทำสิ่งที่ชอบ: autocmd Filetype c,cpp,python AND BufWrite :call StripTrailingWhiteSpaces() ในคำอื่น ๆ เรียกautcmdเมื่อชนิดของไฟล์เป็นหนึ่งใน c, cpp, python และการเขียนในบัฟเฟอร์นี้เกิดขึ้น ความช่วยเหลือใด ๆ ที่ชื่นชม
21 autocmd 

2
ลำดับของ WinEnter, BufEnter, BufRead, Syntax, FileType คืออะไร
ฉันได้รับautocmd.txtความช่วยเหลือแล้ว แต่ข้อมูลเกี่ยวกับเรื่องนี้กระจัดกระจายและไม่ได้นำเสนอเสมอ (เช่นกับBufRead) ใครบางคนที่เข้าใจสิ่งนี้ดีสามารถเรียงลำดับเหตุการณ์เหล่านี้ได้ - ด้วยเงื่อนไขที่ระบุไว้ใน parantheses เช่น WinEnter BufEnter (if this window is for a different buffer than the current) และอื่น ๆ สำหรับการอ้างอิงได้ง่าย? หมายเหตุ(คัดลอกมาจากความคิดเห็นของฉันด้านล่าง) : ฉันไม่ได้พูดถึงคำอธิบายของแต่ละคนซึ่งก็โอเค แต่เกี่ยวกับวิธีที่พวกเขาโต้ตอบกันและในสิ่งที่พวกเขาเกิดขึ้น สำหรับตัวอย่างเช่นWinEnterพูดว่า "Vim เรียกใช้ Autocommands ของ BufEnter หลังจาก Autocommands ของ WinEnter" TabEnterกล่าวว่า "หลังจากเรียก WinEnter และก่อนที่จะเรียกใช้เหตุการณ์ BufEnter" มันทั้งหมดกระจัดกระจายไปในหลาย ๆ ที่ และบางครั้งก็ไม่ได้กล่าวถึงเลย (เช่นBufReadไม่ได้พูดถึงว่ามันทำงานหลังจาก BufEnter หรือก่อนหน้านี้ …

2
ปิดใช้งานการเน้นไวยากรณ์ขึ้นอยู่กับขนาดไฟล์และประเภท
ฉันมักจะต้องแก้ไขไฟล์ XML ต่าง ๆ ด้วย vim ซึ่งมีขนาดแตกต่างกันมาก - จากไฟล์การกำหนดค่าที่มีบรรทัด hunded สองสามบรรทัดไปยังไฟล์ข้อมูลการผลิตที่มีขนาดสูงสุด 2GB แน่นอนว่าการเปิดใช้งานการเน้นไวยากรณ์เป็นความคิดที่แย่มากเมื่อจัดการกับไฟล์ขนาดใหญ่ดังนั้นฉันจึงต้องการปิดใช้งานหากไฟล์มีขนาดใหญ่กว่าเกณฑ์ ฉันไม่สามารถใช้งานautocommandได้โดยตรงเพื่อปิดใช้งานการเน้นไวยากรณ์เนื่องจากคำสั่งถูกเรียกใช้ก่อนที่จะเปิดใช้งานไวยากรณ์เมื่อเริ่มต้น vim จากเชลล์: " this autocmd has no effect except for the echo: autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif ฉันพบวิธีแก้ปัญหาในการที่ฉันสามารถปิดใช้งานการเน้นไวยากรณ์ทั่วโลกจากนั้นเปิดอีกครั้งสำหรับไฟล์ประเภทอื่นทั้งหมดกว่า xml และเปิดใช้งานสำหรับ filetype xml หากไฟล์ไม่ใหญ่กว่าเกณฑ์: syntax off autocmd …

1
สำหรับ autocmd ใน ftplugin ฉันควรใช้การจับคู่รูปแบบหรือ <buffer> หรือไม่
ฉันมี autocmd สำหรับไฟล์ TeX และ Markdown เพื่อบันทึกไฟล์โดยอัตโนมัติ ไม่มีอะไรผิดปกติ: autocmd CursorHold *.tex,*.md w อย่างไรก็ตามเมื่อการตั้งค่าแบบกำหนดเองสำหรับไฟล์เหล่านี้เพิ่มขึ้นฉันจึงแยกออกเป็นftplugin/tex.vimและftplugin/markdown.vim: " ftplugin/tex.vim autocmd CursorHold *.tex w " ftplugin/markdown.vim autocmd CursorHold *.md w ตอนนี้ไฟล์เหล่านี้มีที่มาเฉพาะสำหรับไฟล์ที่เหมาะสมเท่านั้นดังนั้นการจับคู่รูปแบบจึงซ้ำซ้อน เห็นได้ชัดว่าautocmds สามารถเป็นบัฟเฟอร์ในท้องถิ่น จาก:h autocmd-buffer-local: Buffer-local autocommands are attached to a specific buffer. They are useful if the buffer does not have a name and …
14 autocmd  filetype 

1
เป็นไปได้หรือไม่ที่จะทำงานกับ. odt, .doc, .docx, .rtf และรูปแบบอื่น ๆ ที่ไม่ใช่ข้อความธรรมดาใน Vim?
บางครั้งมีคนส่งฉัน.odt, .docและ.docxไฟล์; การเปิดพวกเขาใน OpenOffice นั้นเป็นเรื่องที่เจ็บปวดเสมอเพราะอย่างนั้น OpenOffice ตอนนี้ฉันใช้เครื่องมือ commandline ที่หลากหลาย (เช่นodt2txt) เพื่อแปลงไฟล์เหล่านี้เป็นข้อความธรรมดาบันทึกข้อความธรรมดาเป็นไฟล์ชั่วคราวจากนั้นดู (และอาจแก้ไข) ใน Vim สามารถทำได้ง่ายกว่านี้ไหม บางทีมีบางอย่างกับกลุ่มอัตโนมัติหรือ หรืออาจจะมีวิธีที่ดีกว่า ฉันอยากจะทำ: $ vim file.odt เป็นกลุ่มแล้วดูแลการแปลงสำหรับฉันหรือไม่ ดียิ่งขึ้น (คะแนนโบนัส) จะเป็นถ้าฉันยังสามารถบันทึกไฟล์ (ไปfile.txt) แต่สิ่งนี้จะไม่ถูกสร้างขึ้นจนกว่าฉันจะเขียน ...

3
จะลดตัวอักษรตัวที่สองของคำโดยอัตโนมัติได้อย่างไร
เมื่อฉันต้องพิมพ์ข้อความจำนวนมากฉันมักจะกดนิ้วของฉันshiftเมื่อฉันเขียนตัวอักษรตัวแรกของประโยคที่มักจะให้: [...]end of sentence. NEw sentence[...] ที่นี่EของNEwที่ควรจะเป็นกรณีที่ต่ำกว่า ฉันพยายามสร้างฟังก์ชั่นที่จะตรวจสอบว่าตัวอักษรตัวที่สองของคำแรกของประโยคที่ฉันพิมพ์เป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็กหรือไม่ ส่วนที่สำคัญคือการแก้ไขควรทำโดยอัตโนมัติในขณะที่ฉันพิมพ์ตอนท้ายของประโยค จนถึงตอนนี้ฉันได้ลองเล่นกับเหตุการณ์บันทึกอัตโนมัติInsertCharPreก่อนที่จะทราบว่าข้อความไม่สามารถแก้ไขได้โดยฟังก์ชันที่ทริกเกอร์โดยเหตุการณ์นี้ อะไรจะเป็นทางออกที่ดี? หมายเหตุจนถึงตอนนี้ฉันไม่จำเป็นต้องมุ่งเน้นไปที่ตัวกล่องขอบเช่นตัวย่อซึ่งควรเป็นตัวพิมพ์ใหญ่หรือของแบบนี้ แก้ไขฉันทำสิ่งนี้ซึ่งเป็นวิธีแก้ปัญหาที่ไม่สมบูรณ์: autocmd CursorMovedI * call RemoveUnwantedUpper() function! RemoveUnwantedUpper() " Get the current sentence " Based on http://stackoverflow.com/a/23315227/4194289 let l:save_clipboard = &amp;clipboard set clipboard= " Avoid clobbering the selection and clipboard registers. let l:save_reg = getreg('"') let l:save_regmode = …

2
ยับยั้งเอาต์พุตจาก vim autocomand
ฉันมีคำสั่งอัตโนมัติและกำหนดไว้ใน vimrc ของฉัน: au BufWritePost * !./make.sh สคริปต์make.shรวบรวม.texไฟล์ 3 ครั้งและฉันไม่ต้องการให้แสดงผลลัพธ์ มีวิธีระงับเอาต์พุตหรือไม่? ฉันพยายามเพิ่มsilentหนึ่งบรรทัดก่อนauคำสั่ง แต่มันไม่ทำงาน ฉันก็ลองแบบนี้โดยไม่ประสบความสำเร็จ
13 autocmd 

3
วิธีเปิดใช้งาน / ปิดใช้งาน augroup ได้ทันที
ฉันสร้างขึ้นaugroupใน.vimrcหลายที่มีของฉันautocmdและฉันต้องเปิด / ปิดการใช้งานได้autocommandทันที ความคิดที่จะสร้างการแมป (สมมติว่าF4ตัวอย่าง) ซึ่งจะช่วยให้ autocommands .vimrcเหล่านี้เมื่อกดครั้งเดียวและปิดการใช้งานพวกเขาเมื่อกดอีกครั้งโดยไม่ต้องไปยังแหล่งไฟล์หรือโหลด ฉันจะทำสิ่งนั้นได้อย่างไร

1
วิธีเปิดใช้งานการตรวจสอบตัวสะกดสำหรับไฟล์บางประเภท?
ฉันพลิกระหว่างไฟล์ Ruby และ Markdown มาก มีวิธีที่ฉันสามารถset spellตั้งค่าโดยอัตโนมัติเมื่อฉันเปิด*.mdไฟล์ แต่ไม่ใช่เมื่อฉันเปิดไฟล์ได้*.rbหรือไม่?

1
ฉันจะเรียกใช้ autocmd ได้อย่างไรเมื่อเริ่ม Vim โดยไม่มีไฟล์, ไฟล์ที่ไม่มีอยู่หรือไฟล์เปล่า (แต่ไม่ใช่เมื่อเริ่มต้นด้วยไฟล์ที่มีอยู่)
ฉันต้องการเรียกใช้ autocmd ในสถานการณ์ต่อไปนี้เมื่อฉันเริ่ม Vim: โดยไม่ได้ระบุชื่อไฟล์ เมื่อไฟล์ใหม่ เมื่อไฟล์มีอยู่ แต่ว่างเปล่าทั้งหมด ในสามกรณีข้างต้นทั้งหมดฉันต้องการเรียกใช้ autocmd โดยเฉพาะฉันต้องการเริ่มโหมดแทรกโดยอัตโนมัติสำหรับสถานการณ์ข้างต้นเท่านั้น (ไม่ใช่เมื่อฉันเปิดไฟล์ที่มีอยู่แล้ว &amp; ไม่ว่าง) UPDATE: ฉันได้ลองทำสิ่งต่อไปนี้ในของฉัน_vimrcแต่ไม่มีโชค (บวกด้วยฉันไม่แน่ใจว่ามีฟังก์ชั่นในกลุ่มที่นับจำนวนตัวอักษรในไฟล์ (เพื่อดูว่ามันเป็นศูนย์) ก่อนเปิดหรือไม่: if @% == "" || filereadable(@%) autocmd BufRead,BufNewFile * startinsert endif

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 

3
ฉันจะเพิ่มข้อความ Skeleton ลงในไฟล์ vim ใหม่ได้อย่างไร
ฉันใช้ Vim สำหรับการเขียน C ++ และฉันมี#include&lt;&gt;คำสั่งความเห็นและอื่น ๆ ที่ฉันต้องรวมไว้ในไฟล์ใหม่แต่ละไฟล์ที่ฉันสร้างขึ้น ฉันได้เพิ่ม autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) ถึง vimrc ของฉันเพราะฉันได้ยินว่าสิ่งนี้สร้างบัฟเฟอร์ด้วยข้อความที่ฉันต้องการ ฉันจะเพิ่มข้อความนี้ไปยังไฟล์ใหม่ได้อย่างไร มีวิธีง่าย ๆ ในการทำเช่นนี้จากบัฟเฟอร์หรือมีวิธีอื่นที่ง่ายในการทำสิ่งนี้ ฉันเคยได้ยินเกี่ยวกับปลั๊กอินเทมเพลตมาบ้างแล้ว มีแบบง่าย ๆ ที่สามารถทำได้สำหรับฉัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.