Câu hỏi Phím Tab == 4 dấu cách và tự động thụt lề sau dấu ngoặc nhọn trong Vim


Tôi làm cách nào vi- -Vim không bao giờ sử dụng các tab (chuyển đổi các không gian thành các tab, xấu!), làm cho phím tab == 4 dấu cách và tự động thụt lề mã sau các khối dấu ngoặc nhọn như Emacs làm?

Ngoài ra, làm cách nào để lưu các cài đặt này để tôi không bao giờ phải nhập lại chúng?

Tôi đã nhìn thấy các câu hỏi khác liên quan đến điều này, nhưng nó luôn luôn có vẻ là một chút từ những gì tôi muốn.


1058
2017-10-24 17:41


gốc


Liên quan: Làm cách nào để thay thế các tab bằng dấu cách? tại Vim SE - kenorb


Các câu trả lời:


Như đã được chỉ ra trong một vài câu trả lời dưới đây, phương pháp ưa thích bây giờ là KHÔNG sử dụng smartindent, nhưng thay vào đó sử dụng sau đây (trong của bạn .vimrc):

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

Trong của bạn .vimrc: tập tin:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

Các tệp trợ giúp mất một chút thời gian để làm quen, nhưng bạn càng đọc nhiều thì Vim càng tốt:

:help smartindent

Thậm chí tốt hơn, bạn có thể nhúng các cài đặt này vào nguồn của bạn để có tính di động:

:help auto-setting

Để xem cài đặt hiện tại của bạn:

:set all

Như graywh chỉ ra trong các ý kiến, smartindent đã được thay thế bởi cindent mà "Làm việc khéo léo hơn", mặc dù vẫn chủ yếu cho các ngôn ngữ với cú pháp C-như:

:help C-indenting


1578
2017-10-24 17:45



Nếu bạn đã thiết lập expandtab thì nó sẽ sử dụng khoảng trống. Bạn cũng "thiết lập tương thích"? Điều đó có nhiều tác dụng phụ bao gồm đặt lại expandtab thành mặc định là "tắt" - Ken
Xin lỗi, nhưng smartindent đã được thay thế bằng cindent, mà chính nó chỉ thích hợp cho cú pháp kiểu C. Bật hoặc trong vimrc của bạn có thể là một vấn đề khi làm việc với các ngôn ngữ khác. Chỉ cần sử dụng "filetype indent on" để thay thế. - graywh
Vâng, smartindent là cũng thế chỉ cho cú pháp kiểu C và về cơ bản không được chấp nhận. - graywh
Ken: Bạn nên cập nhật câu trả lời, xem stackoverflow.com/a/23426067/2987828 được cập nhật hơn. - user2987828
nếu tôi bật expandtab, có cách nào để thực sự nhập ký tự tab trong văn bản không? - Daniele Segato


Liên quan, nếu bạn mở tệp sử dụng cả tab và dấu cách, giả sử bạn có

set expandtab ts=4 sw=4 ai

Bạn có thể thay thế tất cả các tab có dấu cách trong toàn bộ tệp bằng

:%retab

200
2017-11-27 05:42



FYI, nếu bạn không muốn tab của mình được thay thế bằng dấu cách, hãy xóa dòng expandtab. - Eno
Không phải là các tab khoảng trắng? ;-) - Rob Wells
@ Rob-Wells: Tôi đã thay đổi "khoảng trắng" thành "không gian". Bạn có hạnh phúc không? ;-) - netjeff
Bạn có thể giải thích dòng đầu tiên đó có nghĩa là gì không? - Nic Hartley
expandtab xác định xem tab có được mở rộng không gian hay không. ts = tabstop = Số lượng khoảng trống mà một <Tab> trong tệp đếm được. sw = shiftwidth = Số lượng khoảng trống để sử dụng cho mỗi bước thụt lề (tự động). ai = autoindent = Sao chép thụt lề từ dòng hiện tại khi bắt đầu một dòng mới. - mcmacerson


Cách tốt nhất để lấy thụt đầu dòng cụ thể về filetype là sử dụng filetype plugin indent on trong vimrc của bạn. Sau đó, bạn có thể chỉ định những thứ như set sw=4 sts=4 et Ví dụ, trong .vim / ftplugin / c.vim, mà không cần phải làm cho toàn cầu đó cho tất cả các tệp đang được chỉnh sửa và các cú pháp kiểu không phải C khác cũng sẽ được thụt lề một cách chính xác (thậm chí là lisps).


83
2018-01-04 21:09



IMHO, tốt hơn câu trả lời đã được đánh dấu đúng. filetype indent trên supersedes cindent và smartindent. - 0fnt


Để có các tab 4 dấu cách trong hầu hết các tệp, thẻ tab 8 toàn thực trong Makefiles và tự động thụt lề trong các tệp khác nhau bao gồm C / C ++, hãy đặt nó trong ~/.vimrc tập tin:

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.

42
2018-01-24 02:42



Tại sao bạn không cần mộtelse ? Dường như với tôi như các dòng cuối ghi đè lên makefile cụ thể trong mọi trường hợp - lucidbrot
Xin chào @lucidbrot, câu lệnh "autocmd FileType make" về cơ bản cho vim một số cài đặt sử dụng bất cứ khi nào nó mở một tệp Makefile. Trong khi các dòng bên dưới nó đang thiết lập các giá trị mặc định. Nói cách khác, cài đặt "tabstop = 8 ..." được áp dụng sau khi tệp được mở và sẽ ghi đè cài đặt "tabstop = 4 ..." áp dụng khi khởi chạy. - Shervin Emami


Trên nhiều hệ thống Linux, như Ubuntu, .vimrc tệp không tồn tại theo mặc định, vì vậy bạn nên tạo tệp trước tiên.

Không sử dụng .viminfo tệp tồn tại trong thư mục chính. Nó được sử dụng cho một mục đích khác nhau.

Bước 1: Chuyển đến thư mục chính của bạn

cd ~

Bước 2: Tạo tệp

vim .vimrc

Bước 3: Thêm cấu hình nêu trên

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

Bước 3: Lưu tệp, bằng cách nhấn Shift + ZZ.


39
2017-08-04 13:26



Không sử dụng Shift + ZZ nó sẽ tạo tệp .swp. sử dụng wq. - shas
Đây là cái đã làm việc cho tôi trên Debian 8.5. - tkjef
@shas: "ZZ" tương đương với ": x", giống như ": wq", ngoại trừ việc nó chỉ lưu nếu tập tin đã bị thay đổi ... (Ctrl-Z là một câu chuyện khác ...) - Gert van den Berg


Cách được khuyến nghị là sử dụng thụt lề dựa trên filetype và chỉ sử dụng smartindent và cindent nếu điều đó không đủ.

Thêm phần sau vào tệp .vimrc của bạn

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

Hy vọng nó sẽ giúp như là một câu trả lời khác nhau.


26
2017-11-18 19:08





Từ Wiki VIM:

:set tabstop=4
:set shiftwidth=4
:set expandtab

9
2017-10-08 01:26