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

Mar*_*oij 2 vim indentation

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

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

        return 'world'
Run Code Online (Sandbox Code Playgroud)

我向左转,h或者Left Arrow,光标向左移动一个空格:

       ?return 'Hello, world'
Run Code Online (Sandbox Code Playgroud)

但是如果我使用制表符(0x09,noexpandtab),则光标会向左移动一个选项卡:

    ?   return 'Hello, world'
Run Code Online (Sandbox Code Playgroud)

我理解为什么会发生这种情况,但有没有办法在使用时获取标签行为expandtab?我从事的工作是一些expandtab常规项目,还有一些项目不是常规项目.我希望它是一致的.

我已经设置了smarttab,但这只会影响Backspace密钥.我的tabstop,, softtabstop和shiftwidth设置都设置为4.使用空白~/.vimrc没有区别.

Ing*_*kat 7

内置动作喜欢h并且<Left>总是按单个字符移动.为了获得你想要的行为,我看到两个选择:

  • 用具有那种"智能"的自定义映射覆盖这些运动.实现这一点肯定是可行的,但不是微不足道的.
  • 使用一组:autocmds,您可以转换此类缓冲区以在读取时使用制表符缩进,并在写入时转换回空格缩进.见:help retab-example.然后,内置的动作将<Tab>按照你的意愿工作(在那些s上).

或者,重新考虑您的方法.如果你对此感到困扰,我认为你在缩进中导航过多.我个人大多只是跳过它,w或者^重新启动,我使用<</ >>,它处理空间就好了.