2013-01-18 1 views
5

Vim in Win 7 modifica l'impostazione della mia larghezza di spostamento in qualcosa che non desidero solo per i file .sml.Vim modifica la larghezza di spostamento per i file .sml

Quello che voglio è che tutto sia rientrato solo con gli spazi e che ogni cosa sia sempre 4 spazi. Questo è il contenuto del mio file _vimrc corrente, anche se ho provato molte variazioni:

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 

Quando ho comincio Vim senza file caricato, :set shiftwidth rendimenti shiftwidth=4. Quando apro un file .py o .php, restituisce comunque shiftwidth=4. Ma quando apro un file .sml o semplicemente salvo il file vuoto con estensione .sml, passa a shiftwidth=2. L'impostazione manuale di :set shiftwidth=2 funziona per quella sessione, ma devo farlo ogni volta che apro un file .sml.

Riguarda solo i buffer con un file .sml aperto. I buffer non salvati o quelli con un altro tipo di file aperti contemporaneamente mostrano shiftwidth = 4.

Non stavo usando la parola rient del plugin tipo file prima, ma dopo alcune ricerche sembrava che potesse essere il problema. Non c'erano file nella mia cartella di ftplugin, così ho aggiunto al mio filetype plugin indent on _vimrc, sml.vim creato e messo nella cartella ftplugin (ancora una volta, dopo aver provato molte varianti:

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 

So sml.vim è essere leggere perché ho messo gli errori in esso in un primo momento, e sono stati catturati.

Non so se questo è rilevante, ma non c'è niente di .sml nel mio indent.vim, e la mia cartella trattino è vuota.

Eppure Vim imposta ancora shiftwidth = 2 ogni volta che carico un file .sml. Mi piacerebbe sapere perché:

Aggiornamento: La cartella del rientro che ho detto era vuota era vim \ vimfiles \ indent. Dopo la risposta e i commenti di seguito ho cercato sml.vim e ho trovato un'altra cartella di rientro, vim \ vim73 \ indent. Ho modificato sml.vim e cambiato shiftwidth = 2 in shiftwidth = 4 e il problema è stato risolto.

+3

caricare un file .sml ed eseguire ': verbo set sw' - ne dirà dove è stato lo scorso impostato. – sidyll

risposta

6

Molto probabilmente a causa di alcuni plug-in di tipo file. Se era quello di default (cioè fornito con vim stesso) la correzione corretta sarà messa set appropriate

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

^in ~/.vim/after/ftplugin/sml.vim. Ma non ci sono tali impostazioni nella distribuzione vim. In questo caso la soluzione di cui sopra potrebbe funzionare (a seconda del luogo in cui si trova questo plug-in non standard), ma sarebbe meglio esaminare prima il verb set sw e verificare se il plug-in che ha definito &sw è a) quello di cui hai veramente bisogno o b) configurabile in modo che i set possano essere disabilitati senza utilizzare la directory after/.

Aggiornamento: Sembra che in realtà è quello di default, ma indent sceneggiatura e non ftplugin come @Nikita Kouevda sottolineato. Quindi è necessario inserire questa riga in ~/.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 

Utilizzare questo invece:

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

o

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

Nota che l'OP usa 'filetype indent on', quindi' $ VIMRUNTIME/indent/sml.vim' imposta 'shiftwidth' su 2. Poiché i file' indent' provengono dopo i file 'ftplugin',' ~/.vim/after/indent/sml.vim' deve essere usato per sovrascrivere '$ VIMRUNTIME/indent/sml.vim'. –

+0

@NikitaKouevda Grazie, mi sono abituato a queste impostazioni inserite in 'ftplugin' e ho controllato solo questo e le directory di sintassi. – ZyX

+0

Grazie a voi due! – gotube