Изменения в vimrc не влияют на сеансы vim, настройки не сохраняются
Я пытаюсь изменить вкладки на ширину вкладок с двумя интервалами вместо ширины по умолчанию с 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
Даже после того, как я изменил настройки, мои существующие файлы не имеют вкладок с 2 пробелами. Если я добавлю :set expandtab
а также :set stoptab=2
для моих файлов это разрешит вкладки с двумя интервалами для этого сеанса, но после сохранения, выхода и повторного открытия файла все выглядит как вкладки с 4 интервалами.
Очевидно, я не эксперт Vim. Как сделать так, чтобы vim всегда использовал 2 пробела и чтобы этот параметр сохранялся во всех сеансах?
1 ответ
Если бы внутри ваших файлов редактирования были физические вкладки, вы могли бы действительно изменить внешний вид ширины вкладок, изменив 'tabstop'
значение опции. Внутри текста вкладки останутся прежними.
Тем не менее, как у вас есть :set expandtab
внутри ваших файлов не должно быть никаких вкладок (если они были последовательно отредактированы), и любые ваши изменения будут вставлять соответствующее количество пробелов при каждом нажатии Tab. Это приводит к поведению, о котором вы сообщаете: новые правки будут вставлять 2 пробела для каждой вкладки, но существующие строки сохранят отступ в 4 пробела.
Если вы хотите изменить ширину отступа при использовании пробелов, вы должны физически изменить количество пробелов; например, уменьшить 4 пробела до 2. Vim предлагает :retab
команда (:help change-tabs
), но его использование с отступом на основе пространства является громоздким, а также влияет на любые пробелы, а не только на отступ в начале строки. Проще в использовании :substitute
за это. Следующая команда делит пополам количество пробелов в начале строк:
:%substitute/^\( \+\)\1/\1/e
TL; DR: с физическими вкладками внутри текста, вы можете изменить внешний вид с помощью 'tabstop'
значение, с физическими пробелами, вы должны преобразовать количество пробелов внутри текста.