วิธีการแถบช่องว่างต่อท้ายโดยอัตโนมัติบันทึกใน Vi และ Vim?


22

มีการ.vimrcตั้งค่าให้ลบช่องว่างต่อท้ายโดยอัตโนมัติเมื่อบันทึกไฟล์หรือไม่

เป็นการดี (เพื่อความปลอดภัย) ฉันต้องการมีฟังก์ชั่นนี้สำหรับไฟล์บางไฟล์เท่านั้นเช่น *.rb

คำตอบ:


25

ใช้งานได้ (ในไฟล์. vimrc) สำหรับไฟล์ทั้งหมด:

autocmd BufWritePre * :%s/\s\+$//e

ใช้งานได้ (ในไฟล์. vimrc) สำหรับไฟล์ ruby ​​(.rb):

autocmd BufWritePre *.rb :%s/\s\+$//e

6
โซลูชันนี้ดี แต่ฉันคิดว่าโซลูชันของ @ Sukminder ด้านล่างดีกว่าเพราะปรับตำแหน่งเคอร์เซอร์ได้อย่างถูกต้อง
hlin117

สิ่งสุดท้ายที่eใช้คืออะไร
acgtyrant

19

เพื่อรักษาตำแหน่งเคอร์เซอร์ใช้สิ่งที่ชอบ:

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(".")

2

ปลั๊กอิน DeleteTrailingWhitespaceของฉันทำสิ่งนี้และในทางตรงกันข้ามกับการใช้งานแบบง่ายๆที่:autocmdsลอยอยู่รอบ ๆ ก็สามารถจัดการกรณีพิเศษได้เช่นกันสามารถสอบถามผู้ใช้หรือยกเลิกการเขียนด้วยช่องว่างต่อท้าย

หน้าปลั๊กอินมีลิงค์ไปยังทางเลือกอื่น; นอกจากนี้ยังมีการอภิปรายที่มีขนาดใหญ่ในกลุ่มเคล็ดลับวิกิพีเดีย

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