【问题标题】:Vim: Persistent IndentationVim:持续缩进
【发布时间】:2012-04-15 12:10:14
【问题描述】:

我的 Vim 配置文件中有 set smartindent,但我想修改 Vim 中自动制表符插入的一个方面。例如,假设我开始输入一个 for 循环:

1. for (auto& foo : bar) {
2.

点击回车后,Vim 会在第 2 行的开头插入一个制表符,这正是我想要的。但是如果意识到我需要跳转到文件中的其他位置来修改某些内容,然后返回到第 2 行,则该选项卡不再存在。时不时地按几次 Tab 并不是什么大问题,因为当我编写一个包含大量缩进的复杂算法时,不得不多次混搭 Tab 键可能会令人沮丧。

在执行自动缩进时,让 Vim 实际上写入一个选项卡到当前缓冲区的最佳解决方案是什么,而不是只让我有机会在我从上一个返回时插入选项卡行吗?

感谢您的帮助!

【问题讨论】:

  • 这个在很多地方都讨论过很多次了。检查this问题,它可能会帮助你。
  • 接受的答案所建议的 hack 问题是,当我输入“}”时,缩进不会自动向左移动一个单位。此外,在缩进消失的空行上使用ccS 仍然会使我处于行首。
  • 使用filetype indent on 而不是smartindent 很有可能获得更好的结果。 ccS 在这种情况下应该可以工作。来自 freenode 上的#vim 帮助频道:“你不是说愚蠢的吗?说真的,'smartindent' 是类 C 语法的过时选项。它已被 'cindent' 取代,并且设置 'cindent' 也会覆盖'smartindent'。Vim 对许多语言提供了开箱即用的缩进支持,并且在你的 .vimrc 中设置 'smartindent'(或 'cindent')可能会干扰这一点。使用 'filetype plugin indent on'并且快乐。”

标签: vim autocomplete auto-indent tabstop


【解决方案1】:

这看起来像是一种有意设计的行为。当用户跳开然后回到旧地方(Line 2)时,original tabs 丢失了。 用户可以移动到Line 1,而不是移动到第2行,然后按o,用户会自动缩进新的第2行。同时,用户可以使用 Vim 为map 甚至vimscript 提供的所有功能以一种新的方式来保留old tabs。由此,我很佩服 Vi/Vim 的设计。

简而言之,当跳转回Line: 1.时,按oNew indented Line 2. 出现。

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多