Як автоматично позбавити пробіли під час збереження у 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використовує ластет ?
акцентант

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плаваючих навколо, також обробляє спеціальні випадки, може запитувати користувача або скасовувати записи з пробілу пробілів.

Сторінка плагіна містить посилання на альтернативи; також є велика дискусія у Вікі Tips Wiki .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.