我在一个空目录中按如下方式启动 Vim。
vim -u NONE foo.txt
Run Code Online (Sandbox Code Playgroud)
然后我在 Vim 中输入以下命令。
:set ts=40
Run Code Online (Sandbox Code Playgroud)
现在,如果我按 Tab,光标确实会移动到第 41 列。
现在我在 Vim 中输入以下命令。
:e! bar.txt
Run Code Online (Sandbox Code Playgroud)
现在,如果我按 Tab 键并且光标再次移动到第 41 列。这让我很惊讶。我期待光标移动到第 9 列。
事实上,:help 'ts显示如下。
*'tabstop'* *'ts'*
'tabstop' 'ts' number (default 8)
local to buffer
Number of spaces that a <Tab> in the file counts for. Also see
|:retab| command, and 'softtabstop' option.
Run Code Online (Sandbox Code Playgroud)
帮助说ts选项是local to buffer. 为什么我ts=40在一个缓冲区中设置的选项会应用于另一个新缓冲区?
“本地到缓冲区”意味着新值不会影响其他现有缓冲区。
假设在您中tabstop设置为并且您使用两个缓冲区启动 vim:4vimrc
$ vim a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
的初始值tabstop是由两个缓冲器,从而继承a.txt和b.txt已tabstop设定为4。
如果你这样做:set tabstop=7了a.txt,b.txt仍然会有以前的值4。这就是“本地到缓冲区”的意思。
但是当你创建一个新的缓冲区时,这个新缓冲区会继承当前缓冲区的设置,所以ts=7如果当前缓冲区有7,ts=4如果它是4,等等,你将在新缓冲区中获得。
然后是:setlocal设置一个不会被新缓冲区继承的本地值。
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |