即使我按下退格键,如何让 VI 使用空格而不是制表符?

即使我按下退格键,如何让 VI 使用空格而不是制表符?

当我尝试使用时yml,它要求无 TAB,仅需空格策略。我意识到我需要为此进行特殊设置。

无论如何,我不能没有标签。所以我想让我的 VI 表现得像这样。

  • 当我按下tab键时,输入许多按制表位对齐的空格字符。
  • 当我按下backspace键时,删除许多与制表位对齐的空格字符。

我如何存档此功能?

答案1

原始 vi: 不知道et,您可以尝试使用不同的ts(tabstop) 和(shiftwidth,即一行或文本块的缩进sw量)。基本上,只要将 sw 设置为低于分配给 ts 的值(通常是其一小部分),缩进就会使用空格而不是制表符。请注意,当多个 shift 加起来达到一个完整的制表位时,将在该位置使用制表符。两者的默认值均为 8,许多其他命令(例如 expand)都以此为基础,因此,使用混合制表符和空格编写的文本(其中 ts 已调整)在稍后使用不同的制表位设置查看时可能会错位。为了实现您的目标,您可以先使用将所有制表位替换为空格,然后将文本拉入 vi,并尝试这些设置是否适合您。如果它们适合您,您可以通过将它们写入您的 vi 中来使它们永久存在<<>>/bin/expand:set sw=4,ts=20.exrc

另一种方法可以让您按照自己喜欢的方式使用 tab 和 backspace (而不是使用 和 进行移位<<>>,即允许您按照自己喜欢的方式编写文本,并/bin/expand在使用 yml 处理之前通过管道传输它,将其作为命令链的一部分,或者从 vi 内部传输:

:1,$!expand

在 vim 中: 您可以使用et已经建议的 (expandtab) 设置,甚至可以通过取消内置函数将所有制表符转换为空格(这样做的好处是可以知道您的制表位设置,以防您调整它们,而不必根据需要明确告知expand)。

:set et|retab

其他有趣的设置包括sts(softtabstop) 和smarttab,所有这些设置都可以根据你的需要进行调整,甚至ai(autoindent) 也会表现一致并显示空格而不是制表符。

:set et
:set sw=3
:set sts=3
:set smarttab
:set ai

或者,用一行代码:

:set et sw=3 sts=3 smarttab ai

再次,一旦您同意这些设置,请将它们放入您的.vimrc

答案2

:set et 

您必须放弃backspace并使用< <

您也许能够将退格键映射到取消缩进,但可能会产生不良后果。

相关内容