`Softtabstop` dùng để làm gì?


21

Tôi đã biết các cài đặt liên quan đến tab này trong Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

Thiết lập bình thường của tôi là set ts=4 sw=4 expandtab smarttab.

Nhưng theo ststài liệu , nếu expandtabkhông được đặt, nó sẽ cố gắng sử dụng kết hợp các khoảng trắng và tab để tạo ra số lượng khoảng trống mong muốn cho kích thước tab.

Tôi thực sự không thể nghĩ ra một kịch bản hữu ích cho cài đặt này: Tại sao ai đó muốn có một số lượng tab và không gian cố định có thể làm rối tung mọi thứ? Ưu điểm duy nhất của việc này mà tôi có thể nghĩ đến là giảm số lượng ký tự và do đó giảm kích thước tệp, điều này có vẻ kỳ lạ đối với tôi.

Câu trả lời:


20

Như softtabstoptài liệu đề cập, sẽ hữu ích nếu bạn muốn giữ kích thước dừng của tab mặc định là 8, nhưng chỉnh sửa tệp như thể kích thước dừng của tab là một giá trị khác. Ví dụ: nếu bạn muốn mức thụt lề là 4 trong khi chỉnh sửa mã, nhưng một số bình luận có văn bản thụt vào tab như bảng phụ thuộc vào điểm dừng của tab là 8, bạn có thể đặt ststhành 4.

Một điểm khác biệt tôi nhận thấy giữa cài đặt tab của bạn ( set ts=4 sw=4 expandtab smarttab) và việc sử dụng sts(ví dụ set ts=8 sts=4) là khi khoảng cách giữa các khoảng trắng ở giữa một dòng văn bản. Ví dụ, hãy xem xét dòng văn bản sau, trong đó ·chỉ ra khoảng trắng:

some·text·······more·text

Trong chế độ chèn, di chuyển con trỏ ngay trước mcủa more text. Với cài đặt của bạn, nhấn Backspace sẽ xóa một khoảng trắng. Nhưng trong khi sử dụng sts=4, Backspace xóa tất cả các điểm dừng của tab trước đó, vì nó sẽ hoạt động nếu các khoảng trắng là một ký tự tab thay thế.

Bạn có thể đặt sts=4ngoài cài đặt của mình và nhận hành vi xóa lùi giữa dòng trong khi không trộn lẫn các tab và khoảng trắng. Các tab sẽ được mở rộng thành bốn khoảng trắng, nhưng bạn có thể backspace trên một phạm vi khoảng trắng ở giữa một dòng.


3

Xem ví dụ dưới đây,

// Start vim without loading your vimrc. set only tabstop=8 softtabstop=4.
// This makes <Tab> in insert mode equals to 4 <Space> length at max.

// In insert mode, type 12, one <Tab>, 5. We get insertion below,
12··5
// Quit insert mode. Move cursor back, we find 2 <Space> inserted.

// In insert mode, type 12, two <Tab>, 9. We get insertion below,
12······9
// Quit insert mode. Move cursor back, you find a <Tab> inserted.

// In insert mode, type 12, three <Tab>, 3. We get insertion below,
12··········3
// Move the cursor back, you find a <Tab> and 4 <Space> inserted.

// We can even set sotftabstop=12, but this time we only need type one <Tab>, then 3.
12··········3
// Move the cursor back, you find a <Tab> and 4 <Sapce> inserted.

Vậy tabstoplà về độ rộng của a Tabđược xác định, trong khi đó softtabstoplà khoảng cách con trỏ di chuyển trong khi Tab . Khi chúng không được đặt thành cùng một giá trị, điều đó có nghĩa là nếu bạn nhấn Tabtổ hợp phím, nó không có nghĩa là một Tabnhân vật tầm thường . Trong mọi trường hợp, vim là người quyết định khi bạn thoát khỏi chế độ chèn. Vim trước tiên sẽ cố gắng khớp với càng nhiều tabstopcàng tốt; nếu cuối cùng nó không thể làm cho đầy đủ tabstop, vim chỉ đơn giản là bù đắp bằng Space.

Nói thêm một chút, nếu bạn đặt expandtab, nó tương đương với nói với vim:

Xin đừng bận tâm để tính toán bao nhiêu TabSapcecần thiết. Đơn giản chỉ cần chèn Space.


Câu trả lời của bạn có vẻ giống như một câu nói và không xuất hiện để trả lời câu hỏi.
Herb Wolfe

@Herb Wolfe Tôi ước câu trả lời của tôi có thể giúp PO tìm hiểu điều gì sẽ xảy ra khi cài đặt bất thường được thực hiện như thế nào :set st=7 sts=13. Vì vim không chỉ được thiết kế để mã hóa, mà ban đầu là để chỉnh sửa văn bản.
Chen XI

1

Câu trả lời đơn giản:

Ví dụ, nó cực kỳ hữu ích cho lập trình, đặc biệt là trong Python, trong đó việc lập bảng là rất quan trọng. Khi bạn nhấn backspace với sts = 4, nó sẽ bỏ dòng, không xóa một ký tự khoảng trắng.

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.