Vim이 설정된 텍스트 너비의 가장자리에 선을 표시하게하십시오.


26

요즘 사용하는 대부분의 텍스트 편집기와 IDE에는 텍스트 버퍼에 특정 문자 길이로 줄을 표시 할 수있는 기능이 있습니다. 파일의 행을 특정 길이로 유지하려는 경우에 유용합니다.

Vim이 이미 정의 된 textwidth값을 사용 하여이 작업을 수행 할 수있는 방법이 있습니까? 그 시점에서 줄이 자동으로 줄 바꿈되지만 실제로 어디에 있는지 볼 수 있기를 바랍니다.

중요한 경우, 주로 Windows에서 gVim을 사용하고 있지만 솔루션이 Vim 버전에서 작동하면 좋을 것입니다.

답변:


41

(g) vim의 경우 다음을 사용하십시오.

set colorcolumn=80

또는 원하는 너비. vim과 gvim에서 작동합니다. IF 내에 내 것이 있으므로 편집하는 파일 형식에 따라 조건부입니다.

& textwidth에서 +/- 열의 기준 위치로 + x / -x를 사용할 수도 있습니다.

set textwidth=80
set colorcolumn=-2

문자 위치 78에서 색상 막대를 효과적으로 그립니다. 물론 텍스트 너비를 직접 설정하거나 설정하지 않을 수도 있으므로 0 (기본값) 일 수 있습니다. 절대 위치 형식을 사용합니다.

원하는 경우 사용되는 색상을 변경할 수도 있습니다.

highlight ColorColumn ctermbg=green guibg=orange

(하지만 THOSE 색상은 권장하지 않습니다)

이 옵션은 (g) vim 7.3에서 추가되었습니다.


어떤 버전의 Vim이 지원됩니까? gvim 7.2에서는 작동하지 않습니다.
— Herms

7.3을 실행 중입니다. 방금 소스 코드를 가져 와서 보았습니다.이 명령은 7.3에서 도입되었습니다.
— lornix

vim 7.3의 Ubuntu 12.04에서 나를 위해 작동합니다. Windows 용 gvim 7.3 은 2010 년 10 월부터 사용할 수 있습니다. @Herms이 답변을 할 수 있습니까?
— poindexter

여러 개의 창을 나란히 사용할 때 이것이 효과가 있다면 좋을 것입니다. 내 모니터는 여러 창을 연속으로 표시 할 수있을 정도로 넓습니다. 각 창은> 80 자이지만 colorColumn은 첫 번째 (가장 왼쪽) 창에서만 작동합니다.
— Eno

3

Google 코드 에는 다음과 같은 코드 조각 이 있습니다.

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

흠, 그 스레드는 Windows의 gvim이 이미 그것을 지원한다고 제안하지만 어떻게 켜는 지 알 수 없습니다.
— Herms

스레드에서 gvimrc 파일에 추가 할 코드가 있습니다.
— EBGreen

그 줄을 넘어서는 캐릭터의 배경을 변경하는 것처럼 보입니다. 차라리 다른 편집자들처럼 항상 볼 수있는 가이드를 원합니다.
— Herms

GUI의 특성으로 인해 현재 가능한 것은 아닙니다.
— EBGreen

이것은 질문에서 요청한 것처럼 텍스트 너비에 맞지 않습니다.
— Steven Roose

2

StackOverflow 답변 당 :

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

취향에 맞게 조정하십시오.


흠, 내가 찾고있는 것은 아니지만 (문자가 줄을 지나갈 때만 표시됨) 아무것도 아닌 것보다 낫습니다.
— Herms

이것은 질문에서 요청한 것처럼 텍스트 너비에 맞지 않습니다.
— Steven Roose

1

내가 좋아하는 lornix '대답 을 많이하지만 열을 강조하고 싶지 않아 모든 시간을 , 적어도 하나의 선은 길이 제한을 초과하는 경우에만 :

줄이 너무 길면 열 표시

Haskell 파일에 대한 방법은 다음과 같습니다.

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

이것은 종종 #vim과 일부 포럼에서 논의되었습니다. 지금 상황이되면 불가능합니다. 따라서 언급 된 솔루션은 유일한 옵션입니다.

문제는 vim은 문자가있는 곳 (문자, 숫자 또는 일반 공백)으로 무엇이든 할 수 있다는 것입니다. 그러나 아무 것도 없으면 배경을 다른 색으로 칠할 수 없습니다 (원하는 것처럼). 그리고 무언가를 입력하기 전에는 아무것도 없으므로 선 / 여백을 그릴 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.