줄 들여 쓰기를 특정 값으로 어떻게 이동합니까?


11

여러 번 나는 줄이 제대로 들여 쓰기되지 않은 상황을 겪습니다. 붙여 넣기, 불량 / 선호하지 않는 들여 쓰기 플러그인 또는 들여 쓰기 값을 상쇄하는 여분의 공백을 통한 에테르. 나는 일반적으로이 문제를 해결 <<하거나 >>라인 몇 번 그것을 해결하기 위해. 여분의 공백이있는 경우 실제로 원하는 들여 쓰기 수준마다 100<<다음에 할 것 >>입니다.

문제는 |숫자 10|로 열을 설정할 수 있는 동작 과 같이 커서를 10 번째 열로 보냅니다. 들여 쓰기 수준을 지정하려면 어떻게해야합니까?

예를 들면 다음과 shiftwidth=4 expandtab같습니다 ( 작동하지 않음) .

The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)

이 경우 현재 마지막 줄 (2) 3<<의 들여 쓰기 수준을 세고 여분의 공백을 추가 한 다음 입력 한 다음 들여 쓰기 수준을 계산해야합니다 1>>(또는 사용 autoindent==명령).

1==들여 쓰기를 레벨 1로 들여 쓰기하는 것과 같은 것을 요구 하고 있습니다. 또는 경우 0==에 따라 들여 쓰기를 모두 제거하는 경우도 있습니다.

위의 예는 1 또는 0 줄에서 자동 들여 쓰기를 수행하므로 원하는 것을하지 않지만 질문을 더 잘 설명하는 데 도움이되기를 바랍니다.

답변:


18

다음 :left명령을 사용할 수 있습니다 .

:[range]le[ft] [indent]
의 행을 왼쪽 정렬합니다 [range]. 줄에 들여 쓰기를 [indent](기본값 0)으로 설정합니다 . {가 아닌 Vi}

참고 :left세트에 오목 N 개의 공간, 그리고 인식하지 shiftwidth또는 tabstop그렇게하여, :left 88 개 공간을 사용한다.

들여 쓰기 수준을 설정하려면 명령을 쉽게 정의 할 수 있습니다.

command! -nargs=1 Left execute 'left ' . &sw * <args>

사용 :Left 2하면 들여 쓰기가 8 칸으로 설정됩니다.

이것을에 매핑하려면 다음을 <Leader>=사용할 수 있습니다.

noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'

이것이 최선의 방법인지 확실하지 않지만 관리 할 수있는 유일한 방법입니다 ... \=2현재 줄을 8 칸으로 5\=3들여 쓰기하고 다음 5 줄을 12 칸 들여 쓰기합니다.


문제를 해결하는 관련 힌트는 shiftround옵션을 설정하는 것입니다. 에서:help 'shiftround'

의 배수로 들여 쓰기 'shiftwidth'. 적용 >< 명령. 삽입 모드의 CTRL-T 및 CTRL-D는 항상 들여 쓰기를 배수로 반올림합니다 'shiftwidth'(이는 Vi 호환 가능).

귀하의 예에서 첫 번째 <<는 8 자리로 "둥글게"됩니다. 따라서 (사용 3<<>>) 문제 가 해결되었습니다. 도움말 페이지에서 알 수 있듯이 <C-d>삽입 모드 에서도 사용할 수 있습니다 .


대박! 이 솔루션은 완벽하게 작동합니다.
Sukima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.