Вопрос

Как мне запретить vim заменять пробелы табуляциями при включенном автоматическом указании?

Пример:если у меня есть две табуляции и 7 пробелов в начале строки, и tabstop=3, и я нажимаю Enter, в следующей строке четыре табуляции и 1 пробел в начале, но я этого не хочу...

Это было полезно?

Решение

Возможно, было бы хорошей идеей вообще не использовать вкладки.

:set expandtab

Если вы хотите заменить все табуляции в вашем файле на 3 пробела (что будет выглядеть очень похоже на tabstop=3):

:%s/^I/   /

(где ^I является ли ВКЛАДКА характер)

Из интерактивной справки VIM:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.

Другие советы

все, что я хочу, - это чтобы строка с автоиндентированием имела точно такие же символы отступа, как и предыдущая строка.

:help copyindent

"копииндент" 'ci' логическое значение (по умолчанию выключено);локальный для буфера;{не в Vi}

Скопируйте структуру существующей линии отступа при autoindenting в новая линия.Обычно новый отступ восстанавливается с помощью серии табуляций, за которыми по мере необходимости следуют пробелы (если только "расширяемая вкладка" включен, в этом случае используются только пробелы).При включении этой опции в новой строке копируются все символы, которые использовались для отступа в существующей строке.Если новый отступ больше, чем в существующей строке , оставшееся пространство заполняется обычным способом.

ПРИМЕЧАНИЕ: "копииндент" сбрасывается, когда "совместимый" установлен.
Также смотрите "сохраняемый объект".

:help preserveindent

"сохраняемый объект" "пи" логическое значение (по умолчанию выключено);локальный для буфера;{не в Vi}

При изменении отступа текущей строки сохраняйте как можно больше структуры отступа.Обычно отступ заменяется на последовательность табуляций, за которыми по мере необходимости следуют пробелы (если только "расширяемая вкладка" включен , в этом случае используются только пробелы).Включение этой опции означает, что отступ сохранит как можно больше существующих символов для отступа и добавит дополнительные символы табуляции или пробелы только по мере необходимости.

ПРИМЕЧАНИЕ:При многократном использовании ">>" результирующий отступ представляет собой сочетание табуляции и пробелов.Вам это может не понравиться.
ПРИМЕЧАНИЕ: "сохраняемый объект" сбрасывается, когда "совместимый" установлен.
Также смотрите "копииндент".
Используйте: повторное нажатие для очистки пустого пространства.

Вы можете преобразовать все TAB Для SPACE

:set et
:ret!

или преобразовать все SPACE Для TAB

:set et!
:ret!

Вот часть моего .vimrc:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Это хорошо работает для меня, потому что я абсолютно не хочу, чтобы в моем исходном коде были вкладки.Из вашего вопроса следует, что вы действительно хотите сохранить две вкладки и семь пробелов в следующей строке, и я не уверен, что есть способ научить vim приспосабливаться к этому стилю.

Может быть, суть этого может вам помочь?

Стандартный vi интерпретирует клавишу tab буквально, но существуют популярные альтернативы, производные от vi, которые являются более умными, например vim.Чтобы заставить vim интерпретировать tab как команду `отступ" вместо команды insert-a-tab, сделайте это:

set softtabstop=2

Если вы хотите заменить все табуляции пробелами в зависимости от параметра 'ts', вы можете использовать :retab .Он также может сделать обратное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top