들여 쓰기 안내선 / 줄을 추가하는 방법


42

Sublime Text 2에는 다음과 같이 들여 쓰기가있는 세로 안내선이 있습니다.

숭고한 텍스트

그러나 vim에서는 분명히하지 않습니다.

vim 스크린 샷

vim에서 이와 같은 줄을 표시하는 방법이 있습니까? 그건 그렇고, 내 들여 쓰기는 2 칸입니다.

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

답변:


39

통합 답변 :

탭을 사용하는 경우

listchars를 사용하려고합니다.

:set listchars=tab:\|\ 
:set list

참고 : 마지막 \위 뒤에 공백이 있습니다.

이 방법은 Vim의 내장 지원을 사용하여 이런 종류의 것을 보여주기 때문에 좋습니다.

출력 예 :

|       if (1) {
|       |       func();
|       }

위의 텍스트 샘플 스크린 샷

그러나 선행 공간에서는 작동하지 않습니다. @Josh Petrie가 지적한 것처럼 spaces 용 패치가 있지만 Vim을 다시 컴파일해야합니다.이 답변의 범위를 벗어납니다.

공백을 사용 중이고 플러그인을 사용하지 않는 경우

Vaibhav Sagar는 indentLine 플러그인 이이 기능을 수행 한다고 지적했다 .

정상적인 방법으로 설치하고 (플러그인 설치 참조 ) 추가 입력없이 마술처럼 작동하는 것 같습니다. ASCII 막대가 마음에 들지 않으면 글꼴로 아무 작업도 수행 할 필요가 없습니다. 들여 쓰기 설정 및 실행 후 예제 출력 예:IndentLinesReset

45   ¦ var move = function(direction) {
46   ¦ ¦ if(!initialized) { initialize(); }
47 
48   ¦ ¦ if(shiftBoard(direction)) {
49   ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50   ¦ ¦ }
51   ¦ };

공백이있는 예의 스크린 샷

플러그인에는 Vim 7.3 이상이 필요하며 해당 버전의 Conceal 기능을 사용할 수 있습니다. 실제로 텍스트를 숨기는 대신 뷰에서 텍스트를 막대로 바꾸지 만 실제 버퍼는 아닙니다. 결과는 막대가 표시되지만 실제로 공백이므로 파일에 저장되지 않습니다.

경고

이 두 가지 방법 모두 "적절하게"들여 쓰기 된 코드를 가정합니다. 그들은 "블록"이 열릴 때 들여 쓰기 레벨을 들여 쓰기 레벨로 배치하지 않고 (들어가는 것처럼 보입니다) 대신 들여 쓰기 설정에 따라 일정한 간격으로 라인을 배치합니다. 또한 실제로 공간이있는 줄에만 막대를 표시합니다 (첫 번째 아래의 vim 출력의 줄에 if막대가 없으므로 시각적 차이가 발생합니다)


실제로 탭 대신 공백을 사용하여 들여 쓰기합니다. 내 질문을 업데이트했습니다.
aharris88

오. 그렇다면 더 많은 연구가 필요합니다.
John O'M.

1
트레일 링되지 않은 공간에 listchars가 작동하도록하는 패치가있어 메일 링리스트를 파헤칠 수 있습니다. 그러나 그것은 공식 배포판으로 받아 들여지지 않았다 :(

1
Vaibhav Sagar 및 Josh Petrie의 정보를 포함하도록 답변이 업데이트되었습니다. Vaibhav가 언급 한 플러그인을 사용해 보았고 편집 된 답변에 결과를 표시했습니다. 나는이 플러그인을 직접 사용하기 시작할 것이라고 생각합니다. 환상적이지는 않지만 일반적으로 꽤 잘 작동하는 것 같습니다.
John O'M.

가이드가 숭고한 것처럼 빈 줄에 표시되도록 할 수 있습니까?
James

19

내가 사용하는 또 다른 옵션은 정확히 당신이 요구 한 것이 아니지만 동일한 열에있는 것을 더 쉽게 볼 수 있도록 동일한 목적을 달성하는 것입니다 vimrc.

set cursorcolumn
set cursorline

커서 열 그림

커서를 보려는 열로 커서를 이동해야하지만 시각적 혼란이 덜합니다. 일반적으로 들여 쓰기 수준에 관심이있을 때 어쨌든 커서로 내 자리를 유지하고 있습니다. 내 방식은 중괄호를 닫지 않고 파이썬과 같은 언어에서 어색해 보이지 않습니다.


Python vi 사용자는이 기능으로 죽을 것입니다
shuva

18

완성을 위해 공백의 색을 번갈아 들여 쓰기 수준을 표시하는 들여 쓰기 가이드 플러그인 도 있습니다. 버전 7.2 이상이 필요합니다. tabstopshiftwidth변수를 사용하기 때문에 들여 쓰기 설정에 즉시 적용됩니다.

임 구르

플러그인이 설치되면, 당신은 단순히 사용할 수 있습니다 :IndentGuidesEnable또는 :IndentGuidesDisable. 터미널 vim을 사용하는 경우 설명서에 따라

현재 터미널 Vim은 기본 지원 만 제공합니다. 즉, 색상 체계에 따라 색상이 자동으로 계산되지 않습니다. 대신 배경이 어둡거나 밝은 지 여부에 따라 일부 사전 설정 색상이 사용됩니다.

스크린 샷의 가이드 색상을 변경하기 위해 다음을 사용했습니다.

let g:indent_guides_auto_colors=0

버퍼를 교체 할 때 색상이 다시 계산되지 않은 다음

hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236

제시된 다른 솔루션과 마찬가지로 공백이있는 줄에 들여 쓰기 가이드 만 표시합니다.


let g:indent_guides_enable_on_vim_startup=1내 .vimrc에 추가 하여 시작할 때 활성화하십시오.
inye

9

indentLine 플러그인이 가장 적합 하다는 것을 알았습니다 . 그래도 적절한 기호가있는 글꼴이 필요합니다 .Windows의 Consolas와 Mac OS X의 Menlo가 잘 작동합니다. 위의 통합 답변에서 지적했듯이 (ab) vim의 conceal기능을 사용하여 올바른 글꼴을 사용하여 수직 막대를 올바른 위치에 배치합니다. 이 솔루션에 매우 만족하지만 단점은 세로 막대가 상자 그리기 글리프의 일부이며 다른 편집기에서와 같이 왼쪽 정렬 대신 중앙 정렬이라는 것입니다. 익숙해졌지만 수동으로 글꼴을 패치하거나 Fantasque Sans Mono 와 같은 글꼴을 사용하여 해결할 수 있습니다 (링크 된 github 저장소의 스크린 샷이 indentLine을 사용하는 방법에 유의하십시오).


4
플러그인 링크 전용 답변에 대한 토론을 살펴보고 추가 정보로 답변을 업데이트하십시오.

내 실수, 나는 대답을 업데이트했습니다.
Vaibhav Sagar 2019

패치 된 세로선은 어떤 글리프입니까? 여기에 붙여 넣을 수 있습니까? 감사.
Timtro

2

indentLine 플러그인은 작은 파일이 아닌 경우 상당히 느리게 진행됩니다. enter를 클릭하면 1 초 정도 지연 될 수 있습니다.

내가 발견 한 VIM-indentguides을 시각적으로 공간 들여 쓰기 대 탭 들여 쓰기를 구별하는 것이 더 빠른 시각적으로 유사한 플러그인이 될 수 있습니다.

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