it-swarm-vi.tech

Tab và dấu cách trong vim

Làm cách nào để ngăn vim thay thế khoảng trắng bằng tab khi bật chế độ tự động?

Một ví dụ: nếu tôi có hai tab và 7 khoảng trắng ở đầu dòng và tabstop=3 và tôi nhấn Enter, dòng tiếp theo có bốn tab và 1 khoảng trắng ở đầu, nhưng tôi không muốn điều đó ...

71
RQ

Có lẽ là không nên sử dụng các tab.

:set expandtab

Nếu bạn muốn thay thế tất cả các tab trong tệp của mình thành 3 khoảng trắng (trông sẽ khá giống với tabstop=3):

:%s/^I/   /

(Ở đâu ^I là TAB tính cách)

Từ VIM trợ giúp trực tuyến:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be Nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.
78
user11211

Bạn có thể chuyển đổi tất cả TAB thành SPACE

:set et
:ret!

hoặc chuyển đổi tất cả SPACE thành TAB

:set et!
:ret!
42
kev

tất cả những gì tôi muốn là dòng tự động có chính xác các ký tự thụt giống như dòng trước đó.

:help copyindent

'copyindent''ci'boolean (tắt mặc định); cục bộ để đệm; {không ở Vi}

Sao chép cấu trúc của các dòng hiện có thụt lề khi tự động xác định một dòng mới. Thông thường, thụt lề mới được xây dựng lại bằng một loạt các tab theo sau là khoảng trắng theo yêu cầu (trừ khi 'extendtab' được bật, trong trường hợp đó chỉ sử dụng khoảng trắng). Kích hoạt tùy chọn này làm cho dòng mới sao chép bất kỳ ký tự nào được sử dụng để thụt vào dòng hiện có. Nếu thụt lề mới lớn hơn trên dòng hiện có, không gian còn lại được điền theo cách thông thường.

LƯU Ý: 'copyindent' được đặt lại khi 'tương thích' được đặt.
[.___.] Cũng xem 'bảo vệ' .

:help preserveindent

'reservedindent''pi'boolean (tắt mặc định); cục bộ để đệm; {không ở Vi}

Khi thay đổi thụt lề của dòng hiện tại, bảo tồn càng nhiều cấu trúc thụt lề càng tốt. Thông thường, thụt lề được thay thế bằng một loạt các tab theo sau là khoảng trắng theo yêu cầu (trừ khi 'extendtab' được bật, trong trường hợp đó chỉ sử dụng khoảng trắng). Bật tùy chọn này có nghĩa là thụt lề sẽ bảo tồn càng nhiều ký tự hiện có càng tốt để thụt lề và chỉ thêm các tab hoặc khoảng trắng bổ sung theo yêu cầu.

LƯU Ý: Khi sử dụng ">>" nhiều lần, thụt lề kết quả là hỗn hợp các tab và dấu cách. Bạn có thể không thích điều này.
[.__.] LƯU Ý: 'reservedindent' được đặt lại khi 'tương thích' được đặt.
[.__.] Cũng xem 'copyindent' .
[.__.] Sử dụng: retab để dọn sạch khoảng trắng.

41
Aristotle Pagaltzis

Đây là một phần trong .vimrc Của tôi:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Điều này hoạt động tốt với tôi vì tôi hoàn toàn không muốn các tab trong mã nguồn của mình. Dường như từ câu hỏi của bạn rằng bạn muốn giữ hai tab và bảy khoảng trắng trên dòng tiếp theo, và tôi không chắc có cách nào để dạy vim để phù hợp với phong cách đó.

25
Greg Hewgill

Có lẽ phần dưới của điều này có thể giúp bạn?

Standard vi diễn giải khóa tab theo nghĩa đen, nhưng có những lựa chọn thay thế có nguồn gốc vi phổ biến thông minh hơn, như vim. Để có được vim để diễn giải tab như một lệnh `` indent '' thay vì lệnh insert-a-tab, hãy làm điều này:

set softtabstop=2
1
svrist

Nếu bạn muốn thay thế tất cả các tab bằng khoảng trắng dựa trên cài đặt 'ts', bạn có thể sử dụng: retab. Nó cũng có thể làm ngược lại.

1
graywh