2009-07-20 23 views
6

Sử dụng vim, tôi muốn có hiệu lực là expandtabs tắt nếu tôi ở bên trái của bất kỳ văn bản nào trên dòng và nếu tôi ở bên phải của bất kỳ ký tự không khoảng trống nào. (Tôi muốn sử dụng các tab cho thụt đầu dòng và khoảng trống cho căn chỉnh.)Vim có thể được thực hiện để chỉ mở rộng các tab ở bên trái văn bản không?

Việc này có thể thực hiện được không?

+0

Tôi thực sự tin rằng nó có thể được thực hiện. Tôi chỉ không nghĩ rằng nó sẽ được bất kỳ dễ dàng, mặc dù. –

Trả lời

5

Yes. Sử dụng plugin Smart Tabs.

Tập lệnh này cho phép bạn sử dụng cài đặt tab bình thường cho đầu dòng và mở rộng các tab thành không gian ở bất kỳ nơi nào khác. Điều này phân biệt hiệu quả 'thụt lề' từ 'căn chỉnh'.

<tab> Sử dụng cài đặt tab trình soạn thảo để chèn tab ở đầu dòng (trước ký tự không dấu cách đầu tiên) và chèn dấu cách khác.

<BS> Sử dụng các thiết lập tab soạn thảo để xóa tab hoặc tab 'mở rộng' ala smarttab

Để làm Vim xếp hàng đối số chức năng, thêm

set cindent 
set cinoptions=(0,u0,U0 

để .vimrc. Plugin sẽ mã hóa các khoảng trắng như vậy:

int f(int x, 
......int y) { 
--->return g(x, 
--->.........y); 
} 

Điều này làm cho sự liên kết của "x" và "y" không phụ thuộc vào kích thước tab (tabstop).

4

Hãy thử một cái gì đó như thế này:

function! TabMaybeIndent() 
    if strpart(getline('.'), 0, col('.') - 1) =~ '^\s*$' 
     return "\<Tab>" 
    else 
     return " " 
    endif 
endfunction 

set noexpandtab 
imap <Tab> <C-r>=TabMaybeIndent()<CR> 
+0

Điều này giống như một cách tiếp cận hợp lý. Với các điều chỉnh nhỏ, bạn thậm chí có thể làm theo cài đặt 'softtabstop' hiện tại thay vì mù quáng chèn 4 dấu cách. – ephemient

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