Теснить в Vim на строке с отступом

У меня есть дурная привычка к использованию 'домашнего' ключа для возвращения к началу строки. Когда я недавно начал использовать энергию, я заметил, что, когда я нажимаю клавишу Home на выровненном, которое располагается с отступом, она возвращает меня самому началу строки. В Блокноте ++ (редактор я раньше использовал) это возвратит меня началу кода той строки, прямо после отступа.

Там некоторый путь состоит в том, чтобы копировать это поведение в энергии? Обычно, когда я тесню, это находится в Режиме вставки для меня, чтобы (обычно) засунуть переменную там.

Я имею set smartindent в моем vimrc, с set noautoindent поскольку страница "подсказок" сказала мне удостоверяться, что отключил автоматический отступ (хотя это, казалось, не было включено во-первых - возможно, что опция является посторонней.)

16
задан Vadim Kotov 5 July 2017 в 17:30
поделиться

3 ответа

Есть два обычных способа перейти к "началу" линии в Vim:

  • 0 (ноль) переходим к первому столбцу текста
  • ^ переходим к первому небелому символу в строке

Я нахожу, что использование 0w обычно наиболее удобный для меня способ перейти к первому непустому символу в строке, это то же самое количество клавиш, что и ^, и к нему легче добраться. (Конечно, если в строке нет лидирующих пробелов, не нажимайте w.)

.
30
ответ дан 30 November 2019 в 15:32
поделиться

Попробуйте нажать 0 (также см. :help 0)

также это может помочь:

:imap <C-Home> <esc>0a
1
ответ дан 30 November 2019 в 15:32
поделиться

Вы можете переназначить Home, чтобы он был таким же, как ^ (в документации сказано, что функция по умолчанию Home эквивалентна команде перемещения 1|):

:map <Home> ^  
:imap <Home> <Esc>^i  

Что должно сделать отображение режима вставки эквивалентным выходу из режима вставки, нажатию ^, а затем возврату в режим вставки. Я не знаю лучшего метода отображения команды движения для использования внутри режима вставки, так что это может что-то нарушить, но, похоже, это работает.

Что касается настроек отступов, они не должны влиять на управление движением, но я также думаю, что вы, вероятно, предпочли бы установить их по-другому. autoindent просто сохраняет текущий отступ для новых строк (так что если вы поместите 4 пробела в начало строки, после нажатия кнопки return ваша новая строка также будет иметь 4 пробела перед ней). Я не знаю, почему вы не хотите этого, так как это довольно полезно практически в любом языке программирования или даже просто в тексте свободной формы. smartindent, с другой стороны, реализует пару жестко закодированных правил отступа на языке C, например, отступ после открывающего { и отступ после закрывающего }, но не переносит автоматически отступ с предыдущих строк. Документация рекомендует не отключать автоиндент, если вы используете smartindent.

Однако smartindent бесполезен для языков, которые не соответствуют его жестко заданным правилам, или даже активно вреден (например, когда он автоматически удаляет отступ от любой строки, начинающейся с '#', что, по его мнению, является директивой препроцессора, но неверно для программистов python, пытающихся написать комментарий с отступом).

Поэтому vim также включает более продвинутый режим отступов, отступы по типу файла, который позволяет гибкие правила отступов на основе каждого языка/типа файла и является предпочтительным режимом отступов для большинства людей (даже для C-подобных языков). Если вы используете отступы по типу файла, лучше отключить smartindent (иначе он может нарушить отступы по типу файла, например, переместить все строки комментариев в колонку 0 в файлах python).

Лично я всегда включаю автоиндент, использую filetype, когда это возможно, и никогда не использую 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 включался только тогда, когда отступы filetype не существуют для типа файла, если вы редактируете так много различных C-подобных языков, где отступы filetype недоступны.

13
ответ дан 30 November 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: