Вкладки и пробелы в vim

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
71
0
85 398
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Standard vi interprets the tab key literally, but there are popular vi-derived alternatives that are smarter, like vim. To get vim to interpret tab as an ``indent'' command instead of an insert-a-tab command, do this:

set softtabstop=2
Ответ принят как подходящий

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

: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.

Стоит отметить, что вкладки по-прежнему вставляются в режиме вставки. Хотя в этом есть смысл, мне потребовалась целая вечность, чтобы понять, откуда взялись эти надоедливые вкладки. Совет профессионала:: установить список: установить listchars = tab:> -

quartarian 29.03.2017 23:50

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

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

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

all I want is the autoindented line to have exactly the same indentation characters as the previous line.

:help copyindent

'copyindent''ci'boolean (default off); local to buffer; {not in Vi}

Copy the structure of the existing lines indent when autoindenting a new line. Normally the new indent is reconstructed by a series of tabs followed by spaces as required (unless 'expandtab' is enabled, in which case only spaces are used). Enabling this option makes the new line copy whatever characters were used for indenting on the existing line. If the new indent is greater than on the existing line, the remaining space is filled in the normal manner.

NOTE: 'copyindent' is reset when 'compatible' is set.
Also see 'preserveindent'.

:help preserveindent

'preserveindent''pi'boolean (default off); local to buffer; {not in Vi}

When changing the indent of the current line, preserve as much of the indent structure as possible. Normally the indent is replaced by a series of tabs followed by spaces as required (unless 'expandtab' is enabled, in which case only spaces are used). Enabling this option means the indent will preserve as many existing characters as possible for indenting, and only add additional tabs or spaces as required.

NOTE: When using ">>" multiple times the resulting indent is a mix of tabs and spaces. You might not like this.
NOTE: 'preserveindent' is reset when 'compatible' is set.
Also see 'copyindent'.
Use :retab to clean up white space.

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

«Супер ретаб»: :retab преобразует все последовательности табуляции или пробелов, даже те, которые могут быть в «подобной строке в кавычках». Этот совет показывает, как преобразовать только отступы на левом поле. Пробелы или табуляции после первого небелого символа не затрагиваются.

Aaron Thoma 13.06.2011 22:23

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

:set et
:ret!

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

:set et!
:ret!

Приятно знать об этой команде. Раньше я исправлял свои «проблемы с питоном» с помощью gedit при копировании.

Nav 05.09.2011 16:07

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