Удалить расширенную пробелом вкладку в Vim одним нажатием клавиши?


19

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

С tabключом я получаю четыре пробела для отступа. Как я могу удалить эти пробелы одним ударом «Backspace» (?) Вместо четырех?

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

Вот мой .vimrc:

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

Ответы:


23

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


30
set softtabstop=4

10
ИМО, это именно то, о чем просил ОП. Заслуживает больше голосов.
Людвиг Вайнцерль

2
Это правильный ответ.
Mk12

1
Не знал об этом, и это было именно то, что я искал. +1
NigoroJr

5

ТЛ; др: 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

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

expandtab et

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


Отлично, я использую vim в течение многих лет, но наследование sts / sw / ts никогда не бросалось в глаза.
Тимс

2

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


1

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

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

0

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


Привет и добро пожаловать в суперпользователя. Хотя я согласен с вашим ответом, будучи самим пользователем vi. Ваш ответ короткий, не объясняет, почему вы предлагаете то, что вы предлагаете, и почему вы не предлагаете то, что соответствует заданному вопросу.
Mogget

-1

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

:set noet

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

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

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


о, у меня есть et, потому что мне нужно расширять вкладки - я думаю - потому что код, который я редактирую, изначально был написан именно так. теперь я просто следую этому соглашению.
Евгений

Вы все еще можете делать то, что я говорю, и восстанавливать пробелы в конце (когда вам нужно вернуть файл в хранилище)
Ник

Может быть, у вас может быть функция vim, которая расширяет их до открытых вкладок и сворачивает до пробелов при закрытии? У кого-нибудь есть идеи?
sixtyfootersdude

Это действительно бесполезный ответ - он без необходимости заново открывает дебаты «tabs-vs-space», фактически не предоставляя никакой полезной информации.
Дитрих Эпп

-2

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


4
-1: недостаток фантазии.
sixtyfootersdude
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.