神奇的vim tab

我想到你说的问题了,但是我在debian中(windows下)也尝试过,但是依然是这个问题,所以我觉得是不是vim的原因?就是说可能vim就是设计成这样的?因为很少有人在第一行前三个字符中输入空格吧,就算是要输入也可以手动输入四个空格对吧,是不是这本身就是一个vim的问题,但是因为什么原因而暂时无法解决呢?

有仔细看了下你的帖子,才发现你第一行的空格是手打的啊,怪不得对不齐。如果所有空格都用tab键来插入,看看能对齐不。如果能对齐,就没问题。 其实vim的这个tab,并不是绝对的按一下输入4个空格,而是跟前文相关的。如果你在行首输入1个字符,按tab就插入3个空格;输入两个字符按tab就输入2个空格,以此类推。 为什么设计成这个样子?因为tab最初就是用来制表的,制表肯定要求每一列都对齐,但是每一列的每个单元格内容不一定一样长,所以就要求tab键“智能”一点,这样只要你一直按tab键来分隔每列文字,输入多行文字后,可以保证每列都齐,即使每个单元格的字符数不一样。

1 个赞

直接用 Emacs (逃)

这段 vim 配置没有问题,但是你 Host 系统肯定有什么乱七八糟的软件/配置,所以导致你在虚拟机和 VSCode 都受到干扰。

建议你换一台干净的电脑,不要安装360全家桶之类的玩意。

#!/usr/bin/env bash

WIDTH=${1:-8}
VIMRC=~/.vimrc-tab$WIDTH

cat<<EOF>$VIMRC
set nocompatible
set tabstop=$WIDTH
set shiftwidth=$WIDTH
set expandtab
set softtabstop=$WIDTH
set autoindent
EOF

vi -u $VIMRC

换一台新的电脑(鉴于你的虚拟机和 VSCode 都有问题,怀疑你的主机有安装键盘钩子之类的程序),把以上代码保存到 ~/vim-tab-testing.sh,然后尽情的测试把:

sh ~/vim-tab-testing.sh 4
sh ~/vim-tab-testing.sh 8
...

好的,十分感谢,我有时间就试试,并且告诉你结果

最后你说我用360,这是我来emacs-china黑的最惨的一次

1 个赞

:slight_smile:

首先先谢谢你,但是我在想我在vim中不是设置了tab=4个空格嘛,为什么vim不能按着我要的要求做,就是当我按tab的时候,vim直接输入四次空格,你的意思是说vim这样做是为了更加智能,为了让代码变得更加好看,有时候我发现vim确实很智能比如说{}这两个符号我输入的时候无论我是{asdfsadf}这样输入,还是这样输入 { asdfsafsadf } vim总是很智能,在我的印象中vim总是会根据上一个{或者}来判定你输入的位置

还有你最后一句话的意思是说,在vim中tab最重要的作用是对其?如果我输入多行文字vim的tab为了保证每列都齐,会让tab的空格数不一样吗?我目前碰见道德都是少,暂时没有碰见过多的情况

给你解释过了,按tab不是直接就输入4个空格,vim会根据前文来调整空格数。tab的作用就是列对齐。 如果你希望输入4个空格,直接 normal mode 下 4i 再按ESC, 或者敲4次空格键。

楼主,你到底知道不知道什么叫制表符? 如果只有 vim 是这效果,有可能是 vim 配置的问题,但如果 vscode 和记事本这些软件都有同样的问题,你就应该考虑你是不是理解错了制表符的作用。

没道理啊。。。我的vim就不是这样的

我用了插件indentLine做缩进可视化,可以很清楚的看出,缩进是对的。

:joy: