18

Я редактирую код Python с помощью Vim.

С помощью клавиши табуляции я получаю четыре пробела для отступа. Как я могу удалить эти пробелы одним "Backspace"(?) инсульт - вместо четырех?

Для этого должна быть какая-то опция "set" ...

Вот мой .vimrc:

set autoindent
set ts=4
set sw=4
set et

8 ответов8

29
set softtabstop=4
23

Вы можете использовать Ctrl+D, чтобы сделать резервную копию одной табуляции. Это фактически перемещает всю строку влево на одну позицию табуляции; Ctrl+T делает то же самое с правой стороны. Обратите внимание, что эти нажатия клавиш работают только в режиме вставки (используйте << и >> для эквивалента в командном режиме).

4

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

краткая форма: set ts=4 sts=-1 sw=0 et

объяснение

Если вы установите softtabstop (или sts) на -1 он будет автоматически вести себя так же, как tabstop (ts), что избавит вас от хлопот, если вы сильно измените табуляции. Установка shiftwidth (sw) в 0 должна эффективно сделать то же самое, что и tabstop .

В деталях

shiftwidth sw

Количество пробелов для каждого шага (авто) отступа. Используется для cindent , >> , << и т.д.
Когда ноль, будет использовано значение tabstop .

tabstop ts

Количество пробелов, которые в файле учитываются. Также смотрите : команда retab и опция softtabstop .

softtabstop sts

Количество пробелов, на которые рассчитывает вкладка при выполнении операций редактирования, таких как вставка вкладки или использование BS. Такое ощущение, что вкладки Tab вставляются, хотя на самом деле используется комбинация пробелов и s. Это полезно для того, чтобы tabs настраивались на стандартное значение, и в то же время могли редактировать, как для sts . Когда sts отрицательно, используется значение shiftwidth . Это избавит вас от хлопот, если вы сильно меняете табуляции. Если не expandtab , количество пробелов минимизируется с помощью табуляции.

expandtab et

В режиме вставки: используйте соответствующее количество пробелов для вставки. Пробелы используются в отступах с помощью команд > и < и при autoindent . Чтобы вставить реальную вкладку при expandtab , используйте Ctrl - V Tab . Смотрите также : retab

2

Я написал GreedyBackspace.vim для тех, кто хотел что-то подобное. Лично я не пользуюсь им, так что я давно его обновил. Я не получил никаких сообщений об ошибках в последнее время, хотя.

1

Несколько вариантов:

  1. Вы можете «восстановить» все пробелы, чтобы они были заменены на вкладки. Таким образом, они могут быть легко удалены.
  2. Вы могли бы (это не проверено, поэтому я просто предлагаю идеи здесь) сделать функцию, которая 'выполняет в нормальном режиме 4 раза клавишу возврата. Затем сопоставьте это с чем-то. Однако он не может знать, будут ли удаляться пробелы или некоторые важные символы, так что это потенциально небезопасно.
  3. «4X» удалит последние 4 символа (это большой X, а не маленький, маленький будет действовать как клавиша Del ».
0

Самый простой способ - << , повторите с .

-1

Вы проверили, используя настройки расширенных вкладок в VIM?

:set noet

Я обычно предпочитаю держать вкладки во время работы с файлами.
Когда это требуется, я заменяю вкладки на 4 пробела или столько, сколько требуется.

:%s/<ctrl+V><tab>/    /g
                  ----

В качестве небольшого бонуса, ваш исходный файл короче на 3 символа на вкладку :-)

-2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .