Przejdź do głównej zawartości

Kolorowanie Ruby w Vim

Hej, jakby ktoś był zainteresowany tym, jak włączyć kolorowanie kodu w vim to tak:

:syntax on

Autoformatowanie wcięć kodu w Ruby wymaga większego zachodu. najpierw trzeba upewnić się, że mamy wtyczkę vim-ruby załadowaną w vim:

Polecenie:

:scriptnames

Wyświetla coś takiego:

  1: /home/coola/.vimrc                                                                                                                                                                                                 
  2: /usr/share/vim-7.3/share/vim/vim73/syntax/syntax.vim                                                                                                                                                               
  3: /usr/share/vim-7.3/share/vim/vim73/syntax/synload.vim                                                                                                                                                              
  4: /usr/share/vim-7.3/share/vim/vim73/syntax/syncolor.vim                                                                                                                                                             
  5: /usr/share/vim-7.3/share/vim/vim73/filetype.vim                                                                                                                                                                    
  6: /usr/share/vim-7.3/share/vim/vim73/indent.vim                                                                                                                                                                      
  7: /usr/share/vim-7.3/share/vim/vim73/ftplugin.vim                                                                                                                                                                    
  8: /usr/share/vim-7.3/share/vim/vim73/plugin/getscriptPlugin.vim                                                                                                                                                      
  9: /usr/share/vim-7.3/share/vim/vim73/plugin/gzip.vim                                                                                                                                                                 
 10: /usr/share/vim-7.3/share/vim/vim73/plugin/matchparen.vim                                                                                                                                                           
 11: /usr/share/vim-7.3/share/vim/vim73/plugin/netrwPlugin.vim                                                                                                                                                          
 12: /usr/share/vim-7.3/share/vim/vim73/plugin/rrhelper.vim                                                                                                                                                             
 13: /usr/share/vim-7.3/share/vim/vim73/plugin/spellfile.vim                                                                                                                                                            
 14: /usr/share/vim-7.3/share/vim/vim73/plugin/tarPlugin.vim                                                                                                                                                            
 15: /usr/share/vim-7.3/share/vim/vim73/plugin/tohtml.vim                                                                                                                                                               
 16: /usr/share/vim-7.3/share/vim/vim73/plugin/vimballPlugin.vim                                                                                                                                                        
 17: /usr/share/vim-7.3/share/vim/vim73/plugin/zipPlugin.vim                                                                                                                                                            
 18: /usr/share/vim-7.3/share/vim/vim73/syntax/ruby.vim                                                                                                                                                                 
 19: /usr/share/vim-7.3/share/vim/vim73/indent/ruby.vim                                                                                                                                                                 
 20: /usr/share/vim-7.3/share/vim/vim73/ftplugin/ruby.vim 


No to mam to. Tylko teraz trzeba wyedytować plik ~/.vimrc i upewnić się, że zawiera linie:

set nocompatible " We're running Vim, not Vi!
syntax on " Enable syntax highlighting
filetype on " Enable filetype detection
filetype indent on " Enable filetype-specific indenting
filetype plugin on " Enable filetype-specific plugins


No i teraz w Vim kombinacja klawiszy ggVG= co tłumaczy się na
  • gg - idż na początek pliku
  • V - włącz zaznaczanie
  • G - idź na koniec pliku
  • = - poformatuj wcięcia
Co daje dosyć zabawny efekt:

require "test-unit"

class FirstSmokeTestClass < Test::Unit::TestCase

        def test_if_this_test_framework_works

                assert_equal(2, 1 + 1)                                                                                                                                                                                  

        end

end

~                                                                                                                                                                                                                       
11 wierszy wciętych


Te wcięcia jak dla mnie są za duże. Wystarczą tylko dwie spacje. Jak to zmienić?

Internet mówi, że wystarczy dodać do pliku ~/.vimrc taką linię:

autocmd Filetype ruby setlocal ts=2 sts=2 sw=2

Po otwarciu pliku w vim od razu moim oczom ukazał się poprawnie wcięty kod. WOW:

require "test-unit"                                                                                                                                                                                                     
                                                                                                                                                                                                                        
class FirstSmokeTestClass < Test::Unit::TestCase                                                                                                                                                                        
                                                                                                                                                                                                                        
  def test_if_this_test_framework_works                                                                                                                                                                                 
                                                                                                                                                                                                                        
    assert_equal(2, 1 + 1)                                                                                                                                                                                              
                                                                                                                                                                                                                        
  end                                                                                                                                                                                                                   
                                                                                                                                                                                                                        
end

Oczywiście zmiana wcięć i operacja ggVG= działa tak samo dobrze :) 

Commit do tego TU

Ale, ale - podejrzałem kommit i okazało się, że w rzeczywistości w pliku są tabulatory. Czuję się oszukany :(


Ktoś tu sobie leci w kulki! Edytor sobie, a kod sobie. Nie wiem. Może Ty wiesz?



Po publikacji tego posta koledzy i koleżanki na Slack-u odezwali się do mnie i podsunęli mi rozwiązanie problemu z tabulatorami. Dzięki wielkie! :)


Kommit z tego TU.

Komentarze

Popularne posty z tego bloga

Kursy IT na Pluralsight. Dlaczego warto?

Bardzo sobie cenię kursy na Pluralsight. Mam wrażenie, że każdy kurs, który przeszedłem na tej platformie, w dużym stopniu podniósł moje zdolności. Wiem, dostęp do tej platformy nie jest tani, ale w mojej ocenie warty swojej ceny. To nie jest reklama, ale forma entuzjazmu jaki mam do tej formy samodoskonalenia. O to kilka punktów pokazujących ofertę tego serwisu i dlaczego warto skorzystać: Pluralsight to kursy z Javascript, C#, Java, Angular, Python, MySQL i wielu innych technologii i umiejętności. Kursy na Pluralsight w większości mają wyższą jakość niż te, które możemy znaleźć na przykład na YouTube. Są wyselekcjonowane, mają wysoką jakość dźwięku i obrazu. Często wgryzają się głęboko w dany problem daleko poza standardowe „Hello World” danej technologii. Twórcy Pluralsight to często osoby znane ze świata IT i konferencji branżowych, jak: Scott Hanselman, Microsoft John Somnez, SimpleProgrammer.com John Skeet, Google Pluralsight udostępnia funkcjonalność ścieżek – paths....

Bicie piany

Czy słyszałeś o tym gościu, który powiedział, że Object Oriented to przeżytek? No nie. Następny. Co powiedział? Opisał wszystkie obietnice OO, i jak żadna z nich tak naprawdę nigdy nie została spełniona i o tych wszystkich możliwościach OO, które kosztują więcej, niż są warte i że funkcjonalne programowanie jest lepsze i ... Phi. Tak słyszałem już to wcześniej. No, więc OO jest martwe, leży i kwiczy i możemy przejść dalej. Przejść dalej do czego? Co? No do NASTĘPNEJ WIELKIEJ RZECZY oczywiście. Aaaa, do tego. Czy wiesz już co to jest? Nie bałdzo, ale jestem podekscytowany na myśl o mikroserwisach; jaram się Elixirem; i słyszałem, że React jest fantastyczny; i ... Tak, tak. Bicie piany. Dałeś się nabrać na bicie piany. Co? Co masz na myśli. Przecież mamy takie wspaniałe czasy. Tak naprawdę postrzegam te czasy jako depresyjne. Ale dlaczego? Przecież co kilka dni wyskakują nowe wspaniałe technologie! Wspinamy się na coraz wyższe szczyty. Phi. To, co tak napraw...

Podstawy Programowania Funkcyjnego Epizod 1

O czym jest programowanie funkcyjne? Zakładam, że słyszałeś już kiedyś o programowaniu funkcyjnym. No cóż, któż nie słyszał? Wszyscy o tym gadają. Wychodzi dużo nowych języków funkcyjnych takich, jak Scala, F# i Clojure. Ludzie rozmawiają też o starszych językach jak Erlang, Haskell, ML i innych. A więc, o co w tym wszystkim chodzi? Dlaczego programowanie funkcyjne jest Następną Wielką Rzeczą™? I co jest w tym takiego pociągającego? Poniższy tekst jest luźnym tłumaczeniem wpisu bloga Roberta Cecila "Wujka Boba" Martina z dnia 22 grudnia 2012 ze strony: https://blog.cleancoder.com/uncle-bob/2012/12/22/FPBE1-Whats-it-all-about.html Proszę o komentarze, jeżeli ta luźność jest zbyt daleko posunięta. Po pierwsze, prawie na pewno programowanie funkcyjne jest następną wielką rzeczą. Są ku temu dobre, solidne powody i poznamy je w tym artykule. Ale najpierw, aby zrozumieć te powody, musimy poznać, czym programowanie funkcyjne jest....