vimrc 的改变不会影响 vim 会话,设置不会持久

vimrc 的改变不会影响 vim 会话,设置不会持久

我正在尝试将制表符宽度改为 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

即使在我更改设置之后,我现有的文件也不是 2 行制表符。如果我将:set expandtab和添加:set stoptab=2到我的文件中,它将允许该会话使用 2 行制表符,但在我保存、退出并重新打开文件后,所有内容看起来又变成了 4 行制表符。

显然我不是 vim 专家。如何才能让 vim 始终使用 2 个空格制表符,并且此设置在所有会话中都有效?

答案1

如果您编辑的文件中存在物理制表符,您确实可以通过更改选项值来更改制表符宽度的视觉外观'tabstop'。在文本内部,制表符将保持不变。

但是,正如您所说:set expandtab,您的文件中不应该有任何现有选项卡(如果它们一直在编辑),并且您的任何编辑都会插入相应数量的空格每当您按下 时Tab。这会导致您报告的行为:新的编辑将为每个制表符插入 2 个空格,但现有行将保留 4 个空格的缩进。

如果要更改使用空格时的缩进宽度,则必须实际更改空格数;例如,将 4 个空格减少到 2 个。Vim 提供命令:retab(:help change-tabs),但它与基于空格的缩进一起使用很麻烦,而且它会影响任何空格,而不仅仅是行首的缩进。:substitute对于这种情况,它更容易使用。以下命令将行首的空格量减半:

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

总结:如果文本中有物理制表符,则可以通过值更改外观'tabstop';如果文本中有物理空格,则必须转换文本中的空格数。

相关内容