tab键一直是跳转的意思
N 个格子画了一条红线(这个 N 就是 tabstop 的值,比如 4 或 8)。N 格,而是直接跳到右边最近的那条红线处。为什么叫“位” (Stop)?
直观演示(假设 tabstop = 4)
| 场景 | 当前光标位置 (列号) | 下一个制表位 | 按 Tab 后移动的宽度 | 解释 |
|---|---|---|---|---|
| 行首 | 0 | 4 | 4 格 | 从 0 跳到 4 |
| 中间 | 1 | 4 | 3 格 | 从 1 跳到 4 (只补 3 个空) |
| 中间 | 2 | 4 | 2 格 | 从 2 跳到 4 |
| 中间 | 3 | 4 | 1 格 | 从 3 跳到 4 |
| 临界点 | 4 | 8 | 4 格 | 刚好在制表位,跳到下一个 (4->8) |
| 中间 | 5 | 8 | 3 格 | 从 5 跳到 8 |
再次对比:tabstop vs shiftwidth
| 特性 | tabstop(ts) | shiftwidth(sw) |
|---|---|---|
| 作用对象 | 真实的 \t 字符 |
缩进操作 (如 >>, <<, 自动缩进) |
| 行为性质 | 动态的:根据当前位置计算跳跃距离。 | 静态的:通常固定增加或减少 sw 指定的空格数。 |
| 视觉表现 | 决定了一个 \t 在屏幕上拉多长。 |
决定了当你按 Tab 键(在 expandtab 模式下)或自动缩进时,生成多少个空格。 |
| 例子 | 设 ts=4。光标在第 3 列,按真实 Tab,只走 1 格。 |
设 sw=4。执行缩进命令,无论光标在哪,都强制插入 4 个空格。 |
expandtab 这个选项的本质,就是剥夺了 Tab 键作为“制表符(\t)”的物理身份,只保留了它作为“缩进操作”的逻辑功能。expandtab 这个名字正是由 expand (展开/扩展) + tab (制表符) 组合而成的。1. 为什么叫“展开” (Expand)?
\t)。 )。\t 里的“宽度”,被显式地、物理地展开成了一个个实实在在的空格字符。1:set expandtab 开启展开模式 2:set shiftwidth=4 自动缩进时使用 4 个空格 3:set softtabstop=4 按 Tab 键时,感觉像是走了 4 格(实际插入空格) 4:set tabstop=4 如果文件里原本有真实的 \t,显示为 4 格宽