我正在编辑一个python文件。我当前的制表设置如下(只是做了一些实验):
set tabstop=4
set tabstop=2
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.vim、d27> loaded?
Which文件应该在哪里定义我的设置以覆盖其他文件?H 230H 131与set local
>D32如何不同时,tabstop设置为何在8处被设置为.vimrc文件中的4或~/.vim/ftplugin/python.vim文件中的2
?)如果有人回答所有这些问题,那就太好了。由于所有这些概念都是相互关联的,它肯定会使人们受益,特别是Vim初学者和中级用户。
发布于 2020-08-03 10:25:17
tabstop是一个缓冲区本地设置.这意味着每个缓冲区都有自己的值。因此,通过从您的vimrc设置它,您只设置了全局默认值,这很可能会被ftplugin和类似的.覆盖。
插件
$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"-scripts有防止多重来源的防范措施:
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
....所以,如果你真的想要它,你可以把它放在你的~/.vim/ftplugin/python.vim之上,从$VIMRUNTIME/ftplugin/python.vim中排除所有的东西。但很少有人想要。
set、setglobal和setlocal之间的区别实际上是选项类型的不同:全局的、本地到缓冲区的、本地到窗口的、全局的-本地的。为了保持简单,setglobal为一个选项设置了一个全局值,setlocal设置了一个本地值,set做了一些“合理”的事情(tm)。特别是,set tabstop=x同时设置全局值和本地值(当前缓冲区的值).https://stackoverflow.com/questions/63225139
复制相似问题