Câu trả lời:
Câu trả lời thống nhất:
Tôi sẽ thử sử dụng listchars:
:set listchars=tab:\|\
:set list
lưu ý: có một khoảng trống sau cuối cùng \
ở trên.
Phương pháp này tốt vì nó sử dụng hỗ trợ tích hợp của Vim để hiển thị loại điều này.
Ví dụ đầu ra:
| if (1) {
| | func();
| }
Tuy nhiên, điều này không làm việc cho không gian hàng đầu. Như @Josh Petrie đã chỉ ra, có một bản vá để làm việc cho các không gian , nhưng sau đó bạn phải biên dịch lại Vim, nằm ngoài phạm vi của câu trả lời này.
Vaibhav Sagar chỉ ra plugin indentLine thực hiện chức năng này.
Cài đặt theo cách thông thường (xem cài đặt Plugin ) và có vẻ như nó chỉ hoạt động một cách kỳ diệu mà không cần nhập thêm. Nếu bạn không quan tâm đến các thanh ASCII, bạn không cần phải làm gì với phông chữ của mình. Ví dụ đầu ra của ví dụ của bạn sau khi cài đặt cài đặt thụt lề và chạy:IndentLinesReset
45 ¦ var move = function(direction) {
46 ¦ ¦ if(!initialized) { initialize(); }
47
48 ¦ ¦ if(shiftBoard(direction)) {
49 ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50 ¦ ¦ }
51 ¦ };
Plugin yêu cầu Vim 7.3 trở lên và giúp cleaver sử dụng tính năng Che giấu của phiên bản đó. Thay vì thực sự ẩn văn bản, nó thay thế văn bản bằng các thanh trong dạng xem, nhưng không phải là bộ đệm thực tế. Kết quả là bạn thấy các thanh nhưng chúng không được lưu vào tệp (vì chúng thực sự là khoảng trắng)
Cả hai phương pháp này đều giả sử mã thụt lề "đúng". Họ không đặt các dòng thụt ở mức độ thụt lề khi "khối" được mở (điều này có vẻ tuyệt vời để làm) mà thay vào đó đặt các dòng ở các khoảng đều đặn dựa trên cài đặt thụt lề của bạn. Ngoài ra, nó chỉ hiển thị các thanh trên các dòng có không gian thực sự (đó là lý do tại sao dòng trong đầu ra vim dưới đầu tiên if
không có thanh, tạo khoảng cách trực quan)
Một tùy chọn khác mà tôi sử dụng, không chính xác như những gì bạn yêu cầu, nhưng hoàn thành cùng một mục đích là giúp dễ dàng nhìn thấy những gì trong cùng một cột, là đặt các mục sau trong vimrc
:
set cursorcolumn
set cursorline
Điều này có sự đánh đổi rằng bạn phải di chuyển con trỏ đến cột bạn muốn xem, nhưng bạn sẽ có được sự lộn xộn thị giác ít hơn. Thông thường khi tôi quan tâm đến mức độ thụt đầu dòng, tôi vẫn giữ vị trí của mình bằng con trỏ. Cách của tôi cũng không phải là tìm kiếm lúng túng trong các ngôn ngữ như trăn mà không đóng niềng răng.
Để hoàn thiện, cũng có plugin Indent Guide , hiển thị mức độ thụt đầu dòng bằng cách xen kẽ các màu của khoảng trắng. Nó yêu cầu phiên bản 7.2 trở lên. Vì nó sử dụng các biến tabstop
và shiftwidth
, nên nó có thể sẽ hoạt động cho các cài đặt thụt đầu dòng của bạn ngay lập tức.
Sau khi plugin được cài đặt, bạn chỉ cần sử dụng :IndentGuidesEnable
hoặc :IndentGuidesDisable
. Nếu bạn đang sử dụng terminal vim, hãy lưu ý rằng, theo hướng dẫn,
Hiện tại Terminal Vim chỉ có hỗ trợ cơ bản. Điều này có nghĩa là màu sắc sẽ không được tính toán tự động dựa trên bảng màu của bạn. Thay vào đó, một số màu đặt trước được sử dụng tùy thuộc vào việc nền được đặt thành tối hay sáng.
Để thay đổi màu sắc của các hướng dẫn cho ảnh chụp màn hình, tôi đã sử dụng như sau
let g:indent_guides_auto_colors=0
vì vậy màu sắc không được tính toán lại khi bộ đệm được hoán đổi, và sau đó thiết lập màu sắc bằng cách sử dụng
hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236
Cũng như các giải pháp khác được trình bày, nó chỉ hiển thị các hướng dẫn thụt lề trên các dòng là có khoảng trắng.
let g:indent_guides_enable_on_vim_startup=1
vào .vimrc của tôi để kích hoạt tính năng này khi khởi động.
Tôi đã tìm thấy plugin indentLine là tốt nhất cho việc này. Bạn cần một phông chữ với các ký hiệu phù hợp, tôi thấy Consolas trên Windows và Menlo trên Mac OS X hoạt động tốt. Như được chỉ ra trong câu trả lời thống nhất ở trên, nó hoạt động bằng cách (ab) sử dụng conceal
tính năng của vim để đặt các thanh dọc (từ phông chữ được sử dụng) vào đúng chỗ. Tôi khá hài lòng với giải pháp này nhưng nhược điểm của nó là các thanh dọc của tôi là một phần của glyphs vẽ hộp và chúng được căn giữa thay vì căn lề trái như trong các trình soạn thảo khác. Tôi đã quen với nó nhưng nó có thể được sửa bằng cách vá thủ công phông chữ của bạn hoặc sử dụng phông chữ như Fantasque Sans Mono (lưu ý cách các ảnh chụp màn hình trong repo github được liên kết sử dụng indentLine).
Plugin indentLine có xu hướng khá chậm trên các tệp không nhỏ, có thể quan sát được khi nhấp vào enter khi nó chậm hơn một giây.
Tôi đã tìm thấy vim-indentguides là một plugin nhanh hơn và tương tự trực quan, nó cũng phân biệt trực quan các thụt lề so với thụt lề không gian.