要删除Vim中用空格键扩展的“选项卡”吗?


19

我用Vim 编辑Python代码。

使用tab密钥,我可以插入四个空格以进行缩进。如何删除一个空格而不是四个空格?

为此必须有一些“设置”选项。

这是我的.vimrc:

set autoindent
set ts=4
set sw=4
set et

Answers:


23

您可以Ctrl+D用来备份一个制表位。实际上,这会将整行移动到左侧的一个制表位;Ctrl+T在右边做同样的事情。请注意,这些击键仅在插入模式下有效(在命令模式下使用<<>>等效)。



5

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

简写: set ts=4 sts=-1 sw=0 et

说明

如果将softtabstop(或sts)设置为(或),-1它的行为将自动与tabstopts)相同,如果您对制表符进行了很多更改,它将为您节省一些麻烦。将shiftwidthsw)设置为也0应该有效地使其相同tabstop

详细地

shiftwidth sw

(自动)缩进的每个步骤要使用的空格数。使用cindent>><<
当零tabstop将被使用的价值。

tabstop ts

文件中a所占的空格数。另请参见 :retab命令和 softtabstop选项。

softtabstop sts

Tab执行编辑操作(例如插入Tab或使用)时计数所占的空格数BS。这 感觉就像Tab被插入S,而实际上使用的空间和s的组合。这对于将tabsis设置保持在其标准值非常有用,同时能够像将其设置为一样进行编辑stssts为负数时,使用的值shiftwidth如果您大量更改制表符,这将为您节省一些麻烦。如果expandtab未设置,则使用Tabs 最小化空格。

expandtab et

在插入模式下:使用适当数量的空格插入。空格用于缩进><命令以及何时autoindent打开。要在expandtab打开时插入真实标签,请使用Ctrl- V Tab。另请参阅 :retab


整洁,我已经使用vim多年了,但是sts / sw / ts的继承从未引起我的注意。
timss

2

我为想要这样的人写了GreedyBackspace.vim。我个人不使用它,所以自更新以来已有一段时间了。不过,最近我还没有收到任何错误报告。


1

几种选择:

  1. 您可以“重新制表”所有空格,以便将它们替换为制表符。这样就可以轻松删除它们。
  2. 您可以(未经测试,因此我仅在此处提出想法)可以使该函数在正常模式下“执行” 4倍于退格键。然后将其映射到某物。但是,它无法知道将删除空格还是删除一些重要字符,因此这可能是不安全的。
  3. “ 4X”将删除最后4个字符(即大X,不小,小字符将用作Del键)。

0

最简单的方法是<<,用.


您好,欢迎来到超级用户。尽管我同意您自己作为vi用户的回答。您的回答很简短,没有说明您为什么建议您所建议的内容以及为什么您不建议与所问问题相符的内容。
Mogget '16

-1

您是否已使用VIM中的展开标签设置进行检查?

:set noet

我通常更喜欢在处理文件时保持选项卡打开。
在需要时,我将制表符替换为4个空格或所需数量。

:%s/<ctrl+V><tab>/    /g
                  ----

作为一个小小的奖励,您的源文件每个选项卡短了3个字符 :-)


哦,我有是因为我必须扩展选项卡-我认为-因为我编辑的代码最初是用这种方式编写的。现在我只是遵循那个约定。
Evgeny

您仍然可以按照我说的做,最后恢复空格(当您必须将文件还给存储库时)
nik

也许您可以使用vim函数将其在打开时扩展为选项卡,在关闭时将其折叠为空格?有人有想法么?
stytyfootersdude”,2010年

这是一个无济于事的答案-不必要地重新打开tabs-vs-spaces辩论,而没有实际提供任何有用的信息。
Dietrich Epp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.