Переопределить вкладку как 4 пробела


1096

Моя текущая настройка предполагает 8 пробелов; как я мог переопределить это?


4
А еще лучше, установите его на четыре пробела и включите авто-отступ одновременно: Авто-отступ с установленной шириной табуляции на 4 пробела
solid_liq

7
@ heinrich5991 Я не понимаю. Мне не нужно 8 пробелов, чтобы понять, что строка имеет отступ, и больше, чем необходимо, означает ограничение символов, которые вы можете просматривать на длинной строке текста (по крайней мере, перед переносом). Но каждому свое. :)
weberc2

40
@ heinrich5991 Мой аргумент - «используйте как можно меньше, чтобы легко идентифицировать строку с отступом». По моей оценке, способность легко идентифицировать отступ быстро падает при <3 пробелах и перестает увеличиваться в 4 пробелах. Следовательно, отступ, превышающий 4 пробела, по моему опыту - пустая трата времени.
weberc2

7
@ weberc2 Не могу согласиться, приятель. Вот почему я чувствую себя так чертовски клаустрофобно, читая Ruby или «современный JavaScript», каждый из которых использует 2 пробела для отступов. Это на законных основаниях заставляет меня напрягать глаза, когда я пытаюсь следовать сильно вложенным структурам. Жесткие вкладки для проклятой победы.

Возможный дубликат Заменить Tab с
пробелами

Ответы:


1619

Смотря что ты имеешь в виду. Вы хотите, чтобы фактические символы табуляции в вашем файле отображались шириной в 4 пробела, или под «табулатурой» вы на самом деле подразумеваете отступ , генерируемый нажатием клавиши табуляции, в результате чего файл буквально содержит (до) 4 пробелов для каждую "вкладку" набираешь?

В зависимости от вашего ответа у вас должен работать один из следующих наборов настроек:

  • Для символов табуляции, которые появляются в 4 пробела :

    set tabstop=4
    

    Если вы используете реальный символ табуляции в исходном коде, вы, вероятно, также захотите эти настройки (на самом деле это настройки по умолчанию, но вы можете установить их для защиты):

    set softtabstop=0 noexpandtab
    

    Наконец, если вы хотите, чтобы отступ соответствовал одной вкладке, вы также должны использовать:

    set shiftwidth=4
    
  • Для отступов, которые состоят из 4 пробелов, но вводятся с помощью клавиши табуляции:

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

Чтобы сделать вышеуказанные настройки постоянными, добавьте эти строки в ваш vimrc .

Если вам нужно внести коррективы или просто хотите понять, что означают все эти опции, вот разбивка того, что означает каждая опция:

tabstop

Ширина жесткой табуляции, измеренная в «пробелах» - фактически (максимальная) ширина фактического символа табуляции.

shiftwidth

Размер «отступа». Он также измеряется пробелами, поэтому, если ваша кодовая база отступает от символов табуляции, вы хотите, shiftwidthчтобы количество символов табуляции было равно разу tabstop. Это также используется такими вещами, как =, >и <команды.

softtabstop

Установка этого значения в ненулевое значение, отличное от того, tabstopчто заставит клавишу табуляции (в режиме вставки) вставлять комбинацию пробелов (и, возможно, табуляции), чтобы имитировать табуляцию на этой ширине.

expandtab

Включение этого заставит клавишу табуляции (в режиме вставки) вставлять пробелы вместо символов табуляции. Это также влияет на поведение retabкоманды.

smarttab

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

Более подробную информацию о любом из них смотрите в vim (например ):help 'optionname':help 'tabstop'


18
Также важно убедиться, что в Makefiles всегда используются жесткие символы табуляции, в противном случае сборка не удастся! Я показал, как, на stackoverflow.com/questions/234564/…
Шервин Эмами

30
@ Не определено Это системные настройки vim. ~/.vimrcэто настройки пользователя vim. Большинство людей оставляют системные настройки в покое и просто редактируют пользовательские настройки. Обратите внимание, что ~/.vimrcне будет существовать, пока вы не создадите его в большинстве систем.
Лоуренс Гонсалвес

4
Пользователи Vim принимают к сведению эту set softtabstop=4функцию! Я устал от чтения вашего кода с помощью lessлюбого другого редактора, кроме как vimтолько для того , чтобы увидеть дурацкие отступы, потому что вы переопределили tab как произвольное количество пробелов (даже если остальная часть системы думает иначе)! :-)
Огрский псалом33

7
Может кто-нибудь помочь мне понять, почему этот ответ говорит использовать tabstop=8для отступов, которые состоят из 4 пробелов? Я не смог понять причину после прочтения описаний различных настроек. Другой ответ говорит об использовании, tabstop=4что имеет немного больше смысла для меня.
Кодос Джонсон

6
@KodosJohnson tabstopОпция контролирует ширину жесткого символа табуляции. Если вы хотите, чтобы ваши отступы состояли из 4 пробельных символов, а не одиночных символов табуляции, которые имеют ширину 4, тогда ширина символа табуляции не имеет значения - вроде . На практике вы, вероятно, хотите, чтобы ширина символов табуляции отличалась от ширины ваших отступов, чтобы уменьшить вероятность маскировки символов табуляции как правильных отступов. ( list+ expandtabможет помочь и здесь) Кроме того, вкладки шириной 8 символов являются «стандартными» - ваш терминал, Python и многие другие инструменты по умолчанию используют вкладки шириной 8 символов.
Лоуренс Гонсалвес

747

Чтобы определить это на постоянной основе для текущего пользователя, создайте (или отредактируйте) .vimrcфайл:

$ vim ~/.vimrc

Затем вставьте приведенную ниже конфигурацию в файл. После перезапуска vim будут применены настройки вкладки.

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces

Если у вас нет ~ / .vimrc, попробуйте с / etc / vim / vimrc. В моем случае на Ubuntu 16.04 есть файл конфигурации. Но имейте в виду, что изменение этого файла приведет к глобальному использованию конфигурации.
Тодор Тодоров

5
Еще одна вещь, используйте :retabдля преобразования существующих tabв spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong


28

Есть несколько настроек, которые определяют, использовать ли пробелы или табуляции.

Итак, вот удобные функции, которые могут быть определены в вашем ~/.vimrcфайле:

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

Применение:

:call UseTabs()
:call UseSpaces()

Чтобы использовать его для каждого расширения файла, можно использовать следующий синтаксис (добавленный в .vimrc):

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

Смотрите также: Преобразование вкладок в пробелы .


Вот еще один фрагмент из Викия, который можно использовать для переключения между символами табуляции и пробелами :

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

Это позволяет использовать 4 пробела для каждой вкладки и отображение F9для переключения настроек.


27

Я скопировал и вставил это в мой файл .vimrc:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

Первые 2 настройки означают, что когда я нажимаю клавишу Tab, я получаю 4 пробела. Третий параметр означает, что когда я делаю V>(то есть визуальный и отступ), я также получаю 4 пробела.

Не такой всеобъемлющий, как принятый ответ, но он может помочь людям, которые просто хотят что-то скопировать и вставить.


14

Поместите нужные параметры в ~ / .vimrc файл - см. Ниже некоторые рекомендации и рекомендации.

Существует четыре основных способа использования вкладок в Vim:

  1. Всегда держите «tabstop» на 8, установите «softtabstop» и «shiftwidth» на 4 (или 3 или что вы предпочитаете) и используйте «noexpandtab». Тогда Vim будет использовать комбинацию табуляции и пробелов, но при вводе будет вести себя так, как будто табуляция появляется каждые 4 (или 3) символа.

    Примечание. Установка значения «tabstop» на любое другое значение, кроме 8, может привести к тому, что ваш файл будет отображаться неправильно во многих местах (например, при его печати).

  2. Установите «tabstop» и «shiftwidth» на то, что вы предпочитаете, и используйте «expandtab». Таким образом, вы всегда будете вставлять пробелы. Форматирование никогда не будет испорчено при изменении tabstop.

  3. Установите «tabstop» и «shiftwidth» на то, что вы предпочитаете, и используйте | modeline | установить эти значения при повторном редактировании файла. Работает только при использовании Vim для редактирования файла.

  4. Всегда устанавливайте «tabstop» и «shiftwidth» на одно и то же значение, и «noexpandtab». Это должно сработать (только для начальных отступов) для любой настройки табуляции, которую используют люди. Возможно, было бы неплохо, чтобы после первой непустой вставки были вставлены пробелы, если вы сделаете это. В противном случае выровненные комментарии будут неправильными, если 'tabstop' изменен.

Источник:


+1 за объяснение, почему установка tabstop! = 8 может быть плохой!
Огр псалом33

3
Это замечательно, но вы должны заметить, что это дословно от vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'или от :help tabstopvim.
belacqua




2

Мой базовый ~ / .vimrc с комментарием:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 

0

Постоянно для всех пользователей (когда вы один на сервере):

# echo "set tabstop=4" >> /etc/vim/vimrc

Обычно на новом сервере apt-get purge nano mcи все остальное, чтобы сэкономить ваше время. В противном случае вы переопределите редактор gitи crontabт. Д.


1
Если вы установите EDITOR, большинство программ будут уважать его.
Д. Бен Кнобл

@ D.BenKnoble ты прав. я пробовал. сейчас я предпочитаю экономить свое время и нервы. не могу проверить, что именно работает с F10in, nanoно я всегда делаю некоторые трюки с сохранением (возможно F10, это решение). или это не работает screen? Я не помню, просто ненавижу это)
Василий Суриков

в любом случае это в прошлом ...
Василий Суриков
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.