Thứ nhất, không sử dụng Tabphím trong Vim để thụt thủ công. Vim có một cặp lệnh trong chế độ chèn để tăng hoặc giảm số lượng thụt lề theo cách thủ công. Những lệnh đó là Ctrl-Tvà Ctrl-D. Các lệnh này quan sát các giá trị của tabstop
, shiftwidth
vàexpandtab
, và duy trì hỗn hợp chính xác của khoảng trắng và tab (số lượng tab tối đa theo sau bởi bất kỳ số lượng khoảng trắng cần thiết nào).
Thứ hai, các phím thụt thủ công này dù sao cũng không được sử dụng nếu bạn sử dụng thụt lề tự động.
Nếu Ctrl-Tthay vì Tablàm phiền bạn, bạn có thể ánh xạ lại:
:imap <Tab> ^T
Bạn cũng có thể ánh xạ lại Shift-Tabđể thực hiện Ctrl-Ddeindent:
:imap <S-Tab> ^D
Ở đây ^ T và ^ D là các ký tự điều khiển theo nghĩa đen có thể được chèn dưới dạng Ctrl-VCtrl-T.
Với ánh xạ này tại chỗ, bạn vẫn có thể nhập Tab bằng chữ vào bộ đệm bằng cách sử dụng Ctrl-VTab. Lưu ý rằng nếu bạn làm điều này, ngay cả khi :set expandtab
đang bật, bạn sẽ nhận được một ký tự tab chưa được mở rộng.
Một hiệu ứng tương tự với <Tab>
bản đồ đạt được bằng cách sử dụng :set smarttab
, điều này cũng gây ra khoảng lùi ở phía trước của một dòng để hành xử thông minh.
Trong smarttab
chế độ, khi Tabđược sử dụng không ở đầu dòng, nó không có ý nghĩa đặc biệt. Đó là khác biệt so với bản đồ trên của tôi về Tabtới Ctrl-T, bởi vì mộtCtrl-T bất cứ nơi nào được sử dụng trong một dòng (trong chế độ chèn) sẽ làm tăng thụt đầu dòng của dòng đó.
Các ánh xạ hữu ích khác có thể là:
:map <Tab> >
:map <S-Tab> <
Bây giờ chúng ta có thể làm những việc như chọn một số dòng và nhấn Tabđể thụt lề chúng. Hoặc đánhTab hai lần trên một dòng (trong chế độ lệnh) để tăng thụt lề.
Nếu bạn sử dụng các lệnh quản lý thụt đầu dòng thích hợp, sau đó tất cả mọi thứ được điều khiển bởi ba thông số: shiftwidth
, tabstop
và expandtab
.
Các shiftwidth
thông số kiểm soát kích thước thụt đầu dòng của bạn; nếu bạn muốn bốn dấu cách, sử dụng :set shiftwidth=4
hoặc viết tắt :set sw=4
.
Nếu chỉ điều này được thực hiện, thì thụt lề sẽ được tạo bằng cách sử dụng hỗn hợp các khoảng trắng và tab, vì noexpandtab
là mặc định. Sử dụng :set expandtab
. Điều này khiến các ký tự tab mà bạn nhập vào bộ đệm mở rộng thành khoảng trắng và để thụt lề do Vim quản lý chỉ sử dụng khoảng trắng.
Khi nào expandtab
bật và nếu bạn quản lý thụt đầu dòng của mình thông qua tất cả các cơ chế Vim thích hợp, giá trị của tabstop
sẽ trở nên không liên quan. Nó kiểm soát cách các tab xuất hiện nếu chúng xảy ra trong tệp. Nếu bạn có set tabstop=8 expandtab
và sau đó lẻn một tab cứng vào tệp bằng cách sử dụng Ctrl-VTab, nó sẽ tạo ra sự căn chỉnh cho vị trí tab dựa trên 8 cột tiếp theo, như thường lệ.