Tự động thụt lề dấu cách với C trong vim?


85

Tôi đã hơi hỏng khi sử dụng Eclipse và java. Tôi đã bắt đầu sử dụng vim để viết mã C trong môi trường linux, có cách nào để vim tự động tạo khoảng cách thích hợp cho các khối không?

Vì vậy, sau khi gõ {dòng tiếp theo sẽ có 2 dấu cách thụt vào và dấu trả lại trên dòng đó sẽ giữ nguyên một dấu cách thụt vào và a} sẽ lùi lại 2 dấu cách?

Câu trả lời:


134

Hai lệnh này sẽ làm điều đó:

:set autoindent
:set cindent

Để có điểm thưởng, hãy đưa chúng vào một tệp có tên .vimrc nằm trong thư mục chính của bạn trên linux


12
Tôi cũng khuyên bạn nên đặt chúng vào ~ .vim / ftplugin / c.vim để bạn không sử dụng cindent mọi lúc, nhưng chỉ cho các tệp C / C ++.
greywh

@graywh: Còn đối với pl, php, cpp, as, java và tất cả các tệp khác mà tôi muốn có cùng một thụt lề thì sao? Tôi có cần tạo tệp cài đặt riêng cho từng tệp không?
davr 22/09/10

17
Tôi dựa script của Vim kèm indent (: filetype thụt lề trên) mà là nhiều hơn chỉ sử dụng 'cindent' luôn.
greywh 24/09/10

3
tại sao filetype thụt đầu dòng là tốt hơn so với sử dụng cindent là cũng giải thích ở đây: vim.wikia.com/wiki/...
Jayen

1
Đối với autoindent, bạn có thể muốn sử dụng viết tắt: set ai
Iam Zesh

56

Tôi đã viết tất cả về các tab trong vim , điều này mang lại một vài điều thú vị mà bạn chưa hỏi. Để tự động thụt lề, hãy sử dụng:

:set cindent

Để thụt lề hai dấu cách (thay vì một tab gồm tám dấu cách, mặc định vim):

:set shiftwidth=2

Để giữ cho vim không chuyển đổi tám khoảng trắng thành tab:

:set expandtab

Nếu bạn muốn thay đổi thụt lề của một khối văn bản, hãy sử dụng <và>. Tôi thường sử dụng điều này cùng với chế độ chọn khối (v, chọn một khối văn bản, <hoặc>).

(Tôi muốn nói với bạn về việc sử dụng thụt lề hai dấu cách, vì tôi (và hầu hết những người khác) cảm thấy khó đọc, nhưng đó là một cuộc thảo luận khác.)


Blog rất hay Tôi vẫn còn khá mới đối với vim, rất vui khi biết rằng có nhiều tài nguyên tốt ở đó.
zxcv 18-08

3
Bạn cũng đã bỏ lỡ việc thay đổi softtabstop ngoài dịch chuyển băng thông.
graywh

8

Rất nhiều tính năng của vim (như autoindentcindent) bị tắt theo mặc định. Để thực sự thấy những gì vim có thể làm cho bạn, bạn cần có một tư duy đàng hoàng ~/.vimrc.

Một khởi động tốt đang ở trong $VIMRUNTIME/vimrc_example.vim. Nếu bạn muốn dùng thử, hãy sử dụng

:source $VIMRUNTIME/vimrc_example.vim

khi ở trong vim.

Tôi thực sự khuyên bạn chỉ nên sao chép nội dung vào của bạn ~/.vimrcvì nó đã được nhận xét tốt và là một nơi tốt để bắt đầu học cách sử dụng vim. Bạn có thể làm điều này bằng cách

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

Điều này sẽ ghi đè lên hiện tại của bạn ~/.vimrc, nhưng nếu tất cả những gì bạn có trong đó là cài đặt thụt lề mà Davr đề xuất, tôi sẽ không lo lắng về nó, vì ví dụ vimrc cũng sẽ xử lý điều đó cho bạn. Để có hướng dẫn đầy đủ về ví dụ và những gì nó mang lại cho bạn, hãy xem :help vimrc-intro.


6

Chỉ cần chạy:

user@host:~ $ echo set autoindent >> .vimrc

1
Tôi không phải là người bỏ phiếu thấp, nhưng có lẽ chỉ vì đơn giản là "set autoindent" không tự động thụt lề khi nhập "{" và "}", và nó cũng không tự động đặt khoảng cách thành 2 dấu cách. Đây là những gì họ yêu cầu.
Victor Zamanian

3

Tôi nghĩ câu trả lời tốt nhất thực sự được giải thích trên vim wikia:

http://vim.wikia.com/wiki/Indenting_source_code

Lưu ý rằng nó khuyên bạn không nên sử dụng "set autoindent." Tính năng tốt nhất mà tôi tìm thấy trong phần giải thích này là có thể đặt cài đặt cho mỗi tệp, điều này đặc biệt hữu ích nếu bạn lập trình bằng python và C ++, chẳng hạn, vì bạn muốn 4 khoảng trắng cho tab ở trước và 2 cho dấu cách ở sau.


0

và luôn nhớ lời giải thích đáng kính này về Dấu cách + Tab:

http://www.jwz.org/doc/tabs-vs-spaces.html


2
Lập luận của anh chàng đó là gì? Tôi không tuân theo cách không sử dụng ký tự TAB và thay vào đó, điền vào các khoảng trống được mã hóa cứng, giải quyết vấn đề của mọi người. Ví dụ, điều đó sẽ khiến bạn không thể mở một tệp và có độ rộng của các thụt lề của tệp đó xuất hiện theo sở thích của riêng bạn.
thomasrutter

1
Giải pháp của anh chàng này tốt hơn nhiều :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter

-1

Thử:

đặt sw = 2

đặt ts = 2

thiết lập thông minh


Theo sự trợ giúp, cindent tốt hơn smartindent, nhưng chỉ hoạt động đối với mã giống C.
thomasrutter

smartindent không được dùng nữa (cũng chỉ dành cho mã giống C). Tập lệnh thụt lề của Filetype tốt hơn nhiều.
greywh

@graywh ngoài wiki nguồn có thẩm quyền nào cho biết trạng thái không dùng nữa của smartindent?
memeplex
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.