如果启用expandtab
?
例如,如果我的光标位于此示例中的第一个r
,则假设有两个缩进级别,其中一个tabstop为4(█表示光标):
return 'world'
我左转 h 或左箭头,光标向左移动一个空格:
█return 'Hello, world'
但如果我使用标签(0x09,noexpandtab
),则光标会向左移动一个标签:
█ return 'Hello, world'
我理解为什么会发生这种情况,但有没有办法在使用expandtab
时获取标签行为?我参与了一些expandtab
是常态的项目,还有一些项目没有;我希望它是一致的。
我已设置smarttab
,但这仅影响 Backspace 键。我的tabstop
,softtabstop
和shiftwidth
设置都设置为4.使用空~/.vimrc
没有任何区别。
答案 0 :(得分:7)
h
和<Left>
等内置动作将始终按单个字符移动。为了得到你想要的行为,我看到两个选择:
: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:\ \