{"id":367,"date":"2025-09-05T22:43:47","date_gmt":"2025-09-05T20:43:47","guid":{"rendered":"https:\/\/gieorgijewski.pl\/blog\/?p=367"},"modified":"2025-09-05T23:02:59","modified_gmt":"2025-09-05T21:02:59","slug":"vim-tabulator-kontra-spacje","status":"publish","type":"post","link":"https:\/\/gieorgijewski.pl\/blog\/vim-tabulator-kontra-spacje\/","title":{"rendered":"Vim: tabulator kontra spacje"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"393\" src=\"https:\/\/gieorgijewski.pl\/blog\/wp-content\/uploads\/2025\/08\/574ba840dd08955c2e8b4575.webp\" alt=\"tabs vs. spaces\" class=\"wp-image-369\" style=\"width:463px;height:auto\" srcset=\"https:\/\/gieorgijewski.pl\/blog\/wp-content\/uploads\/2025\/08\/574ba840dd08955c2e8b4575.webp 700w, https:\/\/gieorgijewski.pl\/blog\/wp-content\/uploads\/2025\/08\/574ba840dd08955c2e8b4575-300x168.webp 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<p>Ten problem wydawa\u0142 mi si\u0119 niespecjalnie istotny, a\u017c do niedawna gdy analizowa\u0142em, jak mam ustawi\u0107 swojego <strong>vima<\/strong> do wsp\u00f3\u0142pracy w naprawd\u0119 du\u017cym projekcie open source.<\/p>\n\n\n\n<p>Gdy pracuj\u0119 nad projektami s\u0142u\u017cbowo, mam oddzielne \u015brodowiska, ostatnio z &#8222;rozwijaniem&#8221; do czterech  spacji.<\/p>\n\n\n\n<p>Gdy pracuj\u0119 sam u\u017cywam wci\u0119\u0107 o szeroko\u015bci dw\u00f3ch spacji, naci\u015bni\u0119cia taba rozwijam automatycznie do spacji.<\/p>\n\n\n\n<p>Zupe\u0142nie przypadkiem pierwszy projekt OS, w kt\u00f3rym uczestniczy\u0142em mia\u0142 takie samo ustawienie. Chodzi o <a href=\"https:\/\/exercism.org\">exercism.org<\/a><\/p>\n\n\n\n<p>Jak to skonfigurowa\u0107 w Vim?<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bat\" data-enlighter-theme=\"godzilla\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> set tabstop =2\n set softtabstop =2\n set shiftwidth =2\n set expandtab\n set autoindent<\/pre>\n\n\n\n<p>Powy\u017cej to m\u00f3j standardowy wpis w pliku <code>~\/.vimrc<\/code>.<br>Opcja <code><a href=\"https:\/\/vimdoc.sourceforge.net\/htmldoc\/options.html#'tabstop'\">tabstop<\/a><\/code> oznacza ile spacji reprezentuje pojedy\u0144czy znak tabulacji w tek\u015bcie.<br>Wydaje si\u0119, \u017ce jest to proste w interpretacji, ale nic bardziej mylnego. Ja te\u017c uleg\u0142em takiemu wra\u017ceniu, niedok\u0142adnie czytaj\u0105c dokumentacj\u0119. Jak chcesz mo\u017cesz ju\u017c teraz klikn\u0105\u0107 w t\u0119 opcj\u0119 i <strong>dok\u0142adnie<\/strong> przeczyta\u0107 jej opis.<br>Opcja <code><a href=\"https:\/\/vimdoc.sourceforge.net\/htmldoc\/options.html#'softtabstop'\">softtabstop<\/a><\/code> domy\u015blnie jest ustawiona na 0 i wtedy <strong>tabstop<\/strong> si\u0119 tylko liczy. Niemniej, nie do ko\u0144ca rozumiej\u0105c do czego to s\u0142u\u017cy, ustawia\u0142em to na tyle samo, co tabstop, bo dla wci\u0119\u0107 dzia\u0142a\u0142o jak chcia\u0142em.<br>Trzecia opcja dzia\u0142aj\u0105ca wsp\u00f3lnie z pozosta\u0142ymi i wa\u017cna dla wci\u0119\u0107, to <code><a href=\"https:\/\/vimdoc.sourceforge.net\/htmldoc\/options.html#'expandtab'\">expandtab<\/a><\/code>.<br>To opcja typu w\u0142.\/wy\u0142., kt\u00f3r\u0105 wy\u0142\u0105cza si\u0119 <code>set noexpandtab<\/code> i ustawiona powoduje, \u017ce naci\u015bni\u0119cie tab wstawia spacje w to miejsce.<br>Ile spacji? Tyle ile wynosi <code>tabstop<\/code>, chyba, \u017ce <code>softtabstop<\/code> jest r\u00f3\u017cne od zera, to wtedy na <code>softtabstop<\/code>.<\/p>\n\n\n\n<p>No w\u0142a\u015bnie. Te opcje dzia\u0142aj\u0105 wsp\u00f3lnie, a jeszcze nie wspomnieli\u015bmy o <code>shiftwidth<\/code> i opcjach <code>*indent<\/code>!<\/p>\n\n\n\n<p>Podsumowuj\u0105c ten fragment. Powy\u017csza konfiguracja jest defensywna i wynika tylko z potrzeby wci\u0119\u0107 o wielko\u015bci dw\u00f3ch spacji na poziom. Utrudnia te\u017c wsp\u00f3\u0142prac\u0119 z innymi, kt\u00f3rzy u\u017cywaj\u0105 innych ustawie\u0144, w szczeg\u00f3lno\u015bci z tabami.<\/p>\n\n\n\n<p>Spr\u00f3buj\u0119 w nast\u0119pnym po\u015bcie poeksperymentowa\u0107 z takimi ustawieniami i z ch\u0119ci\u0105 te\u017c poczytam komentarze na ten temat, bo jestem ciekaw jak inni to ustawiaj\u0105.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gdzie odkrywam swoje pozorne zrozumienie konfiguracji Vima, a czytelnika namawiam do wsp\u00f3lnej wyprawy po zawi\u0142o\u015bciach tabulacji i wci\u0119\u0107.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54],"tags":[],"class_list":["post-367","post","type-post","status-publish","format-standard","hentry","category-narzedzia"],"_links":{"self":[{"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/posts\/367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/comments?post=367"}],"version-history":[{"count":34,"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/posts\/367\/revisions"}],"predecessor-version":[{"id":424,"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/posts\/367\/revisions\/424"}],"wp:attachment":[{"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/media?parent=367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/categories?post=367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gieorgijewski.pl\/blog\/wp-json\/wp\/v2\/tags?post=367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}