2013-01-18 10 views
5

Win 7のVimは私のシフト幅の設定を.smlファイルだけにしたいものに変更します。Vimは.smlファイルのためにshiftwidthを変更します

私が欲しいのは、すべてがスペースでのみインデントされ、すべてが4つのスペースになることです。

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 

私が最初にロードされていないファイルでVimを起動し、:set shiftwidth戻りshiftwidth=4:私は多くのバリエーションを試してみたが、これは、私の現在の_vimrcファイルの内容です。 .pyまたは.phpファイルを開くと、まだshiftwidth=4が返されます。しかし、.smlファイルを開くとき、または空白のファイルを拡張子.smlで保存すると、shiftwidth=2に変わります。手動で:set shiftwidth=2を設定するとそのセッションで動作しますが、.smlファイルを開くたびにこれを行う必要があります。

開いている.smlファイルのバッファにのみ影響します。保存されていないバッファまたは別のファイルタイプが同時に開いているバッファは、shiftwidth = 4です。

以前はfiletypeプラグインインデントのものを使用していませんでしたが、検索の後に問題があるようでした。そこに私ftpluginフォルダにはファイルがなかったので、私は私の_vimrcにfiletype plugin indent onを追加、sml.vimを作成し、多くのバリエーションを試してみました、再び(ftpluginフォルダにそれを置く:

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 

私はsml.vimがされている知っているが私が最初にそれにエラーを入れて、彼らがキャッチされたので読んでください。

これが関連しているが、そこ.smlについて何が私のindent.vimでいない、と私のインデントフォルダが空であるかどうかわからないが。

はまだありませんVimは.smlファイルをロードするたびにshiftwidth = 2を設定していますが、理由を知りたいのですが。

更新:私が言ったインデントフォルダは、vim \ vimfiles \ indentです。以下の答えとコメントの後、私はsml.vimを検索し、別のインデントフォルダvim \ vim73 \ indentを見つけました。私はsml.vimを編集し、shiftwidth = 2をshiftwidth = 4に変更し、問題を解決しました。

+3

負荷.smlファイルと実行 ':動詞セットsw' - それは最後にあった場所、それはあなたを伝えるものセット。 – sidyll

答えて

6

これは、filetypeプラグインの可能性が高いためです。それはデフォルトの一つであった場合(すなわち、VIM自体に同梱)正しい修正は、適切なセット~/.vim/after/ftplugin/sml.vim

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

^を入れます。しかし、vimの配布にはそのような設定はありません。この場合、上記の解決策が機能するかもしれませんが(この非標準プラグインがある場所によって異なります)、最初にverb set swを調べ、&swを定義したプラグインがa)本当に必要なものか、b) after/ディレクトリを使用せずにセットを無効にできるように設定できます。

更新:@Nikita Kouevdaが指摘したように、それが実際にデフォルト1が、indentスクリプトではなくftpluginで表示されます。したがって、この行を~/.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 

利用代わりに、この:

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

または

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

OPは 'filetype indent on'を使用するので、' $ VIMRUNTIME/indent/sml.vim'は 'shiftwidth'を2に設定します。' indent'ファイルは 'ftplugin'ファイルの後にソースされているので、'〜/ .vim/after/indent/sml.vim'を '$ VIMRUNTIME/indent/sml.vim'をオーバーライドするために使用しなければなりません。 –

+0

@NikitaKouevdaありがとうございます。この設定を 'ftplugin'に入れておき、これと構文ディレクトリだけをチェックしました。 – ZyX

+0

ありがとう! – gotube

関連する問題