Làm cách nào để tự động loại bỏ dấu cách khi lưu trong Vi và Vim?


22

Có một .vimrccài đặt để tự động xóa khoảng trắng theo dõi khi lưu tệp không?

Lý tưởng nhất (để an toàn) Tôi chỉ muốn có chức năng này cho một số tệp nhất định, ví dụ: *.rb

Câu trả lời:


25

Điều này hoạt động (trong tệp .vimrc) cho tất cả các tệp:

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

Điều này hoạt động (trong tệp .vimrc) cho các tệp ruby ​​(.rb):

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

6
Giải pháp này rất hay, nhưng tôi nghĩ giải pháp của @ Sukminder dưới đây là tốt hơn, vì nó định vị lại con trỏ một cách chính xác.
hlin117

Cái cuối cùng esử dụng cái gì?
acgtyrant

19

Để giữ vị trí con trỏ, hãy sử dụng một cái gì đó như:

function! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

con trỏ khác sẽ kết thúc ở đầu dòng thay thế cuối cùng sau khi lưu.

Ví dụ : Bạn có một khoảng trắng ở cuối dòng 122, bạn đang ở trên dòng 982và nhập :w. Không khôi phục vị trí, sẽ dẫn đến con trỏ kết thúc ở đầu dòng 122do đó giết chết luồng công việc.

Thiết lập cuộc gọi đến chức năng bằng cách sử dụng autocmd, một số ví dụ:

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

Người ta cũng có thể sử dụng, nhưng không cần thiết trong trường hợp này, getpose () bằng cách:

let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)

" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")

2

Plugin DeleteTrailingWhitespace của tôi thực hiện điều này và, ngược lại với các :autocmdsdấu phẩy đơn giản khác nhau , cũng xử lý các trường hợp đặc biệt, có thể truy vấn người dùng hoặc hủy bỏ ghi với khoảng trắng ở cuối.

Trang plugin chứa các liên kết đến các lựa chọn thay thế; cũng có một cuộc thảo luận lớn trên Wiki Vim Tips .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.