0

我正在编辑一个 python 文件。我当前对 tabstop 的设置如下(只是做实验):

  • ~/.vimrc:set tabstop=4
  • ~/.vim/ftplugin/python.vim:set tabstop=2
  • 没有 ~/.vim/after/plugin/python.vim 文件

set tabstop?节目tabstop=8

verbose set tabstop?显示tabstop=8。最后一组从/usr/share/vim/vim80/ftplugin/python.vim

我的问题:

  • 为什么设置为 8 ,tabstop即使我已明确将其设置为4文件.vimrc或文件2~/.vim/ftplugin/python.vim
  • 每个文件(即~/.vimrc, ~/.vim/ftplugin/python.vim, ~/.vim/after/plugin/python.vim, )何时/usr/share/vim/vim80/ftplugin/python.vim加载?
  • 哪个文件优先,我应该在哪里定义我的设置以覆盖其他文件?
  • 有什么set不同set local

如果有人回答所有这些问题,那就太好了。它肯定会让人们受益,尤其是 Vim 初学者和中级用户,因为所有这些概念都是相互关联的

4

2 回答 2

2

tabstop是文件中制表符表示的空格宽度,但是当您按下Tab键盘时插入的空格宽度由softtabstop(如果它设置为非零值)控制。评估顺序或setlocal您要询问的任何其他事情都没有发生任何奇怪的事情。

另请参阅用途是什么softtabstop在 Vim StackExchange 上。

于 2020-08-03T07:15:21.443 回答
1
  1. tabstop是缓冲区本地设置。这意味着每个缓冲区都有自己的值。因此,通过从您的位置设置它,您vimrc只需设置可能会被覆盖的全局默认值ftplugin等。

  2. 该插件的代码位于$VIMRUNTIME/ftplugin.vim. 粗略地说,它的作用是runtime! ftplugin/python.vim. runtime!区别在于source两个方面:(a)它沿着 搜索:h 'runtimepath',而不是在当前目录中;(b) 它提供所有找到的文件(这就是“砰”的意思),而不仅仅是第一个。

因此,由于 (b),ftplugin首先获取您的~/.vim/ftplugin/python.vim,然后$VIMRUNTIME/ftplugin/python.vim。因此,您的设置最终会被覆盖。

这就是我们通常想要的原因~/.vim/after/ftplugin/python.vim。另请注意,标准的“ftplugin”脚本可以防止多重来源:

if exists("b:did_ftplugin")
    finish
endif
let b:did_ftplugin = 1
....

所以如果你真的想要它,你可以把它放在你的上面,~/.vim/ftplugin/python.vim并从$VIMRUNTIME/ftplugin/python.vim. 虽然很少想要。

  1. 和之间set的区别实际上是选项类型之间的区别:全局,本地到缓冲区,本地到窗口,全局本地。为了简单起见,为一个选项设置一个全局值,设置一个本地值,然后做一些“合理”的事情(tm)。特别是,设置全局和本地(当前缓冲区的一个)值。setglobalsetlocalsetglobalsetlocalsetset tabstop=x
于 2020-08-03T10:25:17.447 回答