Hiển thị các tab dưới dạng ký tự


119

Khi tôi làm việc trên các tệp trong python, đôi khi tôi nhầm các tab cho khoảng trắng và ngược lại. Có cách nào để tôi có thể khiến Vim hiển thị một ký tự cho một tab thay vì một tab không?


Cũng như một ghi chú bên lề, bạn có thể định cấu hình để chuyển đổi tất cả các tab thành khoảng trắng với retabmỗi lần bạn lưu tệp.
0xc0de

Nếu bạn đã cài đặt vim-faq , bạn có thể nhận được câu trả lời ngoại tuyến ở đó: :h vim-faqvà tìm kiếm /invisible. Các thẻ khó để ghi nhớ là :h faq-19.8.
Hotschke

Câu trả lời:


119

Có, sử dụng bảng liệt kê:

set list
set listchars=tab:>-

Nếu bạn đặt hai dòng này trong .vimrc, các tab sẽ được hiển thị như >đối với vị trí bắt đầu và -thông qua phần còn lại của tab.

(Sidenote: listchars cũng có thể hiển thị dấu cách bằng trail:x(thay thế xbằng ký tự bạn muốn sử dụng cho dấu cách), cũng có thể hữu ích.)


6
Lưu ý: Tôi thích sử dụng set listchars=tab:!·,trail:·, IMHO ·rõ ràng hơn nhiều so với -... Bạn cần một phiên bản Vim khá gần đây để hoạt động btw (không chắc chính xác, tôi nghĩ 7.3.x) ...
Martin Tournoij

8
Tôi thích sử dụng ký tự unicode vì nó nhỏ hơn một chút >. Hiện tại tôi thấy dấu vết trắng bằng cách đánh dấu eol (mặc dù tôi có thể thử ở trên). Cài đặt của tôi là: set listchars=eol:¬,tab:▸\
Martin York

58

Câu trả lời cơ bản là :set list, khiến các tab hiển thị dưới dạng ^I.

Tuy nhiên, tôi khuyên bạn nên đi xa hơn thế. Chỉ :set listcó vấn đề ở chỗ nó không duy trì sự liên kết trực quan trên màn hình. Ví dụ:

%.o: %.cpp
^Ig++ -c $<

không nhìn tốt, đặc biệt là khi bạn mong đợi gcủa g++mình xuất hiện trong những người đầu tiên pcủa cpp(giả sử tabstop=8).

Do đó, tôi khuyên bạn .vimrcnên đặt một cái gì đó như :set listchars=tab:␉· (Để rõ ràng, đó là ký tự Unicode U + 2409 TRIỆU CHỨNG ĐỂ KIỂM TRA BỆNH NHÂN theo sau là U + 00B7 TRUNG CẤP DOT .)

Như đã giải thích :help listchars, cài đặt hai ký tự cho các tab:xynguyên nhân trực quan được giữ nguyên:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

Ví dụ trên sẽ xuất hiện trên màn hình như:

%.o: %.cpp
␉·······g++ -c $<

Cá nhân, tôi đi tất cả với listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

Các ký tự này đủ đặc biệt để chúng hiếm khi xuất hiện theo nghĩa đen trong văn bản tài liệu.

Để nhập các ký tự đặc biệt này vào của bạn vimrc, hãy nhập Ctrl-vu23CEtrong khi ở Chế độ chèn, như được giải thích trong :help utf-8-typing.


2
Xem thêmset lcs=tab:├─
sch

cái này chỉ cho tôi một? vào lúc eol
WendyG

14

Làm nổi bật các tab

Làm Tabnổi bật tạm thời

Để sử dụng không thường xuyên, người ta có thể chỉ cần tô sáng tất cả các tab trong tài liệu bằng /lệnh tìm kiếm sau :

/\t

Để xóa phần tô sáng, chỉ cần gõ :nohngắn gọn cho :nohlsearchánh sáng cao.

Làm Tabnổi bật vĩnh viễn

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Tab tô sáng trong vim

Làm nổi bật hơn

Để biết thêm về các lệnh tô sáng hữu ích này, hãy kết hợp với khoảng trắng ở cuối và làm cho bản thường trực này nhìn thấy wiki Vim .


4
Bạn cũng có thể sử dụng :match Error /\t/để làm nổi bật các tab (hoặc bất kỳ mẫu nào khác cho vấn đề đó) một cách độc lập với thanh ghi tìm kiếm và hlsearch (gõ :matchđể xóa nó).
Martin Tournoij

1
@Carpetsmoker Người ta có thể tìm thấy rất nhiều các lệnh tô sáng hữu ích này (bao gồm cả kết hợp với khoảng trắng ở cuối!) Trên wiki Vim về làm nổi bật các khoảng trắng không mong muốn .
Serge Stroobandt

9

Cá nhân tôi thích việc sử dụng plugin indentLine , hiển thị một đường thẳng đứng ở mức thụt.

Nó giúp ích rất nhiều đặc biệt là ở trăn, nơi vết lõm rất quan trọng.

(Ảnh chụp từ liên kết trên)

Trong số những thứ khác, nó cung cấp một lệnh chuyển đổi, có thể được ánh xạ tới một tổ hợp phím, để bạn có thể tắt nó đi, khi bạn không cần nó.


2
Tôi tin rằng plugin này là dành cho không gian thụt lề mặc dù?
Jake Byman

5

Bạn có thể muốn hiển thị các tab khác nhau trong một thiết bị đầu cuối và gvim thông thường.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Thêm để hoàn thiện, trong trường hợp người khác thấy nó hữu ích).


4

Phương pháp dễ nhất là làm :set list, nó sẽ hiển thị các tab như ^Ivà cuối dòng là $.

Tôi thích sử dụng bản đồ gọi

:set invlist 

để chuyển đổi giữa hiển thị thông thường và hiển thị danh sách.

Ví dụ:

:nmap <leader>l :set invlist<cr>

Điều này cho phép tôi nhanh chóng kiểm tra nếu có vấn đề về tab và không gian và sau đó quay lại màn hình thông thường.

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.