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.