vim制表符空格替换配置及注意事项

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:
set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)
set expandtab

对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
TAB替换为空格:
:set ts=4
:set expandtab
:%retab!

空格替换为TAB:
:set ts=4
:set noexpandtab
:%retab!

加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。


---------------------------------------------------------------------------------------------------------

一个程序员的心路历程

2010-09-07

一个关于Vim扩展TAB键的问题 - [技术前沿]

Tag: 技术前沿 VIM

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bigwhite.blogbus.com/logs/74509182.html

今天遇到一个奇怪的问题:明明我在.vimrc中开启了expandtab选项,但是当我编辑Makefile文件时,敲入的TAB就是无法被VIM自动转换为四个空格(已经设置tabstop=4,shiftwidth=4),通过":set expandtab?"查看该选项值也居然是"noexpandtab";编辑其他文件(如.c、.h文件甚至是无扩展名的文件)时expandtab却都是开启的,TAB也可被自动转换,百思不得其解!

最初怀疑是compatible的设置对expandtab产生了影响。打开我的.vimrc,发现我设置的是“set nocompatible”,“compatible”已经被关掉,不会对expandtab产生影响。又想了想,假设受影响,那么所有文件都应该受到影响才对,不应该只有Makefile这类文件受影响。

想到这里,突然开了窍!是不是我开启的文件类型检测导致的呢?我在.vimrc设置了"filetype plugin on"。又看了一下这个设置的相关Manual,虽然没有直接给出答案,但是顺藤摸瓜,我也找到了原因。

因为开启了文件类型检测,Vim在打开或新建一个文件时会自动判断文件的扩展名以确定文件类型,在$VIMRUNTIME/filetype.vim中搜索"Makefile",可看到如下脚本语句:
" Makefile
au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make

Vim将Makefile划归为"make"类型(setf make)。在$VIMRUNTIME/ftplugin下有一堆xxx.vim文件,我们从中可以找到make.vim,这个文件就是VIM针对make类型文件的设置,在打开或新建make类型文件时被VIM自动加载。

这个make.vim文件中有一行设置如下:
" Make sure a hard TAB is used, required for most make programs
setlocal noexpandtab softtabstop=0

见文知义!果不其然,就是这个问题。又试验了一下,将.vimrc中的“filetype plugin on”注释掉,再打开Makefile文件,TAB就可以被自动转换为四个空格了。

回头一想,VIM针对make类型文件设置了noexpandtab也不无道理,编写过Makefile的朋友都知道,Makefile的基本组成结构就是:
target ... : prerequisites ...
    command
    ...
    ...
其中Makefile语法要求command前面必须放置一个TAB!否则解析失败!

这回真相大白了^_^


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值