vim中令人头疼的缩进该怎么配置

你应该遇到过在VIM中写代码,但是在其它编辑器中显示错乱的情况,这是因此没有对VIM进行正确的配置。

高级语言配置

首先介绍在VIM中写高级语言(c, c++, java)的配置。

首先这些高级语言都是使用空格进行缩进的,因此需要在VIM中设置set expandtab把tab键转换为空格。

其次,这些高级语言的代码中,一个tab键是代表4个空格的,所以需要设置set tabstop=4

最后,这些高级语言的自动缩进,也是使用4个空格,因此需要设置set shiftwidht=4

因此把这些设置项添加到~/.vimrc中,写出的代码,在任何编辑器中都不会显示错乱。

脚本语言配置

我在写shell脚本时,遇到过空格和制表符的问题。因此我的vim配置是使用上面的高级语言的配置,因此在shell脚本中没有制表符,但是shell中有一个here document语法,它有一种形式,只会忽略每一行前面的制表符,但是空格是不允许的。因此我大胆地对shell脚本的进行了配置。

首先,我不需要把制表符转为空格,所以设置set noexpandtab

其实,tab缩进习惯使用4个空格,因此设置set tabstop=4

然后,自动缩进也是使用4个空格,因此设置set shiftwidth=4

关于softtabstop

很多人对softtabstop很疑惑,这个说起来有点复杂,我一步一步来解释。

首先要明白softtabstop的默认值。 如果没有设置set expandtab,那么softtabstop默认值是tabstop的值。否则默认为0,代表关于这个特性。

那么在高级语言的配置中,设置过set expandtab,那么这个特性默认是关闭,没什么问题。

在脚本语言配置中,因为需要使用制表符,所有设置的是set noexpandtab,并且我们要求一个tab显示4个空格的宽度,也就是set tabstop=4,那么softtabstop默认为4,然而也没有什么问题。

那么softtabstop的特性是什么呢?首先,你要明白,它是针对插入模式的。

以脚本的配置为例,

  1. 默认情况下,tabstop=4, softabtop=4。在插入模式下,如果按一下tab键,那么会插入一个制表符,屏幕上显示四个空格的宽度,如果此时使用删除键,那么只需要按一次,即可删除这个制表符。这个行为正是我们所期望的。
  2. 如果我们设置softtabstop=3,而tabstop=4保持不变。那么,在插入模式下,按一下tab键,屏幕上会显示三个空格的宽度,此时并没有插入制表符,而是三个空格,如果此时再使用删除键,会一次性把这三个空格一起删除。
  3. 如果我们设置softtabstop=5,而tabstop=4保持不变。那么,在插入模式下,按一次tab键,屏幕上会显示五个空格的宽度,此时插入的是一个制表符和一个空格,因此制表符是四个空格宽度,再加上一个空格的宽度,正好等于softtabstop=5。如果再按删除键,也会一次性删除5个宽度,也就是一次性把空格和制表符一起删除。

那么这个softtabstop究竟有什么用呢?其实对我们程序员来说,没有什么鸟用。但是日常工作中,一个tab键的宽度默认是8,例如打印机就是这样,并且不会把制表符展开为空格,因此softtabstop默认为tabstop的值,也就是8。如果我们在vim中编辑文件时,我们想按tab键只显示四个宽度,那么我们可以设置softtabstop=4,如此一来,在插入模式下,按一个tab和按一次删除键,都是执行四个宽度,并且如果按两下tab,会转换为制表符。

结束

给出我的~/.vimrc中的配置

" 以下为高级语言(c, c++ ,java)配置
" 这些语言都是使用空格进行缩进,因此需要把制表符转换为空格
set expandtab
" 高级语言使用tab键缩进长度为4
set tabstop=4
" 高级语言的自动缩进也是4个空格的长度
set shiftwidth=4

" 以下为脚本的配置
" set noexpandtab
" set shiftwidth=4
" set tabstop=4

" softtabstop只针对不是写代码的情况,例如需要打印的文档,配置如下
" set noexpandtab
" set tabstop=8
" set shiftwidth=4
" set softtabstop=4

现在你应该明白了tabstop, shiftwidth, expandtab, noexpandstop, softtabstop的意思吗?如果你还遇到其它问题,欢迎留言讨论。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vim进行多行缩进的方法有多种。首先,在.vimrc文件添加以下几行代码可以实现自动缩进和设置缩进的空格数: ``` set autoindent // 自动缩进 set shiftwidth=4 // 自动缩进空白字符个数 set softtabstop=4 // tab键的一个制表符,如果softtabstop=5,tabstop=4,则tab是1个制表符加1个空格的混合 set tabstop=4 // tab键的空格数 ``` 保存并退出.vimrc文件。这样,每次在Vim编辑文件时,会根据设置的缩进参数自动进行缩进。 另外,你也可以使用Visual Line模式进行多行缩进操作。首先,按下Ctrl + v组合键进入Visual Line模式,然后使用方向键选择多行。接着,按下<或>进行向前或向后缩进tab。如果你想缩进n个TAB,可以按下n<或n>来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Hacking Vim](https://download.csdn.net/download/huzhouhzy/5000716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vim配置——自动缩进(C/C++)](https://blog.csdn.net/weixin_44070137/article/details/107294439)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【VIM】多行缩进空格与删除](https://blog.csdn.net/qq_49643092/article/details/125160626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值