【问题标题】:Which configuration does Vim finally apply after setting values in .vimrc, ftplugin, after/ftplugin etc.?在 .vimrc、ftplugin、after/ftplugin 等中设置值后,Vim 最终会应用哪种配置?
【发布时间】:2020-08-03 18:25:17
【问题描述】:

我正在编辑一个 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

我的问题:

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

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

【问题讨论】:

    标签: vim vim-plugin tabstop ftplugin


    【解决方案1】:

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

    另请参阅 Vim StackExchange 上的 What is softtabstop used for?

    【讨论】:

    • 我已经编辑了我的问题以使其更有意义。 tabstop vs softtabstop 现在对我来说很清楚了,但是 Vim 何时加载不同配置文件的困惑仍然存在
    【解决方案2】:
    1. tabstop 是缓冲区本地设置。这意味着每个缓冲区都有自己的值。因此,通过从您的 vimrc 设置它,您只需设置可能会被 ftplugin 等覆盖的全局默认值。

    2. 插件的代码位于$VIMRUNTIME/ftplugin.vim。粗略地说,它的作用是runtime! ftplugin/python.vimruntime!source 有两个不同之处: (a) 它沿着:h 'runtimepath' 搜索,而不是在当前目录中搜索; (b) 它获取所有找到的文件(这就是“bang”的含义),而不仅仅是第一个。

    因此,由于 (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. setsetglobalsetlocal之间的区别实际上是选项类型之间的区别:全局、本地到缓冲区、本地到窗口、全局-本地。为简单起见,setglobal 为选项设置全局值,setlocal 设置本地值,set 执行“合理”的操作 (tm)。特别是,set tabstop=x 设置全局和本地(当前缓冲区的一个)值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多