Làm thế nào để thêm hướng dẫn / dòng thụt


42

Trong Sublime Text 2, bạn nhận được các hướng dẫn dọc nơi thụt lề của bạn, như thế này:

Ảnh chụp màn hình văn bản tuyệt vời

nhưng trong vim tôi rõ ràng là không:

ảnh chụp màn hình vim

Có cách nào để hiển thị các dòng như thế trong vim? Nhân tiện, vết lõm của tôi là 2 khoảng trắng.

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab

Câu trả lời:


39

Câu trả lời thống nhất:

Nếu bạn đang sử dụng tab

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();
|       }

ảnh chụp màn hình mẫu văn bản ở trên

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.

Nếu bạn đang sử dụng khoảng trắng, và đừng bận tâm sử dụng plugin

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   ¦ };

ảnh chụp màn hình ví dụ với dấu cách

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)

Hãy cẩn thận

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 ifkhông có thanh, tạo khoảng cách trực quan)


Trên thực tế, tôi đang sử dụng khoảng trắng để thụt lề thay vì các tab. Tôi đã cập nhật câu hỏi của mình.
aharris88

Oh. Vậy thì, điều đó sẽ đòi hỏi nhiều nghiên cứu hơn.
John O'M.

1
Có một bản vá để làm cho danh sách hoạt động cho các không gian không theo dõi, mà bạn có thể khai thác trong danh sách gửi thư. Tuy nhiên, nó chưa được chấp nhận vào bản phân phối chính thức :(

1
Cập nhật câu trả lời để bao gồm thông tin từ Vaibhav Sagar và Josh Petrie. Tôi đã thử dùng plugin Vaibhav đã đề cập và hiển thị kết quả trong câu trả lời được chỉnh sửa. Tôi nghĩ rằng tôi sẽ bắt đầu sử dụng plugin này bản thân mình. Nó không tuyệt vời, nhưng nói chung dường như hoạt động khá tốt.
John O'M.

Có thể làm cho các hướng dẫn xuất hiện trên các dòng trống như họ làm trong cao siêu?
James

19

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

minh họa con trỏ

Đ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.


Người dùng Python vi sẽ chết vì tính năng này
shuva

18

Để 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 tabstopshiftwidth, 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.

Imgur

Sau khi plugin được cài đặt, bạn chỉ cần sử dụng :IndentGuidesEnablehoặ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.


thêm let g:indent_guides_enable_on_vim_startup=1vào .vimrc của tôi để kích hoạt tính năng này khi khởi động.
inye

9

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 concealtí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).


4
Vui lòng xem thảo luận của chúng tôi về các câu trả lời chỉ liên kết với plugin và xem xét cập nhật câu trả lời của bạn với nhiều thông tin hơn.

Lỗi của tôi, tôi đã cập nhật câu trả lời của tôi.
Vaibhav Sagar

Mà glyph là đường thẳng đứng vá? Bạn có thể dán nó ở đây? Cảm ơn.
Timtro

2

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.

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.