2013-01-18 12 views
5

Vim pod Win 7 zmienia moje ustawienie shiftwidth na coś, czego nie chcę tylko dla plików .sml.Vim zmienia shiftwidth dla plików .sml

To, czego chcę, to wszystko, aby wciskać je tylko spacjami, a wszystko ma zawsze 4 spacje. Jest to zawartość mojego obecnego pliku _vimrc, choć próbowałem wielu odmianach:

set nocompatible 
set expandtab 
set tabstop=4 
set shiftwidth=4 
set softtabstop=4 

set guifont=Consolas:h9:cANSI 
source $VIMRUNTIME/vimrc_example.vim 
source $VIMRUNTIME/mswin.vim 
behave mswin 

filetype plugin indent on 

" Set the tab width 
let s:tabwidth=4 
exec 'set tabstop=' .s:tabwidth 
exec 'set shiftwidth=' .s:tabwidth 
exec 'set softtabstop='.s:tabwidth 

Kiedy po raz pierwszy rozpocząć Vima bez pliku załadowanego, :set shiftwidth powraca shiftwidth=4. Kiedy otwieram plik .py lub .php, nadal zwraca on shiftwidth=4. Ale kiedy otworzę plik .sml lub po prostu zapiszę pusty plik z rozszerzeniem .sml, zmieni się na shiftwidth=2. Ręczne ustawienie :set shiftwidth=2 działa dla tej sesji, ale muszę to zrobić za każdym razem, gdy otworzę plik .sml.

Dotyczy tylko buforów z otwartym plikiem .sml. Niezapisane bufory lub pliki o innym typie pliku otwarte w tym samym czasie pokaż shiftwidth = 4.

Nie używałem wcześniej wcięcia wtyczki typu pliku, ale po pewnym wyszukiwaniu wydawało się, że to może być problem. Nie było żadnych plików w moim folderze ftplugin, więc dodałem filetype plugin indent on do mojego _vimrc stworzonego sml.vim i umieścić go w folderze ftplugin (ponownie, próbowałem wielu odmianach:

set expandtab 
set tabstop=4 
set shiftwidth=4 
set softtabstop=4 

" Set the tab width 
let s:tabwidth=4 
exec 'set tabstop=' .s:tabwidth 
exec 'set shiftwidth=' .s:tabwidth 
exec 'set softtabstop='.s:tabwidth 

wiem sml.vim jest bycie czytać, bo umieścić w nim błędów na początku, i zostali złapani.

nie wiem, czy to jest istotne, ale nie ma nic o .sml w moim indent.vim i mój folder tiret jest pusty.

Jeszcze Vim wciąż ustawia shiftwidth = 2 za każdym razem, gdy ładuję plik .sml. Chciałbym wiedzieć dlaczego:

Aktualizacja: Folder wcięcia, który powiedziałem, był pusty, był vim \ vimfiles \ indent. Po odpowiedzi i komentarzach poniżej szukałem sml.vim i znalazłem inny folder wcięć, vim \ vim73 \ indent. Edytowałem sml.vim i zmieniłem shiftwidth = 2 na shiftwidth = 4, a problem został rozwiązany.

+3

załadować .sml i uruchom plik ': czasownik ustawić sw' - należy przez to powiedzieć, gdzie to było ostatni zestaw. – sidyll

Odpowiedz

6

Najprawdopodobniej jest to spowodowane wtyczką typu pliku. Jeśli to był jeden domyślny (tj dostarczany z samego vim) prawidłowe poprawka będzie wprowadzenie odpowiednich zestawów

setlocal ts< sw< sts< " Set ts, sw and sts to global values 

^do ~/.vim/after/ftplugin/sml.vim. Ale nie ma takich ustawień w dystrybucji vim. W takim przypadku powyższe rozwiązanie może działać (w zależności od miejsca, w którym znajduje się ta niestandardowa wtyczka), ale lepiej byłoby najpierw sprawdzić verb set sw i sprawdzić, czy wtyczka definiująca &sw jest a) naprawdę potrzebna lub b) konfigurowalne, aby zestawy można było wyłączyć bez używania katalogu after/.

Aktualizacja: Wydaje się to rzeczywiście jest domyślny, ale indent skrypt i nie ftplugin jak @Nikita Kouevda zauważył. Dlatego musisz umieścić tę linię w ~/.vim/after/indent/sml.vim.


" Set the tab width 
let s:tabwidth=4 
exec 'set tabstop=' .s:tabwidth 
exec 'set shiftwidth=' .s:tabwidth 
exec 'set softtabstop='.s:tabwidth 

Użyj tego zamiast:

let s:tabwidth=4 
let &tabstop  = s:tabwidth 
let &shiftwidth = s:tabwidth 
let &softtabstop = s:tabwidth 

lub

let [&tabstop, &shiftwidth, &softtabstop]=repeat([4], 3) 
+1

Zauważ, że OP używa 'wcięcia w filmie', więc '$ VIMRUNTIME/indent/sml.vim' ustawia' shiftwidth' na 2. Ponieważ pliki 'indent' pochodzą z plików' ftplugin', '~/.vim/after/W celu przesłonięcia '$ VIMRUNTIME/indent/sml.vim' należy użyć indent/sml.vim'. –

+0

@NikitaKouevda Dzięki, przyzwyczailiśmy się do takich ustawień umieszczonych w 'ftplugin' i zaznaczyliśmy tylko to i podkatalogi składni. – ZyX

+0

Dziękuję wam! – gotube