Vim 中的 Tab 键与空格键相关配置项详解


文章目录

  • Vim 中的 Tab 键与空格键相关配置项详解
    • 0. 参考资料
    • 1. Tab 键与空格键的配置项
    • 2. 实例演示

0. 参考资料

  • Tabs and Spaces

1. Tab 键与空格键的配置项

Vim 针对空格提供了细粒度的配置项,一共有 4 项:

  • tabstop:指定一个 tab 字符的宽度,缩写为 ts
  • expandtab:激活该项会让空格代替 tab 字符,禁用该项需要使用 noexpandtab
  • softtabstop:指明用多少个空格来代替 tab 字符,缩写为 sts
  • shiftwidth:指明在普通模式下用缩进命令插入或删除的空格数量,缩写为 sw

2. 实例演示

默认设置

  • ts=8 sts=0 sw=8 noexpandtab
  • Vim 中默认设置用一个制表符 \t 来表示 tab 键,不使用空格替换
  • 插入模式中的退格键会删除制表符
  • 制表符的宽度为 8
  • 在普通模式下使用 < 或者 > 调整缩进时,相当于删除和增加制表符

ts=8 sts=0 sw=8 expandtab

  • 与默认设置的区别在于激活了 expandtab 选项
  • Vim 会用 8 个空格代替制表符
  • 插入模式中的退格键一次只会删除一个空格
  • 在普通模式下使用 < 或者 > 调整缩进时,一次性减少或添加 8 个空格

ts=8 sts=8 sw=8 expandtab

  • softtabstop 设置为 8,此时在插入模式中退格键可以一次性删除 8 个空格
  • 普通模式下的缩进行为与之前保持一致,因为没有修改 shiftwidth 选项
  • 一般情况下,softtabstop 需要与 shiftwidth 相等,这样在插入模式下使用 tab 和退格键时的行为就与在普通模式下使用 <> 调整缩进的行为一致了。

ts=8 sts=4 sw=4 expandtab

  • 激活了 expandtab 选项,所有插入的制表符都会用空格代替。
  • 插入模式下,由于 softtabstop 的设置,使用 tab 和退格键都是 4 个空格。
  • 同样,在普通模式下的缩进也是 4 个空格,这是由 shiftwidth 决定的。
  • 但是如果有现存的 \t 制表符,该符号会占据 8 个列宽。

ts=8 sts=4 sw=4 noexpandtab

  • 使用 noexpandtab 将不会用 tab 键代替空格。
  • softtabstop 设置为 4,它优先于 tabstop。所以在插入模式下我们键入 tab,首先将会输入 4 个空格,只有再按一次 tab,才会删除原先输入的 4 个空格,用一个占据 8 个列宽的制表符替换它。
  • 在普通模式下,由于 shiftwidth 设置为 4,所以使用缩进命令时的行为与插入模式中类似。

ts=4 sts=4 sw=4 noexpandtab

  • 减少 tabstop4,可以看到一个制表符占据 4 个列宽。
  • 在插入模式使用 tab 键和退格键、在普通模式使用缩进命令,都会对制表符进行操作。

同时设置 ts = sts = sw

  • 如果你不想让空格和制表符混在一起的话,需要保证 tabstop 等于 softtabstop
  • 如果你只想用空格而不是制表符的话,那么你需要让 softtabstop 等于 shiftwidth
  • 所以一般而言,同时设置这三个值,并让它们相等是比较好的做法。

完成于 2019.7.4

Vim 中的 Tab 键与空格键相关配置项详解相关推荐

  1. tab键和空格键的区别

    tab键和空格键的区别 TAB叫做制表符,就是制表用的,或者说是对齐用的,属于控制字符:而空格属于可见字符. Tab('\t')和空格(' ')根本就是两种东西,就像是问回车('\r')和换行('\n ...

  2. html中键盘分别对应的值,电脑键盘键值所对应的功能详解

    虽然,电脑的键盘看上去很相似,但是,只要仔细观察,不同的电脑配置的键盘的键值还是有些许细微的差异.好在一些常用键值都是一样的,这里详解的就是这些通用键值所对应的功能.有兴趣的朋友可以参考一下哦! Es ...

  3. python反向缩进_在Pycharm中对代码进行注释和缩进的方法详解

    在Pycharm中对代码进行注释和缩进的方法详解 一.注释 1. #单行注释 2. """ 多行注释 """ 3. pycharm多行注释快 ...

  4. java正则匹配多个斜杠_正则表达式中两个反斜杠的匹配规则详解

    关于正则表达式raw的\匹配规则 这是我在学习中获得到的一个例子,第一表达式中匹配到的是none.于是乎我就在思考,为什么会匹配不到,假设\t被转义成一个\t,那么也应该匹配到\tsanle,而不是n ...

  5. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  6. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  7. python什么意思k_对python中的*args与**kwgs的含义与作用详解

    对python中的*args与**kwgs的含义与作用详解 在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数, ...

  8. linux中etc下的hosts(本地IP解析)文件详解

    linux中etc下的hosts(本地IP解析)文件详解 1./etc/hosts(本地解析) 很多人一提到更改hostname首先就想到修改/etc/hosts文件, 认为hostname的配置文件 ...

  9. php中的文字排版问题,CSS布局中常用的文字排版相关属性详解

    本篇文章给大家带来的内容是关于CSS布局中常用的文字排版相关属性详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. CSS布局中常用的文字排版相关属性详解 一.设定文字字体.颜色.大 ...

最新文章

  1. Java 8 (8) 默认方法
  2. gcc的安装----rpm包安装顺序
  3. Apache Spark技术实战之6 -- spark-submit常见问题及其解决
  4. Python中常用的内置函数(不断更新中)
  5. mount 网络_mount系统调用(ksys_mount-gt;do_mount-gt;do_new_mount)
  6. 小程序功能模块-在线考试2.10.3源码
  7. iOS --- [持续更新中] iOS移动开发中的优质资源
  8. CountDownLatch和cyclicbarrier的使用
  9. macOS Big Sur的小部件使用技巧
  10. 大学报到前最后的技术——VMware探究
  11. Android签名总结
  12. 纪念非线性光学诞生:Peter Franken和非线性光学
  13. 设置个性桌面计算机教案,第十三课《个性化的桌面设置》教学设计
  14. 【Paper】Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
  15. 谷歌(chrome)浏览器,页面翻译设置
  16. Bug: Safari浏览器input框placeholder和内容都不显示
  17. 【大数据处理技术】实验4
  18. 在Android开发当中如何在一个app中打开淘宝app
  19. 首席新媒体黎想教程:活动运营主题策划,及前端玩法设计!
  20. 小数点如何用计算机二进制表示,计算机二进制小数点表示法

热门文章

  1. Delphi DataSet超高效率导出到Excel——60万个数据9秒导出
  2. chrome 手机和电脑联调
  3. 你猜【哪个专业】毕业后就业最好?
  4. TI最新BQ76952应用分享 电池主动均衡芯片
  5. 从入门到精通学全套AI 轻松掌握illustrator基础加实战技能视频课程-王诚-专题视频课程...
  6. 王强是如何学计算机的,浙江大学计算机科学与技术学院导师介绍 王强
  7. tar显示压缩进度条
  8. GJB 5000B二级-MPM测量与绩效管理
  9. 计算机系统权限分级,Windows Server 2016 部署文件服务器及权限分级方案
  10. 使用计算机VLOOKUP函数需注意什么,计算机中的vlookup函数怎么使用