首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.vimrc、ftplugin、after/ftplugin等中设置值之后,Vim最终应用了哪种配置?

在.vimrc、ftplugin、after/ftplugin等中设置值之后,Vim最终应用了哪种配置?
EN

Stack Overflow用户
提问于 2020-08-03 07:10:03
回答 1查看 361关注 0票数 0

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

set tabstop=4

  • ~/.vim/ftplugin/python.vim:set tabstop=2

  • There为
  • ~/..vim/后/plugin/python.vim文件

set tabstop?显示tabstop=8

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

我的问题:

为什么当每个文件(如~/.vimrc~/.vim/ftplugin/python.vim~/.vim/after/plugin/python.vimd27> loaded?

  • Which文件应该在哪里定义我的设置以覆盖其他文件?H 230H 131与set local

>D32如何不同时,tabstop设置为何在8处被设置为.vimrc文件中的4或~/.vim/ftplugin/python.vim文件中的2

  • ?)

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

EN

回答 1

Stack Overflow用户

发布于 2020-08-03 10:25:17

  1. tabstop是一个缓冲区本地设置.这意味着每个缓冲区都有自己的值。因此,通过从您的vimrc设置它,您只设置了全局默认值,这很可能会被ftplugin和类似的.

覆盖。

插件

  1. 的代码驻留在$VIMRUNTIME/ftplugin.vim中。粗略地说,它所做的是runtime! ftplugin/python.vimruntime!source有两个不同之处:(a)它沿着:h 'runtimepath'搜索,而不是在当前目录中搜索;(b)它提供找到的所有文件(这是“邦”的意思),而不仅仅是第一个。

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

这就是为什么我们通常想要的是~/.vim/after/ftplugin/python.vim。还请注意,标准的"ftplugin"-scripts有防止多重来源的防范措施:

代码语言:javascript
复制
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同时设置全局值和本地值(当前缓冲区的值).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63225139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档