您可以重新映射Home为相同^(文档说Home的默认功能等同于移动命令1|):
:map <Home> ^
:imap <Home> <Esc>^i
这应该使插入模式映射相当于退出插入模式,按下^然后返回插入模式。我不知道映射运动命令以在插入模式内使用的最佳方法,所以这可能会破坏某些东西,但它似乎有效。
至于你的缩进设置,它们不应该对运动控制产生影响,但我也认为你可能更愿意让它们设置不同。autoindent 只是保留新行的当前缩进(因此,如果您在一行的开头放置 4 个空格,则在您按下回车后,您的新行也将在其前面放置 4 个空格)。我不知道你为什么不想要它,因为它在几乎任何编程语言中都非常有用,甚至只是自由格式的文本。另一方面,smartindent 实现了一些硬编码的轻 C-ish 缩进规则,例如在开始 { 后缩进,在结束 } 后缩进,但不会自动继承前一行的缩进。如果您使用 smartindent,文档建议保持自动缩进。
然而,smartindent 对于不符合其硬编码规则的语言是无用的,甚至是有害的(比如当它自动从任何以“#”开头的行中删除缩进时,它认为这是一个预处理器指令,但对python 程序员试图写一个缩进的注释)。
所以 vim 还包括一个更高级的缩进模式,文件类型缩进,它允许基于每种语言/文件类型的灵活缩进规则,并且是大多数人的首选缩进模式(即使对于类 C 语言)。如果您确实使用文件类型缩进,最好关闭 smartindent(否则它会干扰文件类型缩进,例如将所有注释行移动到 python 文件中的第 0 列)。
就个人而言,我总是启用自动缩进,在可用时使用文件类型,并且从不使用智能缩进。我的 .vimrc 包括:
set autoindent " doesn't interfere with filetype indents, and is useful for text
if has("autocmd")
" Enable file type detection and indentation
filetype plugin indent on
set nosmartindent
endif
我想只有当文件类型不存在文件类型缩进时,如果您正在编辑许多不同的类 C 语言而没有可用的文件类型缩进,您可以做一些事情来打开智能缩进。