Табуляции и пробелов в Vim



Как предотвратить vim от замены пробелов с вкладками, когда автоиндент включен?



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

662   6  

6 ответов:

Это, пожалуй, хорошая идея не использовать вкладки вообще.

:set expandtab

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

:%s/^I/   /

(где ^I - это TAB символ)

из интерактивной справки 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

'copyindent' 'ci' boolean (по умолчанию выкл); локально в буфер; {не в Vi}

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

Примечание: 'copyindent' сбрасывается, когда 'совместимый' установлен.
Также видеть 'preserveindent'.

:help preserveindent

'preserveindent' 'pi' boolean (по умолчанию выкл); локально в буфер; {не в Vi}

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

Примечание: при использовании ">>" несколько раз результирующий отступ представляет собой смесь вкладки и пробелы. Тебе это может не понравиться.
Примечание:'preserveindent' сбрасывается, когда 'совместимый' установлен.
Также видеть 'copyindent'.
Использование: retab для очистки белого пространства.

вы можете конвертировать все 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. Он также может сделать обратное.

Comments

    Ничего не найдено.