Количество вкладок, которые я получаю после нажатия клавиши Tab в режиме вставки Vim - PullRequest
1 голос
/ 15 марта 2019

Я изучаю программирование на Си.

Я столкнулся с проблемой конфигурации vim.

Ниже приведены настройки vim, написанные на .vimrc:

set nu
set shiftwidth=4
set tabstop=4
set softtabstop=8
set autoindent
set cindent
set smartindent
syntax on

InЧтобы увидеть, где находятся вкладки, я использовал :set list:

#include <stdio.h>$
int main(void)$
{$
^Iprintf("ab\n");$
^Ireturn 0;$ 
}$

Теперь в строке 4 в режиме вставки я хочу посмотреть, сколько вкладок я могу получить после нажатия клавиши Tab в разных местах..

Вот результат:

Когда я бью Tab после n, я получаю ^Iprin^I^Itf("ab\n");$.

Когда я бью Tab после \n, я получаю ^Iprintf("ab\n^I^I");$.

Мне вполне понятны две вышеупомянутые ситуации.

Но когда я ударю Tab после a, я получаю ^Iprintf("a^Ib\n");$.

Это за пределами моего понимания.

Кто-нибудь может объяснить, почему заменена только одна вкладка?

Я думал, что должно быть двепотому что softtabstop занимает 8 пробелов, что в два раза больше tabstop (4).

1 Ответ

3 голосов
/ 15 марта 2019

Это результат взаимодействия между softtabstop и (обычным) tabstop.

Ваш softtabstop говорит, что при нажатии клавиши Tab результаты должны быть выровнены с кратными 8 столбцам. Когда вы нажимаете Tab после a, вы уже находитесь в столбце 13, поэтому для перехода достаточно одного символа вкладки шириной 4. В других случаях вы были на 16 и 8, соответственно, поэтому потребовалось два символа вкладки 4 ширины, чтобы выровнять их с мягкой вкладкой 8 ширины.

PS: если вы хотите странного поведения (конечно, не рекомендуется), установите tabstop=3 softtabstop=8. Затем вы получаете комбинации пробелов и символов табуляции при нажатии клавиши Tab.

PPS: Все это является частью того, почему я не люблю буквальные символы табуляции. Они нестабильны, их отображение зависит от настроек табуляции каждого разработчика. В моей организации я настаиваю на том, чтобы все использовали :set expandtab (или эквивалент в редакторе каждого разработчика) и использовали пробелы для стабильного и воспроизводимого отображения. Единственное место, где я допускаю символы табуляции в моей работе, это make-файлы, где у меня нет выбора.

...