(g) Vim - ›показать 4 пробела, но сохранить 2 пробела (табуляции)

Можно ли открыть файлы с отступом в 2 пробела, но показать мне отступ в 4 пробела, и когда я делаю 4 пробела, он сохраняется в формате 2 пробела?

Изменить

Оказывается, мне также нужно убедиться, что он работает, если в файле есть табуляция, 2 пробела и 4 пробела.

Изменить 2

Итак, вот мое текущее решение. Мне нужно переназначить свой (первоначально отображенный на: w), чтобы я мог вернуть свой курсор туда, где он был (и вернуть мне одну "историю назад" до позиций курсора, когда я выполняю сохранение. Есть ли способ сделать это, не влияя на позицию курсора (и не добавляя замену в историю)?

function! s:ShimSpaces()
    nunmap <C-S>
    nmap <C-S> ms``mt:w<Cr>`t`s
    augroup SeoTabs
        autocmd!
        autocmd BufReadPost,BufWritePost * set tabstop=4
        autocmd BufReadPost,BufWritePost * %substitute/^ \+/&&/e
        autocmd BufReadPost              * %substitute/ \+$//e
        autocmd BufWritePre              * %substitute/^\( \+\)\1/\1/e
        autocmd BufWritePre              * set tabstop=2
        autocmd BufWritePre              * retab
    augroup END
endfunction
command! -n=0 -bar ShimSpaces :call s:ShimSpaces()

person Mr Mikkél    schedule 25.01.2013    source источник
comment
Я надеюсь, что это возможное решение для вас. stackoverflow.com/questions/5217058/   -  person Sudip Kafle    schedule 25.01.2013
comment
Спасибо за попытку, Судип. Не совсем. Я думаю, что ниже у Инго может быть правильная идея. (Просто нужно попробовать.) Спасибо за ответ!   -  person Mr Mikkél    schedule 25.01.2013


Ответы (1)


Это противоположно тому, о чем спрашивали здесь.

В справке есть пример аналогичного варианта использования с разной шириной табуляции, см. :help retab-example.

Адаптируя это к удвоению / уменьшению вдвое пространств:

:augroup AdaptIndent
    :autocmd!
    :autocmd BufReadPost,BufWritePost  * %substitute/^ \+/&&/e
    :autocmd BufWritePre               * %substitute/^\( \+\)\1/\1/e
:augroup END

С * это повлияет на все открытые файлы. Чтобы ограничить это определенными файлами, см. :help autocmd-patterns.

Изменить: с оберткой :augroup это можно снова отключить с помощью :autocmd! AdaptIndent. Таким образом, вы можете легко включить / выключить это. Для простоты использования я бы поместил это в функцию и определил настраиваемую команду, вызывающую ее.

person Ingo Karkat    schedule 25.01.2013
comment
Мне нравится эта идея. Мне еще предстоит попробовать, но я дам вам знать. Спасибо! - person Mr Mikkél; 25.01.2013
comment
Собственно - один вопрос. Как мне сделать так, чтобы я мог включать или выключать это во время сеанса? - person Mr Mikkél; 25.01.2013
comment
Вот еще вопрос: как я могу это сделать, если я не уверен, что другие, кто работал над этим, смешивали табуляции, 2 пробела и 4 пробела? - person Mr Mikkél; 25.01.2013
comment
Для всех (текущих и будущих) файлов ?! Я добавил инструкцию к ответу. - person Ingo Karkat; 25.01.2013
comment
Итак, что у вас там должно работать независимо от сочетания табуляции / пробелов? - person Mr Mikkél; 25.01.2013
comment
Вы просили места, у вас есть места. Вкладки делают эту задачу более сложной, но решаемой. Взгляните на :retab. - person Ingo Karkat; 25.01.2013