2013-01-18 3 views
5

Vim unter Win 7 ändert meine shiftwidth-Einstellung zu etwas, das ich nicht nur für .sml-Dateien möchte.Vim ändert shiftwidth für .sml-Dateien

Was ich will, ist alles nur mit Leerzeichen eingerückt, und für alles immer 4 Leerzeichen. Dies ist der Inhalt meiner aktuellen _vimrc Datei, obwohl ich viele Variationen ausprobiert habe:

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 

Wenn ich ohne Datei zuerst Vim starten geladen, :set shiftwidth kehrt shiftwidth=4. Wenn ich eine .py oder .php Datei öffne, gibt es immer noch shiftwidth=4 zurück. Wenn ich eine .sml-Datei öffne oder die leere Datei mit der Erweiterung .sml speichere, wird sie in shiftwidth=2 geändert. Manuelle Einstellung :set shiftwidth=2 funktioniert für diese Sitzung, aber ich muss es jedes Mal tun, wenn ich eine .sml-Datei öffne.

Es betrifft nur Puffer mit einer geöffneten .SML-Datei. Nicht gespeicherte Puffer oder solche mit einem anderen Dateityp, die gleichzeitig geöffnet sind, zeigen shiftwidth = 4.

Ich war nicht mit dem Dateityp Plugin Einzug Sache, aber nach einigem Suchen schien es, dass das Problem sein könnte. Es gab keine Dateien in meinem ftplugin Ordner, so dass ich hinzugefügt filetype plugin indent on meine _vimrc, erstellt sml.vim und stecken es in dem ftplugin Ordner (wieder viele Variationen versucht zu haben:

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 

Ich weiß sml.vim sein wird lesen, weil ich Fehler in es an die erste Stelle setzen, und sie gefangen wurden.

nicht sicher, ob dies relevant ist, aber es gibt nichts über .sml in meinem indent.vim, und mein Einzug Ordner leer.

doch Vim setzt immer noch shiftwidth = 2, wenn ich eine .sml-Datei lade.Ich würde gerne wissen, warum.

Update: Der Einzugsordner, den ich sagte, leer war vim \ vimfiles \ Einzug. Nach der Antwort und den Kommentaren unten suchte ich nach sml.vim und fand einen anderen Einrückungsordner, vim \ vim73 \ indent. Ich habe sml.vim bearbeitet und shiftwidth = 2 zu shiftwidth = 4 geändert und das Problem wurde gelöst.

+3

laden eine .sml Datei und starten Sie ': Verb gesetzt sw' - es wird Ihnen sagen, wo es das letzte Mal einstellen. – sidyll

Antwort

6

Es liegt wahrscheinlich an einem Dateityp-Plugin. Wenn es ist der einzige Standard (das heißt mit vim ausgeliefert selbst) die richtigen Fix werden entsprechende Sets

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

^in ~/.vim/after/ftplugin/sml.vim werden Putten. Aber solche Einstellungen gibt es in der vim-Verteilung nicht. In diesem Fall kann die obige Lösung funktionieren (abhängig von der Stelle, an der sich dieses nicht standardmäßige Plugin befindet), aber es wäre besser zuerst verb set sw zu untersuchen und zu überprüfen, ob das Plugin &sw a) das ist, das du wirklich brauchst oder b) konfigurierbar, so dass Sätze ohne Verwendung des Verzeichnisses after/ deaktiviert werden können.

aktualisieren: Es ist tatsächlich erscheint standardmäßig ein, aber indent Skript und nicht ftplugin als @Nikita Kouevda darauf hingewiesen. Daher müssen Sie diese Zeile in ~/.vim/after/indent/sml.vim setzen.


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

Verwenden Sie stattdessen:

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

oder

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

Beachten Sie, dass OP 'filetype indent on 'verwendet, so dass' $ VIMRUNTIME/indent/sml.vim' 'shiftwidth' auf 2 setzt. Da 'indent'-Dateien nach' ftplugin'-Dateien erzeugt werden, '~/.vim/after/Einrückung/sml.vim' muss verwendet werden, um '$ VIMRUNTIME/indent/sml.vim' zu überschreiben. –

+0

@NikitaKouevda Danke, gewöhnte sich an solche Einstellungen in 'ftplugin' und überprüfte nur diese und Syntaxverzeichnisse. – ZyX

+0

Danke euch beiden! – gotube