Перевизначте вкладку як 4 пробіли


1094

Моє поточне налаштування передбачає 8 пробілів; як я міг би це переглянути?


4
А ще краще, встановіть його на чотири пробіли та ввімкніть автоматичне відступ одночасно: Автовідступ із шириною вкладки встановлено на 4 пробіли
solid_liq

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

40
@ heinrich5991 Мій аргумент - "використовувати якомога менше, щоб легко ідентифікувати відступні лінії". На мою оцінку, здатність легко ідентифікувати відступ швидко падає на <3 пробіли, і він перестає збільшуватися на 4 просторах. Тому відступ, що перевищує 4 місця, є моїм досвідом.
weberc2

7
@ weberc2 Не могла б більше погодитися, друже. Ось чому я відчуваю таке прокляте клаустрофобічне читання Ruby або "сучасного JavaScript", кожен з яких використовує 2-пробіли для відступу. Це правомірно надає мені напруги очей при спробі дотримуватися сильно вкладених структур. Жорсткі вкладки для проклятого перемоги.

Відповіді:


1615

Це залежить від того, що ви маєте на увазі. Чи хочете, щоб фактичні символи вкладки у вашому файлі відображалися на 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 / ...
Шервин EMAMI

29
@Undefined Це налаштування системного vim. ~/.vimrc- налаштування vim користувача. Більшість людей залишають налаштування системи в спокої і просто редагують налаштування користувача. Зауважте, що ~/.vimrcце не буде, поки ви не створите його в більшості систем.
Лоранс Гонсалвс

4
Користувачі Vim беруть до уваги цю set softtabstop=4функцію! Мені набридло намагатися читати ваш код з lessбудь-яким іншим редактором, окрім того vim, щоб побачити нерозумне відступ, тому що ви переосмислили вкладку як деяку кількість довільних пробілів (хоча решта системи думає інакше)! :-)
Огр Псалом3333

6
Чи може хтось допомогти мені зрозуміти, чому ця відповідь говорить tabstop=8про відступи, які складаються з 4 пробілів? Я не зміг зрозуміти причину, прочитавши описи різних налаштувань. Ще одна відповідь говорить про використання, tabstop=4яке має для мене трохи більше сенсу.
Кодос Джонсон

5
@KodosJohnson tabstopОпція керує шириною символу жорсткої вкладки. Якщо ви хочете, щоб ваші відступи складалися з 4 символів пробілу, а не одного символу вкладки, який має 4-х ширину, то ширина символу вкладки не має значення - свого роду . На практиці ви, мабуть, хочете, щоб ширина символів вкладки відрізнялася від ширини відступів, щоб зменшити ймовірність того, що символи вкладки маскуються як належні відступи. ( list+ expandtabможе допомогти і тут). Також вкладки, що мають широку ширину 8-char, є "стандартним" - ваш термінал, Python та багато інших інструментів за замовчуванням для 8-char-wide-tabs.
Лоранс Гонсальв

744

Щоб визначити це на постійній основі для поточного користувача, створіть (або редагуйте) .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 конфігураційний файл є. Але майте на увазі, що зміна цього файлу спричинить глобальну конфігурацію.
Тодор Тодоров

4
Ще одна річ: використовувати :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()

Дивіться також: Перетворення вкладок у пробіли .


Ось ще один фрагмент від Wikia, який можна використовувати для перемикання між вкладками та пробілами :

" 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. Завжди тримайте «табустоп» у 8, встановлюйте «softtabstop» та «shiftwidth» на 4 (або 3 або що завгодно) та використовуйте «noexpandtab». Тоді Vim використовуватиме поєднання вкладок і пробілів, але вводить текст і буде вести себе так, як вкладка з’являється кожні 4 (або 3) символи.

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

  2. Встановіть 'tabstop' та 'shiftwidth' на все, що вам більше подобається, і використовуйте 'expandtab'. Таким чином ви завжди будете вставляти пробіли. Форматування ніколи не буде зіпсовано, коли буде змінено "табло".

  3. Встановіть "табло" та "ширину зсуву" на все, що вам зручніше, та використовуйте | modeline | щоб встановити ці значення при повторному редагуванні файлу. Працює лише при використанні Vim для редагування файлу.

  4. Завжди встановлюйте параметри "tabstop" і "shiftwidth" на одне і те ж значення і "noexpandtab". Тоді це повинно працювати (лише для початкових відступів) для будь-яких налаштувань табулетів, якими користуються люди. Можливо, буде непогано мати вкладки після першого вставленого непорожнього простору, якщо це зробити. В іншому випадку вирівняні коментарі будуть помилковими, коли змінено 'tabstop'.

Джерело:


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

3
Це чудово, але ви повинні зауважити, що це дословно від vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'або :help tabstopвід vim.
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. Ben Knoble

@ D.BenKnoble ви праві. я намагався. поки що я вважаю за краще заощадити свій час і нерви. не може перевірити , що саме працює з F10в , nanoале я завжди робити деякі трюки з економією (можливо , F10це рішення). чи він не працює screen? Не можу згадати, просто ненавиджу)
Василь Суріцов

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