CyberShadow wrote:Первый символ, так как операция идентации принципиально выполняется над целыми строками.
Т.е. если у меня выделения нет, строка “ bla”, каретка стоит на ‘b’ и я вызываю сдвиг вправо, то ничто никуда не сдвинется? Это неоптимально, ибо требует лишних действий (перехода в начало строки и возвращения обратно) для получения того же результата (что и при наличии предлагаемой логики). Предлагаемое мною поведение реализовано, например, в
Microsoft Visual C++, и на практике это действительно удобно.
CyberShadow wrote:при сдвиге вправо, копировать существующие пробельные символы (с начала строки или сверху)?
Моё предложение относится к сдвигу одной строки, и как его лучше распространить на выделение нескольких, надо будет ещё подумать. А для одной предлагается очень понятная вещь: скопировать из предшествующей строки имеющиеся там в этих же (экранных) позициях пробельные символы, притом ровно столько, сколько обеспечат заданный отступ. Т.е. чтобы результат был такой же, как если бы мы при включённой в
[ESC] опции AutoIndent перешли в конец предыдущей строки, нажали
Enter (тут происходит собственно выравнивание) и затем нажали
Del, тем самым приклеив изначальную строку к отступу.
CyberShadow wrote:Но вставки больше одной единицы сдвига идет вопреки того, что операции сдвига следуют быть симметричными.
А вот смысл этой фразы от меня ускользает. Прошу разъяснить.