2013-01-18 32 views
5

Vim theo Win 7 thay đổi thiết lập shiftwidth của tôi để một cái gì đó tôi không muốn chỉ file .sml.thay đổi Vim shiftwidth cho các tập tin .sml

Những gì tôi muốn là tất cả mọi thứ để được thụt vào với không gian duy nhất, và cho tất cả mọi thứ để có 4 chỗ luôn. Đây là nội dung của file _vimrc hiện tại của tôi, mặc dù tôi đã thử nhiều biến thể:

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 

Khi tôi lần đầu tiên bắt đầu Vim với không có tập tin nạp, :set shiftwidth lợi nhuận shiftwidth=4. Khi tôi mở tệp .py hoặc .php, tệp vẫn trả về shiftwidth=4. Nhưng khi tôi mở tệp .sml hoặc chỉ lưu tệp trống có đuôi .sml, nó sẽ thay đổi thành shiftwidth=2. Cài đặt thủ công :set shiftwidth=2 hoạt động cho phiên đó, nhưng tôi phải thực hiện nó mỗi khi tôi mở tệp .sml.

Nó chỉ ảnh hưởng đến bộ đệm với một tập tin .sml mở. Các bộ đệm chưa được lưu hoặc các bộ đệm có loại tệp khác mở cùng lúc hiển thị shiftwidth = 4.

tôi đã không sử dụng filetype cắm điều thụt trước đó, nhưng sau khi một số tìm kiếm dường như có thể là vấn đề. Không có tập tin trong thư mục ftplugin tôi, vì vậy tôi đã thêm filetype plugin indent on để _vimrc, tạo sml.vim của tôi và đặt nó trong thư mục ftplugin (một lần nữa, sau khi thử nhiều biến thể:

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 

Tôi biết sml.vim đang được đọc vì tôi đặt sai sót trong nó lúc đầu, và họ đã bị bắt.

Không chắc nếu điều này là có liên quan, nhưng không có gì về .sml trong indent.vim của tôi, và thư mục thụt lề của tôi là trống rỗng.

Tuy nhiên, Vim vẫn đặt shiftwidth = 2 mỗi lần tôi tải một tệp .sml. Tôi muốn biết lý do.

Cập nhật: Thư mục thụt lề mà tôi đã nói trống rỗng là vim \ vimfiles \ indent. Sau khi trả lời và bình luận bên dưới, tôi tìm kiếm sml.vim và tìm thấy một thư mục thụt lề khác, vim \ vim73 \ indent. Tôi đã chỉnh sửa sml.vim và thay đổi shiftwidth = 2 thành shiftwidth = 4 và vấn đề đã được giải quyết.

+3

tải một tập tin .sml và chạy ': động từ thiết sw' - Nó sẽ cho bạn biết nơi nó lần cuối bộ. – sidyll

Trả lời

6

Nó rất có thể là do một số plugin filetype. Nếu đó là giá trị mặc định (ví dụ: được vận chuyển với chính vim), sửa chữa chính xác sẽ đặt các bộ thích hợp

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

^vào ~/.vim/after/ftplugin/sml.vim. Nhưng không có cài đặt như vậy trong phân phối vim. Trong trường hợp này, giải pháp trên có thể hoạt động (tùy thuộc vào nơi mà plugin không chuẩn này được đặt), nhưng tốt hơn hết nên kiểm tra verb set sw trước và kiểm tra xem plugin được định nghĩa là &sw là a) bạn thực sự cần hoặc b) có thể cấu hình sao cho các bộ có thể được tắt mà không cần sử dụng thư mục after/.

Cập nhật: Dường như nó thực sự là mặc định, nhưng indent tập lệnh chứ không phải ftplugin như @Nikita Kouevda đã chỉ ra. Vì vậy, bạn cần phải đặt dòng này vào ~/.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 

Sử dụng này để thay thế:

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

hoặc

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

Lưu ý rằng OP sử dụng 'filetype indent on', vì vậy' $ VIMRUNTIME/indent/sml.vim' đặt 'shiftwidth' thành 2. Vì các tệp' indent' được lấy sau tập tin 'ftplugin',' ~/.vim/after/thụt lề/sml.vim' phải được sử dụng để ghi đè '$ VIMRUNTIME/indent/sml.vim'. –

+0

@NikitaKouevda Cảm ơn, đã quen với các cài đặt như vậy đặt trong 'ftplugin' và chỉ kiểm tra thư mục cú pháp này. – ZyX

+0

Cảm ơn hai bạn! – gotube

Các vấn đề liên quan