Làm cách nào để thay đổi kích thước tab trong Vim?


172

Mỗi lần tôi thêm một bộ chọn trong CSS và tôi nhấn Enterđể xác định các thuộc tính mà nó kết thúc như thế này:

#selector {
        property: value;
}

(Tab 8 dấu cách)

Làm cách nào để định cấu hình Vim để làm cho nó như thế này:

#selector {
    property: value;
}

(Tab 4 không gian)


4
Bạn có muốn một tab có chiều rộng 4 không gian? Bốn không gian? Hoặc bốn tab có chiều rộng 1 không gian? Chúng là những thứ khác nhau, và bạn không rõ ràng. Trong mọi trường hợp, hãy bắt đầu với việc đọc: he ts ,: he sw, và: anh ấy mở rộng
abeyer

Câu trả lời:


102

Mở rộng câu trả lời của zoul:

Nếu bạn muốn thiết lập Vim để sử dụng các cài đặt cụ thể khi chỉnh sửa một loại tệp cụ thể, bạn sẽ muốn sử dụng chế độ tự động:

autocmd Filetype css setlocal tabstop=4

Điều này sẽ làm cho nó để các tab được hiển thị dưới dạng 4 khoảng trắng. Cài đặt expandtabsẽ khiến Vim thực sự chèn khoảng trắng (số lượng chúng được điều khiển bởi tabstop) khi bạn nhấn tab; bạn có thể muốn sử dụng softtabstopđể làm cho backspace hoạt động chính xác (nghĩa là giảm thụt lề khi đó là những gì sẽ xảy ra nên sử dụng các tab, thay vì luôn luôn xóa một char mỗi lần).

Để đưa ra quyết định giáo dục đầy đủ như thế nào để thiết lập những điều, bạn sẽ cần phải đọc tài liệu Vim trên tabstop, shiftwidth, softtabstopexpandtab. Bit thú vị nhất được tìm thấy trong expandtab( :help 'expandtab):

Có bốn cách chính để sử dụng các tab trong Vim:

  1. Luôn luôn giữ 'tabstop' ở mức 8, đặt 'softtabstop' và 'shift' thành 4 (hoặc 3 hoặc bất cứ điều gì bạn thích) và sử dụng 'noExandtab'. Sau đó, Vim sẽ sử dụng hỗn hợp các tab và dấu cách, nhưng gõ và sẽ hoạt động giống như một tab xuất hiện cứ sau 4 (hoặc 3) ký tự.

  2. Đặt 'tabstop' và 'shift' thành bất cứ điều gì bạn thích và sử dụng 'extendtab'. Bằng cách này, bạn sẽ luôn chèn không gian. Định dạng sẽ không bao giờ bị rối khi thay đổi 'tabstop'.

  3. Đặt 'tabstop' và 'shift' thành bất cứ điều gì bạn thích và sử dụng | modeline | để đặt các giá trị này khi chỉnh sửa lại tệp. Chỉ hoạt động khi sử dụng Vim để chỉnh sửa tệp.

  4. Luôn đặt 'tabstop' và 'độ rộng băng thông' thành cùng một giá trị và 'noExandtab'. Điều này sau đó sẽ hoạt động (chỉ dành cho thụt lề ban đầu) cho bất kỳ cài đặt tabstop nào mà mọi người sử dụng. Có thể có các tab sau lần đầu tiên được chèn vào khoảng trắng nếu bạn thực hiện việc này. Nếu không, các nhận xét được căn chỉnh sẽ sai khi 'tabstop' bị thay đổi.


Ngoài ra, đừng quá lo lắng về việc có thể thay đổi suy nghĩ của bạn sau này ... xem :help retab(kiểm tra biến thể!).
Michał Marc:

Là việc sử dụng autocmd bổ sung với việc sử dụng .vimrc, hoặc một giải pháp thay thế?
Josh Desmond

224
:set tabstop=4
:set shiftwidth=4
:set expandtab

Điều này sẽ chèn bốn khoảng trắng thay vì một ký tự tab. Các không gian ổn định hơn một chút, có nghĩa là văn bản được thụt vào trong khoảng trống sẽ hiển thị giống nhau trong trình duyệt và bất kỳ ứng dụng nào khác.


83
Có, nhưng các tab là ngữ nghĩa (mỗi tab có nghĩa là 1 lớp thụt), trong khi các không gian hoàn toàn mang tính trình bày. Hay nói cách khác, sử dụng các tab sẽ cho phép người khác xem mã của bạn hiển thị tuy nhiên họ cảm thấy thoải mái, trong khi không gian sẽ không cho phép điều này.
K Prime

11
Lưu ý rằng nếu bạn thích '>''<' để di chuyển văn bản của bạn cùng khoảng cách với tab -key, bạn có thể chỉ cần :set shiftwidth=0trong vimrc của mình và quên nó mãi mãi, bởi vì điều này nói với vim rằng bạn luôn muốn nó khớp tabstop.
SeldomNeedy

132

Để thực hiện thay đổi cho một phiên, sử dụng lệnh này:

:set tabstop=4

Để thay đổi vĩnh viễn, hãy thêm nó vào ~/.vimrchoặc ~/.vim/vimrc:

set tabstop=4

Điều này sẽ ảnh hưởng đến tất cả các tập tin, không chỉ css. Để chỉ ảnh hưởng đến các tập tin css:

autocmd Filetype css setlocal tabstop=4

như đã nêu trong câu trả lời của Michał .


2
nếu bạn muốn tab hoạt động như bốn khoảng trắng, cần phải thêm các dòng khác trong câu trả lời @Zoul vào .vimrc; nghĩa là, thêm 'set shift thong = 4' và 'set extendtab' vào .vimrc.
qartal

7
Câu hỏi là "Làm cách nào để thay đổi kích thước tab trong Vim?"
Keith

Đây là cách tôi sẽ làm điều đó. Và để đảm bảo ~/.vimrcluôn được sao lưu, tôi thường lưu tệp trong thư mục Dropbox của mình sau đó tạo liên kết sym tới máy tính để bàn:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance

41

Một số câu trả lời trên trang này là các bản sửa lỗi 'sử dụng một lần' cho vấn đề được mô tả. Có nghĩa là, lần sau khi bạn mở một tài liệu bằng vim, các cài đặt tab trước đó sẽ trở lại.

Nếu bất cứ ai quan tâm đến việc thay đổi vĩnh viễn cài đặt tab:


11
Điều này chèn không gian, không phải tab.
Supernovah

5
@Supernovah bạn có thể xóa "extendtab", để nhận các tab
kommradHomer

28

Như một lót vào vim :

:set tabstop=4 shiftwidth=4 expandtab

Để thiết lập vĩnh viễn , hãy thêm các dòng này vào ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab

6

CẬP NHẬT

Nếu bạn đang làm việc trong một dự án cụ thể, tôi khuyên bạn nên sử dụng Editorconfig .

Nó cho phép bạn xác định một .editorconfigtệp ở gốc của kho lưu trữ của bạn xác định thụt lề bạn muốn sử dụng cho từng loại tệp trên kho lưu trữ của bạn.

Ví dụ:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Có một plugin vim tự động cấu hình vim theo tệp cấu hình cho tệp bạn mở.

Trên hết, .editorconfigtệp được hỗ trợ tự động trên nhiều IDE và trình soạn thảo khác, vì vậy đây là tùy chọn tốt nhất để cộng tác giữa người dùng với các môi trường khác nhau.

CÂU TRẢ LỜI

Nếu bạn cần thay đổi kích thước thường xuyên và bạn không muốn liên kết điều này với một loại tệp cụ thể, bạn có thể có các lệnh được xác định trước trên tệp .vimrc để nhanh chóng chuyển đổi tùy chọn:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Điều này ánh xạ hai bộ kích thước khác nhau thành các phím \ t và \ m. Bạn có thể rebind điều này với bất kỳ phím nào bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.