2011-06-29 32 views
6

Tôi đã thấy các giải pháp từng phần trên internet nhưng không có gì thực sự hài lòng với tôi: tôi phải đặt gì vào .vimrc (lý tưởng là tôi không muốn có cơ hội nào cú pháp/*. tệp vim) sao cho trong tất cả các tệp .c/cpp/h mà tôi mở, tôi nhận được tự động gấp các phần #ifdef ... #endif?Tự động điền #ifdef .. # endif trong vim qua .vimrc

+0

Bạn đang sử dụng phương pháp đo độ rộng nào? Cú pháp gấp? –

+0

Có, cú pháp gấp (nhưng tôi đoán tôi có thể làm điều này nếu điều này giúp giảm gấp tự động) – dcn

Trả lời

6

Nếu loại duy nhất của gấp mà bạn muốn là #ifdef phần, cách dễ nhất là để tạo ra một tập tin ~/.vim/after/ftplugin/c.vim (bạn cũng có thể cần phải làm điều này trong cpp.vim, tôi không chắc chắn) với nội dung sau:

set foldmarker=#ifdef,#endif 
set foldmethod=marker 

Nếu bạn thực sự muốn đặt nó trong .vimrc hơn là sử dụng cấu trúc ~/.vim/after/, bạn có thể làm một cái gì đó như thế này:

autocmd FileType *.[ch]{,pp} call FoldPreprocessor() 
function! FoldPreprocessor() 
    set foldmarker=#ifdef,#endif 
    set foldmethod=marker 
endfunction 

bạn cũng có thể muốn xem xét u hát:

set foldmarker=#if,#endif 

Như sẽ bắt #if defined(...), #ifdef, #ifndef, #if 0 vv cũng như #ifdef.

Làm điều này với cú pháp gấp là khó khăn hơn vì bạn sẽ phải thay đổi đặc tả cú pháp vì nó không hỗ trợ tiêu chuẩn này.

+2

vim đã có cú pháp C gấp, nhưng nó không gấp #x. Làm thế nào để thêm điều này vào cú pháp C tự động gấp? – orezvani

+0

Mẫu '*. [Ch] {, pp}' không hoạt động đối với tôi trên tệp 'cpp', cũng không có' * .cpp'. Khi tôi chỉ sử dụng '*' nó hoạt động. Bất kỳ ý tưởng gì vấn đề là gì? – oarfish

6

Bạn biết rằng bạn có thể điều hướng các khối điều kiện tiền xử lý bằng phím %?

Ngoài ra, [#] # điều hướng lên/xuống.

Vì vậy, bạn có thể đi đến sự bắt đầu của một khối có điều kiện (có lẽ với /^#Nhập), sau đó

zf%    -- fold to next conditional directive 
v2]#zf   -- fold to second next directive (e.g. #else... #endif) 

zd để thả các lần.

Có lẽ bạn có thể đưa ra một kịch bản nhỏ xung quanh khái niệm này. Tôi không chắc chắn liệu sẽ có sự tương tác (bất lợi) với cú pháp cú pháp thông thường hay không, vì tôi không có thói quen sử dụng nó. Tôi thường sử dụng gấp indent với thao tác gấp thủ công như thế này.

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