14 kwietnia 2017

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.

Brak komentarzy:

Prześlij komentarz

Podstawy Programowania Funkcyjnego Epizod 3

Czy wszystkie Zasady Się Zmieniają? Kiedy tylko zaczynamy używać nowego paradygmatu , porównujemy z nim na...