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

11797
Evgeny

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

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

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

Вот мой .vimrc:

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

8 ответов на вопрос

29
sf17k
set softtabstop=4 
ИМО, это именно то, о чем просил ОП. Заслуживает больше голосов. Ludwig Weinzierl 12 лет назад 10
Это правильный ответ. mk12 12 лет назад 2
Не знал об этом, и это было именно то, что я искал. +1 NigoroJr 9 лет назад 1
23
Greg Hewgill

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

4
Orwellophile

ТЛ; др: 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 никогда не бросалось в глаза. timss 7 лет назад 0
2
Heptite

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

1
Rook

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

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

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

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

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

:set noet 

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

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

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

о, у меня есть et, потому что мне нужно расширять вкладки - я думаю - потому что код, который я редактирую, изначально был написан именно так. теперь я просто следую этому соглашению. Evgeny 15 лет назад 0
Вы все еще можете делать то, что я говорю, и восстанавливать пробелы в конце (когда вам нужно вернуть файл в хранилище) nik 15 лет назад 0
Может быть, у вас может быть функция vim, которая расширяет их до открытых вкладок и сворачивает до пробелов при закрытии? У кого-нибудь есть идеи? sixtyfootersdude 14 лет назад 0
Это действительно бесполезный ответ - он без необходимости заново открывает дебаты «tabs-vs-space», фактически не предоставляя никакой полезной информации. Dietrich Epp 8 лет назад 0
-2
David Mackintosh

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

-1: недостаток фантазии. sixtyfootersdude 14 лет назад 4

Похожие вопросы