5

Win 7 の Vim は、shiftwidth の設定を .sml ファイルだけで望ましくない値に変更します。

私が望むのは、すべてがスペースのみでインデントされ、すべてが常に 4 つのスペースになることです。多くのバリエーションを試しましたが、これは私の現在の _vimrc ファイルの内容です:

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。.py または .php ファイルを開くと、まだ .py が返されますshiftwidth=4。しかし、.sml ファイルを開くか、空のファイルを .sml 拡張子で保存すると、.sml に変わりますshiftwidth=2。そのセッションでは手動で設定:set shiftwidth=2できますが、.sml ファイルを開くたびに設定する必要があります。

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

以前はファイルタイププラグインのインデントを使用していませんでしたが、検索した後、それが問題の可能性があるように見えました. 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 が読み取られていることはわかっていますが、それらはキャッチされました。

これが関連しているかどうかはわかりませんが、私の indent.vim には .sml に関するものは何もなく、私の indent フォルダーは空です。

それでも、Vim は .sml ファイルをロードするたびに shiftwidth=2 を設定します。理由を知りたいです。

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

4

1 に答える 1

6

ファイルタイプのプラグインが原因である可能性が最も高いです。それがデフォルトのものであった場合(つまり、vim自体に同梱されている場合)、正しい修正により適切なセットが配置されます

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

^ に~/.vim/after/ftplugin/sml.vim。しかし、vim ディストリビューションにはそのような設定はありません。この場合、上記の解決策が機能する可能性があります (この非標準プラグインが配置されている場所によって異なります) が、verb set sw最初に調べて、定義されたプラグインが&swa) 本当に必要なものであるか、b) 構成可能であるかを確認することをお勧めします。そのセットは、after/ディレクトリを使用せずに無効にすることができます。

更新:実際にはデフォルトのもののようですが、indentスクリプトでありftplugin、@Nikita Kouevdaが指摘したものではありません。したがって、この行を に入れる必要があります~/.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)
于 2013-01-18T17:48:37.537 に答える