Может кто-нибудь объяснить, почему не работает софттабстоп и есть другие пробелы в понимании? - PullRequest
0 голосов
/ 10 октября 2019

Я прочитал следующие статьи:

  1. http://vimcasts.org/episodes/tabs-and-spaces/
  2. https://medium.com/@arisweedler/tab-settings-in-vim-1ea0863c5990

Чтобы попытаться понять, что такое tabstop, shiftwidth и softtabstop означают. Вот что я понял:

  1. tabstop устанавливает способ отображения вкладки в редакторе vim. Если у вас set ts=4, то при нажатии клавиши табуляции на клавиатуре будет выглядеть 4 пробела. Если у вас set ts=50, то при каждом нажатии клавиши Tab это будет выглядеть так, что вы получите 50 пробелов. В случае, если у вас set expandtab, символы будут 50 пробелами, в противном случае у вас будет только 1 символ табуляции, который выглядит как 50 пробелов (так что всего 1 байт из ASCII?, Немного странно).

  2. shiftwidth устанавливает размер отступа для таких вещей, как <<, >>, ==, а также для автоматического отступа. Таким образом, это означает, что вы знаете, что если у вас есть set sw=5 и, скажем, ts=4, то, когда набирается >>, он помещает в 1 табуляцию и 1 пробел и выполняет некоторую математику как таковую.

  3. softtabstop Я не уверен в этом. Из того, что я прочитал, источники, похоже, имеют разные объяснения.

Источник 1 говорит:

Если вы предпочитаете работать с символами табуляции, то этохорошая идея, чтобы убедиться, что tabstop == softtabstop. Это снижает вероятность того, что вы получите смесь вкладок и пробелов для отступа.

Если вы предпочитаете работать с пробелами, то лучше убедиться, что softtabstop == shiftwidth. Таким образом, можно ожидать, что будет вставлено одинаковое количество пробелов, независимо от того, нажимаете ли вы клавишу табуляции в режиме вставки или используете команды отступа в обычном / визуальном режимах.

Источник 2 говорит:

softtabstop: упоминается для клавиши табуляции и клавиши возврата. Сколько пробелов нужно вставить при нажатии клавиши табуляции? И сколько пробелов нужно удалить при нажатии клавиши возврата?

Прежде всего, я действительно не знаю, как совместить источник 1 и источник 2. Почему shiftwidth имеет значение (источник1), если мы делаем это только для клавиши Tab и клавиши Backspace (источник 2). Символ shiftwidth должен контролировать, сколько места добавляется во время >> и т. Д., Верно? Почему это имеет значение для пробелов?

«Если вы предпочитаете работать с символами табуляции, то неплохо бы убедиться, что tabstop == softtabstop.»: Этот тип имеет смысл. softtabstop определяет, сколько места занимает каждое нажатие клавиши Tab, и если между tabstop и softtabstop есть разногласия, мы можем использовать пробелы для выравнивания.

Наконец, я пыталсянекоторые примеры из источника 2 внизу. (Обратите внимание, что в моем vimrc есть следующие строки, и только эта строка влияет на пробелы: set tabstop=4 shiftwidth=4 expandtab)

В новый файл я внес следующие изменения:

:set ts=5 sts=3
:retab

Когда я нажалКлавиша Tab, в отличие от того, что сказал автор статьи 2, я получил 4 пробела, а не 3. Так он сказал что-то не так? Затем я установил shiftwidth на 3, и СЕЙЧАС я получал 3 пробела, когда нажимал клавишу табуляции (а также когда делал >>). Я не знаю значение этого. Был ли он неправ?

Основываясь на этих наблюдениях, кто-нибудь может сказать мне, что на самом деле делает sts? Когда у нас есть символ табуляции независимо от того, что ts это всегда 1 байт? Влияет ли sw на нажатие клавиши Tab? Есть ли у меня какое-либо другое недопонимание относительно этих параметров? Вим тяжело.

1 Ответ

0 голосов
/ 10 октября 2019

Если вы установили ts = 50, то при каждом нажатии клавиши Tab будет выглядеть так, что вы получите 50 пробелов.

Нет. При вставке новых вкладок Vim это опция softtabstop, которая вступает в игру. Но значение sts пересчитывается в ts единицу. Так что если у вас есть ts=50 и sts=100 (а также, конечно, noexpandtab), вы получите 2 жесткие вкладки (\x9 байт) в буфере.

Чтобы отключить эту функцию, вы можете set sts=0. В этом случае вкладка будет просто вкладкой / tabstop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...