มีการ.vimrc
ตั้งค่าให้ลบช่องว่างต่อท้ายโดยอัตโนมัติเมื่อบันทึกไฟล์หรือไม่
เป็นการดี (เพื่อความปลอดภัย) ฉันต้องการมีฟังก์ชั่นนี้สำหรับไฟล์บางไฟล์เท่านั้นเช่น *.rb
มีการ.vimrc
ตั้งค่าให้ลบช่องว่างต่อท้ายโดยอัตโนมัติเมื่อบันทึกไฟล์หรือไม่
เป็นการดี (เพื่อความปลอดภัย) ฉันต้องการมีฟังก์ชั่นนี้สำหรับไฟล์บางไฟล์เท่านั้นเช่น *.rb
คำตอบ:
ใช้งานได้ (ในไฟล์. vimrc) สำหรับไฟล์ทั้งหมด:
autocmd BufWritePre * :%s/\s\+$//e
ใช้งานได้ (ในไฟล์. vimrc) สำหรับไฟล์ ruby (.rb):
autocmd BufWritePre *.rb :%s/\s\+$//e
e
ใช้คืออะไร
เพื่อรักษาตำแหน่งเคอร์เซอร์ใช้สิ่งที่ชอบ:
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
เคอร์เซอร์อื่นจะสิ้นสุดที่จุดเริ่มต้นของบรรทัดสุดท้ายแทนที่หลังจากบันทึก
ตัวอย่าง : คุณมีพื้นที่ที่ท้ายบรรทัด122
คุณอยู่ในบรรทัดและป้อน982
:w
การไม่กู้คืนตำแหน่งจะส่งผลให้เคอร์เซอร์สิ้นสุดที่จุดเริ่มต้นของบรรทัด122
จึงทำให้ขั้นตอนการทำงานหยุดชะงัก
ตั้งค่าการเรียกใช้ฟังก์ชันให้ใช้autocmd
ตัวอย่างบางส่วน:
" Using file extension
autocmd BufWritePre *.h,*.c,*.java :call <SID>StripTrailingWhitespaces()
" Often files are not necessarily identified by extension, if so use e.g.:
autocmd BufWritePre * if &ft =~ 'sh\|perl\|python' | :call <SID>StripTrailingWhitespaces() | endif
" Or if you want it to be called when file-type i set
autocmd FileType sh,perl,python :call <SID>StripTrailingWhitespaces()
" etc.
หนึ่งสามารถใช้ แต่ไม่จำเป็นในกรณีนี้getpos ()โดย:
let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)
" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")
ปลั๊กอิน DeleteTrailingWhitespaceของฉันทำสิ่งนี้และในทางตรงกันข้ามกับการใช้งานแบบง่ายๆที่:autocmds
ลอยอยู่รอบ ๆ ก็สามารถจัดการกรณีพิเศษได้เช่นกันสามารถสอบถามผู้ใช้หรือยกเลิกการเขียนด้วยช่องว่างต่อท้าย
หน้าปลั๊กอินมีลิงค์ไปยังทางเลือกอื่น; นอกจากนี้ยังมีการอภิปรายที่มีขนาดใหญ่ในกลุ่มเคล็ดลับวิกิพีเดีย