如果我使用expandtab,如何在导航选项卡时获得相同的行为

时间:2014-12-17 12:05:42

标签: vim indentation

如果启用expandtab

,如何在导航标签中获得相同的行为?

例如,如果我的光标位于此示例中的第一个r,则假设有两个缩进级别,其中一个tabstop为4(█表示光标):

        return 'world'

我左转 h 左箭头,光标向左移动一个空格:

       █return 'Hello, world'

但如果我使用标签(0x09,noexpandtab),则光标会向左移动一个标签

    █   return 'Hello, world'

我理解为什么会发生这种情况,但有没有办法在使用expandtab时获取标签行为?我参与了一些expandtab是常态的项目,还有一些项目没有;我希望它是一致的。

我已设置smarttab,但这仅影响 Backspace 键。我的tabstopsofttabstopshiftwidth设置都设置为4.使用空~/.vimrc没有任何区别。

2 个答案:

答案 0 :(得分:7)

h<Left>等内置动作将始终按单个字符移动。为了得到你想要的行为,我看到两个选择:

  • 使用具有这种&#34;智能&#34;的自定义映射覆盖这些动作。实现这一点当然可行,但并非无足轻重。
  • 使用一组:autocmd,您可以转换此类缓冲区以在读取时使用制表符缩进,并在写入时转换回空格缩进。见:help retab-example。然后,内置的动作将会在您<Tab>的{​​{1}} s'上运行。

或者,重新考虑您的方法。如果您对此感到困扰,我认为您在缩进中导航过多。我个人大多只是使用w^跳过它,并且使用<< / >>来处理空格。

答案 1 :(得分:0)

除非您设置了listmode(:set list),否则光标通常位于正常模式下制表符的末尾。所以解决方案很简单,不要设置listmode。

这是我刚才注意到的事情。文档还说明了这一点(:h 'list'):

The cursor is displayed at the start of the space a Tab character
occupies, not at the end as usual in Normal mode.  To get this cursor
position while displaying Tabs with spaces, use: >
    :set list lcs=tab:\ \