Vim rất có sức chứa khi nói đến tab Vs. sở thích về không gian. Theo tôi hiểu, tabstop
cài đặt cho biết chiều rộng của một ký tự tab. Các shiftwidth
quy định cụ thể thiết lập bao nhiêu cột để tăng / giảm khi sử dụng <<và >>các lệnh, trong khi softtabstop
ảnh hưởng thiết lập số lượng khoảng trắng sẽ được chèn vào khi bạn nhấn Tabquan trọng trong chế độ chèn. Nếu expandtab
được bật, phím tab sẽ chèn softtabstop
số ký tự khoảng trắng. Trong khi expandtab
tắt, nhấn Tabphím sẽ chèn một số ký tự tab + khoảng trắng nhỏ nhất có thể khớp với nhau softtabstop
. (Hãy sửa lại cho tôi nếu tôi sai.)
Điểm cuối cùng này khiến tôi tự hỏi: có trường hợp thực tế nào mà bạn không muốn shiftwidth == tabstop && tabstop == softtabstop
không? Tôi không thể nghĩ ra một. Theo như tôi được biết, sẽ là thuận tiện nhất nếu tôi có thể đặt cả 3 giá trị này thành cùng một giá trị, trong một lần gán duy nhất. ví dụ: gọi:
:set stab=4
tương đương với chạy:
:set tabstop=4 softtabstop=4 shiftwidth=4
Bất cứ ai có thể đề nghị làm thế nào điều này có thể được thực hiện?
CẬP NHẬT
Cảm ơn các câu trả lời cho đến nay từ quá nhiều php , hobbs và kaiser.se . Thay vì trả lời từng người một, tôi đang cập nhật câu hỏi ở đây.
Softtabstop với expandtab bị tắt
Tôi đã nói ở trên rằng khi tắt mở rộng, nhấn phím Tab sẽ chèn số ký tự tab + dấu cách nhỏ nhất có thể khớp với nhau softtabstop
. Tôi đứng đó, nhưng tôi nghĩ tôi cần phải giải thích ý của tôi. Tôi sẽ cố gắng làm như vậy bằng một vài ví dụ. Để làm theo, hãy chạy :set list
để bạn có thể nhìn thấy các ký tự tab.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
Trong chế độ chèn, nhấn phím tab sẽ chèn 2 ký tự khoảng trắng. Nhấn phím tab lần thứ hai và thay vì chèn thêm hai ký tự khoảng trắng (tổng cộng là 4 ký tự khoảng trắng), nó sẽ thay thế 2 khoảng trắng trước đó bằng một ký tự tab. Tabstop được đặt thành 4, do đó, một ký tự tab duy nhất có cùng chiều rộng bằng 4 dấu cách.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
Trong chế độ chèn, nhấn phím tab sẽ chèn 1 ký tự tab cộng với 2 dấu cách. Ký tự tab có chiều rộng là 4, do đó, tổng chiều rộng là 6 và đạt được điều này bằng cách sử dụng 3 ký tự. Nhấn phím tab lần thứ hai sẽ chèn hai ký tự tab và xóa hai khoảng trắng đã được chèn trước đó. Tổng chiều rộng là 12 và đạt được điều này bằng cách sử dụng 3 ký tự.
Trong cả hai ví dụ này, Vim chèn số ký tự tab + khoảng trắng tối thiểu có thể phù hợp với softtabstop.
Nếu tôi đang làm việc với expandtab bị tắt, tôi không thể thấy mình muốn kiểm soát chi tiết hơn có thể đạt được bằng cách đặt softtabstop thành một giá trị khác với tabstop. Nó vẫn sẽ có ích cho tôi để có thể thiết lập tabstop
, softtabstop
và shiftwidth
để cùng giá trị với một lệnh duy nhất.
Expandtab có làm cho softtabstop dư thừa không?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
Trong chế độ chèn, nhấn phím tab sẽ chèn 4 khoảng trắng. Nhấn phím xóa sẽ xóa một khoảng trắng - vì vậy bạn phải xóa lùi 4 lần nếu vô tình nhấn phím tab.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
Trong chế độ chèn, nhấn phím tab sẽ chèn 4 khoảng trắng. Nhấn phím xóa lùi sẽ xóa 4 khoảng trắng.
Nếu tôi đang làm việc với expandtab
bật, tôi muốn phím xóa để loại bỏ cùng một lượng khoảng trắng như phím tab chèn. Vì vậy, trong trường hợp này cũng vậy, tôi cảm thấy rằng nó sẽ hữu ích để có thể gán giá trị tương tự để tabstop
, softtabstop
và shiftwidth
cùng một lúc.
Một phím tắt sẽ vẫn hữu ích
Thật tuyệt khi Vim cung cấp rất nhiều tính linh hoạt, nhưng tôi không thấy mình cần nó. Tôi chỉ muốn có thể chọn chiều rộng của tab và cho dù đó là tab 'cứng' (sử dụng ký tự tab) hay tab 'mềm' (được tạo thành từ các khoảng trắng). Chuyển đổi giữa các tab cứng và mềm là đủ dễ dàng ( :set expandtab!
), nhưng tôi ước nó đơn giản hơn để đặt độ rộng của tab mà không cần phải loay hoay với 3 tham số khác nhau.
Vì vậy, đề xuất được đề xuất của tôi cho một cái gì đó như :set stab=4
vẫn còn tốt cho tôi.