Вім дуже поступливий, коли справа доходить до вкладки Vs. просторові уподобання. Як я розумію, tabstopпараметр вказує ширину символу табуляції. У shiftwidthпараметр визначає , скільки стовпців для збільшення / зменшення при використанні <<і >>команди, в той час як softtabstopнастройка впливає на кількість прогалин , які будуть вставлені при натисканні Tabклавіші в режимі вставки. Якщо expandtabувімкнено, клавіша табуляції вставляє softtabstopкількість пробілів. Тоді як при expandtabвимкненому, натискання Tabклавіші вставляє найменшу можливу кількість символів табуляції та пробілу, що відповідає softtabstop. (Будь ласка, виправте мене, якщо я помиляюся.)
Цей останній момент змушує мене задуматися: чи є практичний випадок, коли ви не хотіли б shiftwidth == tabstop && tabstop == softtabstop? Я не можу придумати жодного. Що стосується мене, то було б найзручніше, якби я міг встановити для всіх 3-х однакове значення в одному присвоєнні. наприклад дзвінок:
:set stab=4
що було б еквівалентно запуску:
:set tabstop=4 softtabstop=4 shiftwidth=4
Хтось може підказати, як це можна зробити?
ОНОВЛЕННЯ
Дякую за відповіді поки що не надто багато php , hobbs та kaiser.se . Замість того, щоб відповідати кожному окремо, я оновлюю питання тут.
Softtabstop з вимкненою функцією розширення
Вище я сказав, що при вимкненому розширенні tab, натискання клавіші Tab вставляє найменшу можливу кількість символів табуляції та пробілу, що відповідає softtabstop. Я стою за цим, але думаю, що мені потрібно пояснити, що я мав на увазі. Я спробую зробити це на кількох прикладах. Щоб продовжити, запустіть :set listтак, щоб ви могли бачити символи табуляції.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
У режимі вставки натисканням клавіші табуляції вставляються 2 пробіли. Натисніть клавішу табуляції вдруге, і замість того, щоб вставити ще два пробіли (загалом 4 пробіли), він замінює попередні 2 пробіли одним символом табуляції. Tabstop встановлено на 4, тому один символ табуляції має однакову ширину, як 4 пробіли.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
У режимі вставки натисканням клавіші табуляції вставляється 1 символ табуляції та 2 пробіли. Символ табуляції має ширину 4, отже загальна ширина дорівнює 6, і це досягається за допомогою 3 символів. Друге натискання клавіші табуляції вставляє два символи табуляції та видаляє два пробіли, які були вставлені раніше. Загальна ширина - 12, і це досягається за допомогою 3 символів.
В обох цих прикладах Vim вставляє мінімально можливу кількість символів табуляції та пробілу, яка відповідає softtabstop.
Якщо я працюю з розширеною вкладкою вимкнено, я не бачу, що хочу додаткового детального контролю, якого можна досягти, встановивши для softtabstop значення, відмінне від tabstop. Це все одно буде корисно для мене , щоб бути в змозі встановити tabstop, softtabstopі shiftwidthдо того ж значенням за допомогою однієї команди.
Чи розширювальна вкладка робить softtabstop зайвим?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
У режимі вставки натисканням клавіші табуляції вставляється 4 пробіли. Натискання клавіші видалення призводить до видалення єдиного пробілу - тому вам доведеться повернутись 4 рази назад, якщо ви випадково натиснете клавішу табуляції.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
У режимі вставки натисканням клавіші табуляції вставляється 4 пробіли. Натисканням клавіші зворотного простору видаляються 4 пробіли.
Якщо я працюю з expandtabувімкненим, я віддаю перевагу клавіші видалення, щоб видалити ту ж кількість пробілів, що і вставки клавіші табуляції. Так що в цьому випадку теж, я вважаю , що було б корисно , щоб мати можливість привласнити однакове значення tabstop, softtabstopі shiftwidthодночасно.
Ярлик все одно буде корисним
Чудово, що Vim надає таку гнучкість, але я не бачу, щоб я це потребував. Я просто хочу мати можливість вибрати ширину вкладки, а також "жорстку" вкладку (з використанням символу табуляції) або "м'яку" вкладку (складається з пробілів). Перемикання між жорсткою та м'якою вкладками досить легко ( :set expandtab!), але я хотів би, щоб було простіше встановити ширину вкладки, не маючи при цьому возитися з 3 різними параметрами.
Тож пропонована мною пропозиція щодо чогось подібного :set stab=4мені все ще звучить добре.