2011-09-07 14 views
6

Używam Vima do edycji kodu Erlang. Jestem przyzwyczajony do (większość programistów Erlang to zrobić), aby wciąć kod Erlang zakresem wspornika one jesteś w przykładzie C jest często wcięty jedną szerokość zakładki wewnątrz nawiasów.Wcięcie kodu według indeksu kolumny nawiasowej w Vim?

int main(void) { 
    printf("hello, world\n"); 
    return 0; 
} 

Erlang, to wspólne wcięcia na podstawie kolumny gdzie rozpoczął wspornik:

?assertError({bad_options, [{foo, bar}, 
          bad_option]}, 
      lhttpc:request("http://localhost/", get, [], <<>>, 1000, 
          [bad_option, {foo, bar}])). 

(Przykład powyżej jest wcięty, aby uzyskać punkt w poprzek, a nie według subiektywnego piękna).

Tab szerokość zostaną wykorzystane jeśli blok jest uruchomiony w nowej linii:

?assertError(
    {bad_options, [{foo, bar}, bad_option]}, 
    lhttpc:request(
     "http://localhost/", get, [], <<>>, 1000, 
     [bad_option, {foo, bar}] 
    ) 
). 

odpowiednich części mojego .vimrc:

set expandtab " Spaces for tabs " 
set tabstop=4 " Tab width 4 " 
set shiftwidth=4 
set smarttab 
set autoindent 

" Enable filetype plugin " 
filetype plugin on 
filetype indent on 

Czy istnieje sposób, aby wykonać tę wcięcia w vim , a jeśli tak, to w jaki sposób?

+0

Czy próbowałeś https://github.com/jimenezrick/vimerl? – W55tKQbuRu28Q4xv

+0

Zdałem sobie sprawę, że faktycznie używam 'vimerl' i zaktualizowałem do najnowszej wersji. Ale nie, nadal wcina się do 1 (lub 2 czasami, o dziwo) szerokości tabulatora. –

Odpowiedz

4

Jest rozwidlenie vimerl który implementuje „kontekst świadomy wcięcie” zamiast „statycznym” wcięcia: https://github.com/aszlig/vimerl.git

wydaje się działać, więc będę toczyć się, że za jakiś czas.

+0

Witam, @Adam Lindberg. Minął tydzień. Co myślisz o vimerl? Mam dokładnie takie same wymagania jak ty. Dzięki! – JasonSmith

+0

Widelec wydaje się wgrać zgodnie z moimi potrzebami. –

1

Wygląda na to, że musisz zagłębić się w mroczny świat cindent i cinoptions. Uważam, że stawianie następuje w vimrc będzie częściowo swoich potrzeb:

set cindent 
set cinoptions+=(0 

Ale pytanie brzmi, jak to wpłynie na inne zachowania. Aby uzyskać więcej informacji, patrz help cinoptions-values. Powinno być możliwe osiągnięcie dokładnie tego, czego chcesz, ale może zająć trochę eksperymentowania.

Mam nadzieję, że to pomoże.

+0

Wygląda trochę obiecująco, ale nie wiem, jakich opcji użyć. Próbowałem wielu rzeczy, ale niczego nie zdołałem użyć. Podejrzewasz, że wtyczka Erlang może również zagłuszyć rzeczy, ponieważ ma własne wcięcie. –

+0

Czy próbowałeś użyć 'set cinoptions?', Aby znaleźć wartość ustawioną przez zmiany Erlanga (bez żadnych zmian)? Czy wtyczka twierdzi, że poprawia wcięcie? Jeśli tak, może to być trudne do dostosowania z zewnątrz wtyczki. –

+0

Domyślne 'cinoptions' wydaje się puste. Wydaje się, że wtyczka wykonuje pewne czynności [ręczne wcięcie] (https://github.com/jimenezrick/vimerl/blob/master/indent/erlang.vim), co może być trudne do naprawienia. –

Powiązane problemy