Đặt Vim hiển thị một dòng ở cạnh của băng thông văn bản đã đặt


26

Hầu hết các trình soạn thảo văn bản và IDE mà tôi sử dụng ngày nay đều có một tính năng trong đó chúng có thể hiển thị một dòng ở một độ dài ký tự nhất định trong bộ đệm văn bản. Nó hữu ích khi bạn muốn giữ các dòng trong một tệp dưới một độ dài nhất định.

Có cách nào để khiến Vim làm điều này, tốt nhất là sử dụng textwidthgiá trị đã được xác định ? Các dòng sẽ tự động bao bọc tại thời điểm đó, nhưng tôi thực sự muốn có thể xem nó ở đâu.

Trong trường hợp có vấn đề, tôi chủ yếu sử dụng gVim trên Windows, nhưng tôi rất thích nếu giải pháp này hoạt động trên các phiên bản Vim.

Câu trả lời:


41

cho (g) vim, sử dụng như sau:

set colorcolumn=80

hoặc bất kỳ chiều rộng nào bạn muốn. Hoạt động trong cả vim & gvim. Tôi có của tôi trong một IF vì vậy nó có điều kiện dựa trên loại tệp tôi chỉnh sửa.

Bạn cũng có thể sử dụng + x / -x cho vị trí cơ sở của cột +/- từ & độ rộng văn bản.

set textwidth=80
set colorcolumn=-2

sẽ có hiệu quả vẽ thanh màu ở vị trí char 78. Tất nhiên, bạn có thể hoặc không thể tự đặt băng thông văn bản, vì vậy nó có thể là 0 (mặc định). Tôi sử dụng mẫu vị trí tuyệt đối.

Bạn cũng có thể thay đổi màu được sử dụng nếu bạn muốn:

highlight ColorColumn ctermbg=green guibg=orange

(Tôi không khuyên dùng màu này)

Tùy chọn này đã được thêm vào trong (g) vim 7.3.


Phiên bản này của Vim được hỗ trợ trong? Nó không hoạt động với tôi trong gvim 7.2.
Herms

Tôi đang chạy 7.3. Tôi vừa kéo mã nguồn và xem, lệnh này được giới thiệu trong 7.3.
lornix

Hoạt động với tôi trên Ubuntu 12.04 với vim 7.3. gvim 7.3 cho các cửa sổ đã có sẵn từ ít nhất là tháng 10 năm 2010 @ Bạn có thể đưa ra câu trả lời này không?
poindexter

Sẽ thật tuyệt nếu điều này hoạt động khi sử dụng nhiều cửa sổ cạnh nhau. Màn hình của tôi đủ rộng để hiển thị nhiều cửa sổ liên tiếp, mỗi cửa sổ> 80 ký tự nhưng colorColumn chỉ hoạt động trên cửa sổ đầu tiên (ngoài cùng bên trái).
Eno

3

Có một đoạn mã tại Google Code bạn có thể thử:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END

Hmm, chủ đề đó cho thấy gvim của windows đã hỗ trợ nó, nhưng tôi không thể tìm ra cách bật nó lên.
Herms

Có một số mã để thêm vào tệp gvimrc của bạn trong luồng.
EBGreen

có vẻ như điều đó chỉ thay đổi nền cho các nhân vật vượt ra ngoài dòng đó. Tôi muốn có một hướng dẫn luôn hiển thị như các biên tập viên khác có.
Herms

Do tính chất của gui, tôi không tích cực mà hiện tại có thể.
EBGreen

Điều này không thích ứng với băng thông như yêu cầu trong câu hỏi.
Steven Roose

2

Theo câu trả lời của StackOverflow :

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.*/

Điều chỉnh cho phù hợp với khẩu vị của bạn.


Hừm, không hoàn toàn những gì tôi đang tìm kiếm (chỉ hiển thị khi các nhân vật đi qua dòng), nhưng tốt hơn là không có gì.
Herms

Điều này không thích ứng với băng thông như yêu cầu trong câu hỏi.
Steven Roose

1

Tôi thích câu trả lời của lornix rất nhiều nhưng tôi không muốn làm nổi bật cột mọi lúc , chỉ khi ít nhất một dòng vượt quá giới hạn độ dài:

cột hiển thị khi dòng quá dài

Đây là cách tôi làm điều đó cho các tệp Haskell của mình:

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See /programming/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction

0

Điều này thường được thảo luận trên #vim và trong một số diễn đàn. Theo như mọi thứ bây giờ, nó là không thể. Vì vậy, giải pháp được đề cập là lựa chọn duy nhất của bạn, afaik.

Vấn đề là, vim có thể làm bất cứ điều gì với những nơi có ký tự (chúng là chữ cái, số hoặc chỉ là khoảng trắng đơn giản). Nhưng nó không thể vẽ một nền bằng một màu khác (như bạn muốn), nếu không có gì ở đó. Và trước khi bạn nhập một cái gì đó, không có bất cứ thứ gì ở đó, vì vậy nó không thể vẽ một dòng / lề.

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.