Изменения в vimrc не влияют на сеансы vim, настройки не сохраняются

352
Misha Krul

Я пытаюсь изменить вкладки на вкладки шириной с 2 ​​интервалами вместо ширины по умолчанию с 4 интервалами.

Мой файл vimrc выглядит так:

" Configuration file for vim set modelines=0 " CVE-2007-2438 " Normally we use vim-extensions. If you want true vi-compatibility " remove change the following statements set expandtab set backspace=2 " more powerful backspacing set tabstop=2 set softtabstop=2 set shiftwidth=2 map <C-c> "+y<CR>  " Don't write backup file if vim is being called by "crontab -e" au BufWrite /private/tmp/crontab.* set nowritebackup nobackup " Don't write backup file if vim is being called by "chpass" au BufWrite /private/etc/pw.* set nowritebackup nobackup  let skip_defaults_vim=1 

Даже после того, как я изменил настройки, мои существующие файлы не имеют вкладок с двумя пробелами. Если я добавлю :set expandtabи :set stoptab=2к своим файлам, это разрешит вкладки с двумя интервалами для этого сеанса, но после сохранения, выхода и повторного открытия файла все будет выглядеть как вкладки с 4 интервалами.

Очевидно, я не эксперт Vim. Как сделать так, чтобы vim всегда использовал 2 пробела и чтобы этот параметр сохранялся во всех сеансах?

0

1 ответ на вопрос

0
Ingo Karkat

Если внутри ваших файлов редактирования есть физические вкладки, вы действительно можете изменить внешний вид ширины вкладок, изменив 'tabstop'значение параметра. Внутри текста вкладки останутся прежними.

Однако, как и у вас :set expandtab, внутри ваших файлов не должно быть никаких вкладок (если они были последовательно отредактированы), и любые ваши изменения будут вставлять соответствующее количество пробелов при каждом нажатии Tab. Это приводит к поведению, о котором вы сообщаете: новые правки будут вставлять 2 пробела для каждой вкладки, но существующие строки сохранят отступ в 4 пробела.

Если вы хотите изменить ширину отступа при использовании пробелов, вы должны физически изменить количество пробелов; например, уменьшить 4 пробела до 2. Vim предлагает :retabкоманду ( :help change-tabs), но ее использование с отступом на основе пробелов является громоздким, а также влияет на любые пробелы, а не только на отступ в начале строки. Для этого проще использовать :substitute. Следующая команда делит пополам количество пробелов в начале строк:

:%substitute/^\( \+\)\1/\1/e 

TL; DR : с помощью физических вкладок внутри текста вы можете изменить внешний вид с помощью 'tabstop'значения, с физическими пробелами вы должны преобразовать количество пробелов внутри текста.

Похожие вопросы