Вы можете переназначить Home таким же образом, как ^ (документы говорят: Home Функция по умолчанию эквивалентна команде перемещения 1 | ):
:map <Home> ^
:imap <Home> <Esc>^i
Что должно сделать сопоставление режима вставки эквивалентным выходу из режима вставки, нажав ^ и затем вернувшись в режим вставки. Я не знаю, как лучше всего отобразить команду движения для использования в режиме вставки, так что это может что-то сломать, но, похоже, работает.
Что касается ваших настроек отступов, они не должны влиять на элементы управления движением, но я также думаю, что вы, вероятно, предпочли бы, чтобы они были установлены по-другому. autoindent просто сохраняет ваш текущий отступ для новых строк (поэтому, если вы поместите 4 пробела в начале строки, после нажатия клавиши возврата в вашей новой строке также будет 4 пробела). Я не знаю, почему вы этого не хотите, поскольку это довольно полезно практически для любого языка программирования или даже для текста произвольной формы. smartindent, с другой стороны, реализует несколько жестко закодированных слегка правил C-ish, таких как отступ после открытия {и deindenting после закрытия}, но не переносит отступ из предыдущих строк. В документах рекомендуется использовать автоиндентирование, если вы используете smartindent.
Однако smartindent бесполезен для языков, которые не соответствуют его жестко заданным правилам или даже активно вредны (например, когда он автоматически удаляет отступы из любой строки, начинающейся с «#», которую он считает директивой препроцессора, но неправильно для программистов на Python, пытающихся написать комментарий с отступом).
Таким образом, vim также включает в себя более продвинутый режим отступа, отступ типа файла, который позволяет гибкие правила отступа для каждого языка / типа файла и является предпочтительным режимом отступа для большинства людей (даже для языков, подобных C). Если вы используете отступ типа файла, лучше отключить smartindent (иначе это может помешать отступу типа файла, например, перемещению всех строк комментариев в столбец 0 в файлах python).
Лично у меня всегда включен автоиндентирование, я использую тип файла, когда он доступен, и никогда не использую smartindent. Мой .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
Я полагаю, что вы могли бы сделать так, чтобы smartindent был включен только тогда, когда для типа файла не существует отступа для типа файла, если вы редактируете много разных C-подобных языков без отступа для типа файла.