Видалити розширену "пробіл" у Vim одним натисканням клавіші?


19

Я редагую Python- код за допомогою Vim.

За допомогою tabключа я отримую чотири пробіли для вступу. Як я можу видалити ці пробіли одним штрихом "Backspace" (?) - замість чотирьох?

Для цього повинен бути якийсь "встановлений" варіант ...

Ось мій .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

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

Кількість пробілів, на які Tabвраховується під час виконання операцій редагування, наприклад, вставлення Tabчи використання BS. Складається враження, що Tabs вставляються, тоді як насправді використовується проміжок і s. Це корисно для того, щоб tabsналаштування було встановлено на стандартному значенні, при цьому можна було редагувати так, як встановлено sts. Коли stsвід'ємне значення shiftwidth, використовується значення. Це позбавить вас від клопоту, якщо сильно змінити вкладки. Коли expandtabне встановлено, кількість пробілів зменшується за допомогою Tabs.

expandtab et

У режимі вставки: використовуйте відповідну кількість пробілів, щоб вставити a. Простору використовуються в абзацах з >і <команд , і коли autoindentвключений. Щоб вставити реальну вкладку, коли expandtabвона увімкнена, використовуйте Ctrl- V Tab. Дивіться також : retab


Акуратно, я використовую vim протягом багатьох років, але успадкування STS / SW / t ніколи не потрапляло мені в очі.
таймс

2

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


1

Кілька варіантів:

  1. Ви можете «повторно позначити» всі пробіли, щоб вони були замінені вкладками. Таким чином їх можна було легко видалити.
  2. Ви можете (це неперевірено, тому я просто пропоную тут ідеї) зробити функцію, яка "виконує в звичайному режимі в 4 рази більше клавіші зворотної області". Потім картографуйте це на щось. Однак він не може знати, чи видалить пробіли чи важливі символи, тому це потенційно небезпечно.
  3. '4X' видалить останні 4 символи (це великий X, не маленький, маленький буде діяти як клавіша Del).

0

Найпростіший спосіб - <<повторити з a.


Привіт і ласкаво просимо до суперпользователя. Хоча я згоден з вашою відповіддю, що я сам користувач vi. Ваша відповідь коротка, не пояснює, чому ви пропонуєте те, що пропонуєте, і чому ви не пропонуєте щось, що відповідає заданому питанню.
Моггет

-1

Ви перевірили, використовуючи налаштування вкладок розширення у своєму VIM?

:set noet

Зазвичай я вважаю за краще тримати вкладки під час роботи над файлами.
Коли потрібно, я замінюю вкладки на 4 місця або стільки, скільки потрібно.

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

Як невеликий бонус, ваш вихідний файл коротший на 3 символи на вкладку :-)


ой, у мене є, тому що я маю розширювати вкладки - я думаю, - оскільки код, який я редагував, спочатку був написаний таким чином. тепер я лише дотримуюся цієї конвенції.
Євген

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

Може бути, у вас може бути функція vim, яка розширює їх на відкриті вкладки та згортає їх до пробілів при закритті? У когось є якісь ідеї?
шістдесят футів

Це дійсно непомітна відповідь - вона непотрібно відновлювати дебати вкладки проти простору, фактично не надаючи корисної інформації.
Дітріх Епп

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.