문제

사소해야 하며 도움이 될 수도 있지만 탐색 방법을 알 수 없습니다.vi에서 여러 줄을 빠르게 들여쓰려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

사용 > 명령. 5 줄을 들여 쓰고 5>>. 선 블록을 표시하고 들여 보내려면 V제이제이> 3 줄을 들여 쓰기 (VIM 만 해당). 곱슬 머리 블록을 들여 보내려면 커서를 곱슬 브레이스 중 하나에 넣고 사용하십시오. >% 또는 블록 사용 내부의 어느 곳에서나 >.

주변의 텍스트 블록을 복사하고 새로운 위치에서 블록의 계약을 정렬 해야하는 경우 사용하십시오. ] 그냥 대신 . 이것은 붙여 넣은 블록을 주변 텍스트와 정렬합니다.

또한, shiftwidth 설정을 사용하면 몇 개의 공백을 제어 할 수 있습니다.

다른 팁

이 답변은 이 질문에 대한 다른 답변과 의견을 요약하고 다음을 기반으로 추가 정보를 추가합니다. 빔 문서 그리고 빔 위키.간결하게 하기 위해 이 답변은 Vi와 Vim 관련 명령을 구별하지 않습니다.

아래 명령에서 "re-indent"는 "사용자의 명령에 따라 줄 들여쓰기"를 의미합니다. 들여쓰기 설정." shiftwidth 들여쓰기를 제어하는 ​​1차 변수입니다.

일반 명령

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

교체할 수 있습니다 { ~와 함께 } 또는 B, 예를 들어 =iB 유효한 블록 들여쓰기 명령입니다.보세요 "코드 블록 들여쓰기" 이 명령을 시험해 볼 수 있는 좋은 예를 들어보세요.

또한, 그것을 기억하십시오

.    Repeat last command

, 이므로 들여쓰기 명령을 쉽고 편리하게 반복할 수 있습니다.

전체 파일 다시 들여쓰기

또 다른 일반적인 상황은 소스 파일 전체에서 들여쓰기를 수정해야 하는 경우입니다.

gg=G  Re-indent entire buffer

이 아이디어를 여러 파일로 확장할 수 있습니다.

" Re-indent all your c source code:
:args *.c
:argdo normal gg=G
:wall

또는 다중 버퍼:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

시각적 모드에서

Vjj> Visually mark and then indent 3 lines

삽입 모드에서

다음 명령은 현재 줄에 적용됩니다.

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

Ex 명령

커서를 움직이지 않고 특정 범위의 라인을 들여 쓰고 싶을 때 유용합니다.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

마커를 사용하여 들여쓰기

또 다른 접근 방식은 마커:

ma     Mark top of block to indent as marker 'a'

...커서를 끝 위치로 이동

>'a    Indent from marker 'a' to current location

들여쓰기를 제어하는 ​​변수

당신은 이것을 설정할 수 있습니다 .vimrc 파일.

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

Vim에는 파일 형식에 따른 지능적인 들여쓰기 기능이 있습니다..vimrc에 다음을 추가해 보세요:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

참고자료

큰 선택은 다음과 같습니다.

gg=G

정말 빠르고 모든 것이 들여 쓰기 ;-)

또한 이것을 시도하십시오 C- 인센트 들여 쓰기 :help = 더 많은 정보를 위해서:

={

현재 현재 코드 블록을 자동으로 표시합니다.

또는 그냥 :

==

현재 라인을 자동으로 인도합니다.

더 시각적 인 사람들을위한 키 압력 :

  1. 명령 모드 입력 :
    탈출하다

  2. 들여 쓰기를 위해 지역의 시작으로 이동하십시오.
    시간제이케이

  3. 블록 시작 :
    V

  4. 부서를 위해 지역 끝으로 이동하십시오.
    시간제이케이

  5. (선택 사항) 원하는 계약 수준을 입력하십시오.
    0..9

  6. 블록에서 들여 쓰기를 실행하십시오.
    >

이미 제공되고 받아 들여진 답변 외에도 마커를 배치 한 다음 현재 커서에서 마커까지 모든 것을 들여 줄 수도 있습니다. 따라서 입력하십시오 ma 당신이 들여 쓰기 블록의 상단을 원하는 곳에, 필요한만큼 커서를 내린 다음 입력하십시오. >'a (a"유효한 마커 이름으로 대체 될 수 있습니다). 때때로 이것은 때로는 더 쉽습니다. 5>> 또는 vjjj>.

모든 명령의 마스터는입니다
gg=G

이것은 전체 파일을 들여 보내고 있습니다!

그리고 아래는 VIM 또는 GVIM에서 신속하게 선을 들여 쓰기에 사용되는 단순하고 우아한 명령 중 일부입니다.

현재 선을 들여 쓰기
==

현재 선 아래의 모든 줄을 들여 보내려면

=G

들여 쓰기 n 현재 선 아래의 줄

n==

예를 들어, 현재 라인 아래 4 줄을 들여 쓰기

4==

코드 블록을 들여 보내려면 중괄호 중 하나로 이동하여 명령을 사용하십시오.

=%

이것들은 여러 줄을 들여 보내는 가장 단순하지만 강력한 명령입니다.

텍스트의 시작으로 이동하십시오

  • 누르다 V 시각적 모드 용.
  • 사용 위로/아래에 텍스트를 강조하는 화살표.
  • 누르다 = 당신이 강조한 모든 줄을 들여 보내기 위해.

제공된 솔루션뿐만 아니라 한 번에 단락을하고 싶습니다. >}

블록을 선택하고 사용하는 경우 > 들여 보내기 위해, 그것은 들여 쓰기가 정상 모드로 돌아갑니다. .VIMRC 파일에 이것을 가지고 있습니다.

vnoremap < <gv

vnoremap > >gv

그것은 당신이 원하는만큼 당신의 선택을 들여 쓰겠다.

코드를 들여 쓰기 위해 2 개의 공간을 사용한다고 가정 해 봅시다. 유형:

:set shiftwidth=2
  • 유형 V (시각적 블록 편집 모드를 입력하려면)
  • 화살표 키 (또는 시간/제이/케이/), 당신이 들여 보내고 싶은 줄을 강조하기 위해.

그 다음에:

  • 유형 > 한 번 들여 보내기 (2 공간).
  • 유형 2> 두 번 들여 쓰기 (4 개의 공간).
  • 유형 3> 세 번 들여 쓰기 (6 공백).
  • ...
  • 유형 < 한 번은 끝이 없습니다 (2 공간).
  • 유형 2< 두 번의 인도 (4 공간).
  • 유형 3< 무시하지 않는 세 번 (6 개 공간).
  • ...

당신은 아이디어를 얻습니다.

(빈 줄은 들여 쓰기되지 않을 것입니다.)


(g) VIM 문서에서 계약 블록에 대한 답을 찾았습니다.

:help visual-block
/indent

명령에 수를 계산하려면 연산자 문자를 입력하기 직전에 "V {Move-Around} 3>"(오른쪽으로 3 행을 이동).

Vim의 UI의 아름다움은 일관성이 있다는 것입니다. 편집 명령은 명령 및 커서 이동으로 구성됩니다. 커서 동작은 항상 동일합니다.

  • 시간 화면 위에 하단으로, 중간으로
  • NG N으로 이동하려면 G 파일 맨 아래로 혼자서 gg 상단으로
  • N 다음 검색 경기로 이동하려면 N 이전에
  • } 단락의 끝으로
  • % 다음 일치 브래킷, 괄호 또는 태그 종류 중 하나
  • 입력하다 다음 줄로
  • '엑스 X를 표시하려면 X는 문자 또는 다른 사람입니다.
  • 더 많은 것들을 포함하여 w 그리고 w 단어, $ 또는 0 여기에 적용되지 않는 라인 끝 등에는 동정.

따라서 VIM을 사용하려면 커서를 이동하고 예를 들어, 명령의 레퍼토리를 기억해야합니다. > 들여 쓰기 (및 < "Outdent").
따라서 커서 위치에서 화면 상단까지 선을 들여 쓰기. >시간, >G 파일의 맨 아래에 들여 쓰기.

입력 대신 >시간, 당신은 입력합니다 시간 그런 다음 같은 줄의 블록을 삭제하고 있습니다. 시간 교체 등

일부 커서 움직임은 특정 명령에 더 잘 맞습니다. 특히, % 명령은 전체 HTML 또는 XML 블록을 들여 보내는 데 편리합니다.
파일에 구문이 강조된 경우 (:syn on) 그런 다음 태그의 텍스트에서 커서를 설정합니다 (예 : "i"u003Cdiv> 그리고 입력 >% 마감까지 들여 쓰기u003C/div> 꼬리표.

이것이 VIM의 작동 방식입니다. 커서 움직임과 명령 만 기억해야합니다.
그래서이 질문에 대한 나의 대답은 "당신이 들여 쓰고 싶은 줄 블록의 한쪽 끝으로 가서 > 명령과 블록의 다른 쪽 끝으로의 움직임 "if" 톱니 모양 선을 바꾸는 것으로 해석되고 = 만약에 톱니 모양 꽤 인쇄 한 것으로 해석됩니다.

이 작업을 수행

$vi .vimrc

이 줄을 추가하십시오

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

이것은 CPP 파일에만 해당됩니다. Filetype을 수정하는 것만으로도 다른 파일 유형에 대해이 작업을 수행 할 수 있습니다 ...

이 작업을 수행하는 빠른 방법 VISUAL MODE 코드 블록을 주석하는 것과 동일한 프로세스를 사용합니다.

이것은 당신이 당신의 변화를 원하지 않는 경우에 유용합니다. shiftwidth 또는 사용하십시오 set 지침과 탭이나 공간 또는 기타 캐릭터로 작업 할 수있을 정도로 유연합니다.

  1. 블록의 시작 부분에 커서를 배치합니다
  2. v 전환 -- VISUAL MODE --
  3. 들여 쓰기 텍스트를 선택하십시오
  4. 유형 : 프롬프트로 전환합니다
  5. 3 개의 주요 공간으로 교체 :

    :'<,'>s/^/ /g

  6. 또는 선행 탭으로 대체 :

    :'<,'>s/^/\t/g

  7. 간단한 설명 :

    '<,'> - 시각적으로 선택된 범위 내에서

    s/^/ /g - 전체 범위 내의 모든 라인의 시작 부분에 3 개의 공간을 삽입합니다.

    (또는)

    s/^/\t/g - 삽입 Tab 전체 범위 내의 모든 라인의 시작 부분에서

나는 들여 쓰기 텍스트를 표시하는 것을 좋아합니다.

  1. 텍스트 라인의 시작으로 이동 한 다음 Ma를 입력하십시오 (A는 'M'ark의 레이블입니다 : 문자 일 수 있습니다)
  2. 텍스트 종료 라인으로 이동하고 MZ를 입력하십시오 (다시 Z는 문자 일 수 있습니다)
  3. : 'a,'z> 또는 : 'a,'z <들여 쓰기 또는 구식 (이것은 단어입니까?)
  4. 짜잔! 텍스트가 움직입니다 (빈 줄은 공백없이 비어 있습니다)

PS : 당신은 사용할 수 있습니다 : 'a,'z 기술은 선, 숫자 또는 %를 사용할 수있는 모든 작업 (d, y, s //// 등)의 범위를 표시합니다.

>} 또는 >{ 현재 라인에서 다음 단락까지 들여 쓰기

<} 또는 <{ 같은 무례한

아직 언급되지 않은 또 하나의 방법이 있습니다. norm i 줄의 시작 부분에 주어진 텍스트를 삽입하도록 명령하십시오. 라인 2-10 전에 10 개의 공간을 삽입하려면 :

:2,10norm 10i 

명령 끝에 공간 문자가 있어야한다는 것을 기억하십시오. 이것은 우리가 삽입하고자하는 캐릭터입니다. 예를 들어 5 개의 밑줄 문자가있는 파일의 모든 라인을 들여 쓰기 위해 다른 텍스트와 함께 라인을 들여 줄 수 있습니다.

:%norm 5i_

또는 더 멋진 것 :

:%norm 2i[ ]

보다 실용적인 예는 # 문자로 bash/python/etc 코드를 주석하는 것입니다.

:1,20norm i#

사용을 다시 표시합니다 엑스 대신에 . 예를 들어 모든 라인에서 처음 5자를 제거하려면 다음과 같습니다.

:%norm 5x

나를 위해 MacVim (Visual) 솔루션은 마우스로 선택하고 ">"를 누르고 있었지만 다음 줄을 "~/.vimrc"에 넣은 후 탭 대신 공백을 좋아하기 때문에 다음과 같습니다.

set expandtab
set tabstop=2
set shiftwidth=2

또한 명령 줄 (terminal.app)에서 macvim을 호출 할 수있는 것이 유용하므로 다음과 같은 도우미 디렉토리 "~/bin"이 있기 때문에 "macvim"이라는 스크립트를 배치합니다.

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

물론 "~/.bashrc"에서 :

export PATH=$PATH:$HOME/bin

Macports는 "~/.profile"을 많이 엉망으로 만들므로 경로 환경 변수가 상당히 길어질 수 있습니다.

주석에 사용하는 방법을 찾지 못하므로 공유하겠습니다 (VIM 만 생각합니다).

  1. ESC 명령 모드로 들어갑니다
  2. ID를 원하는 마지막 줄의 첫 번째 캐릭터로 이동
  3. Ctrl 키-V 블록을 시작하려면 선택합니다
  4. ID를 원하는 첫 번째 줄의 첫 번째 캐릭터로 이동
  5. 옮기다- 특수 삽입 모드를 입력하려면
  6. (예 : 2)
  7. 누르다 ESC 그리고 공백은 모든 줄에 나타납니다

VIMRC에서 ID/TAB 설정을 변경하지 않거나 편집하는 동안 변경하도록 기억하는 경우 유용합니다.

무시하기 위해 나는 똑같이 사용합니다 Ctrl 키-V 블록을 선택하여 공백을 선택하고 삭제합니다 .

왜 이런 간단한 대답을 찾기가 어려운지 모르겠습니다 ...

나는 이것을 알기 위해 많은 어려움을 겪어야했다.

당신의 편집 .vimrc 홈 디렉토리 아래 파일이 줄을 추가합니다

set cindent

당신은 제대로 들여 쓰고 싶은 곳을 제출하십시오

일반/명령 모드 유형에서

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)

5== 현재 커서 위치에서 5 줄을 들여 보내겠습니다. 따라서 전에 숫자를 입력 할 수 있습니다 == , 그것은 줄의 수를 들여 줄 것입니다. 이것은 명령 모드입니다.

gg=G 위에서 아래로 전체 파일을 들여 보내는 것입니다.

:help left

~ 안에 ex mode 당신이 사용할 수있는 :left 또는 :le 지정된 금액을 정렬합니다. 구체적으로, :left ~ 할 것이다 범위]에서 왼쪽 정렬 라인. 선의 들여 쓰기를 [Indent] (기본값 0)로 설정합니다.

:%le3 또는 :%le 3 또는 :%left3 또는 :%left 3 3 개의 공간으로 패딩하여 전체 파일을 정렬합니다.

:5,7 le 3 3 개의 공간으로 패딩하여 5-7 행을 정렬합니다.

:le 가치없이 :le 0 0의 패딩과 정렬됩니다.

이것은 작동합니다 vim 그리고 gvim.

:line_num_start,line_num_end>

예를 들어

14,21> shifts line number 14 to 21 to one tab

더 많은 탭의 '>'기호를 늘리십시오

예를 들어

14,21>>> for 3 tabs

Python을 많이 사용하여, 나는 하나 이상의 들여 쓰기로 블록을 이동 해야하는 자주 필요하다는 것을 알게되었습니다. 블록 선택 방법을 사용 하여이 작업을 수행 한 다음 바로 직전에 점프하고자하는 계약 수를 입력 할 수 있습니다. >

예를 들어. V5j3> 5 줄을 3 번 들여 쓰기 - 강국에 4 개의 공간을 사용하는 경우 12 개의 공간입니다.

파일 유형의 모든 줄을 들여 보내려면ESC 그런 다음 g = gg

공간에 의해 즉시 VI에서 강조 된 코드를 들여 쓰기하는 방법 :

옵션 1 : VISION 블록 모드가있는 VI에서 3 개의 공간에서 코드 블록을 들여 쓰기 :

  1. 들여 쓰고 싶은 코드 블록을 선택하십시오. 이 작업을 사용하십시오 ctrl+v 정상 모드에서 텍스트를 선택하기 위해 화살표. 선택하는 동안 입력하십시오 : 선택한 텍스트 블록에 명령을 내립니다.

  2. 다음은 명령 줄에 나타납니다. :'<,'>

  3. 3 개의 공간에 들여 쓰기를 설정하려면 타이핑하십시오 le 3 그리고 Enter를 누릅니다. 이것이 나타나는 것입니다. :'<,'>le 3

  4. 선택된 텍스트는 즉시 3 개의 공간에 들여 쓰기됩니다.

옵션 2 : VISION 라인 모드를 사용하여 VI의 코드 블록을 3 개의 공간으로 들여 쓰기 :

  1. VI로 파일을 엽니 다.
  2. 커서를 코드 위에 올려 놓으십시오
  3. 일반 모드에 있어야합니다. 다음 키를 누릅니다.

    Vjjjj:le 3
    

    당신이 한 일에 대한 해석 :

    V 텍스트를 선택하는 것을 의미합니다.

    jjjj 화살표는 4 줄을 아래로 내리고 4 줄을 강조합니다.

    : vi에게 강조 표시된 텍스트에 대한 명령을 입력하게됩니다.

    le 3 강조된 텍스트 3 줄을 의미합니다.

    선택된 코드는 즉시 3 개의 공간 계약으로 증가하거나 감소합니다.

옵션 3 : 비주얼 블록 모드와 특수 삽입 모드를 사용하여 들여 쓰기를 증가시킵니다.

  1. VI로 파일을 엽니 다.
  2. 커서를 코드 위에 올려 놓으십시오
  3. 일반 모드에 있어야합니다. 다음 키를 누릅니다.

    ctrl+v

    jjjj
    

    (Spacebar를 5 번 누르십시오)

    ESC 시프트+i

    강조 표시된 모든 텍스트에는 추가 5 개의 공간이 부여됩니다.

모든 파일을 4로 들여 보내려면 :

esc 4G=G

블록 모드 비주얼 선택을 사용합니다.

  • 블록 앞쪽으로 이동하여 (상단 또는 하단에서) 움직입니다.
  • CTRL-V를 눌러 시각적 블록 모드로 들어갑니다.
  • 라인 앞에서 열을 선택하려면 탐색하십시오.
  • 삽입 모드를 입력하려면 i (shift i)를 누르십시오.
  • 일부 공간을 입력하십시오.
  • ESC를 누릅니다. 모든 라인이 이동합니다.

이것은 단위가 아닙니다. 효과가있다:

  • 줄의 중간에.
  • 모든 줄에 문자열을 삽입합니다.
  • 열을 변경하려면 (i 대신 C를 사용).
  • Yank, 삭제, 대체 등 ...
  • 코드 블록 {} : = + %

  • 선택된 라인의 경우 : 옮기다 + V UP/DOWN ARROW KEY 사용을 선택한 다음 누릅니다 =.

  • 전체 파일 : GG + = + G

메모: 'gg'는 1 행으로 이동한다는 것을 의미합니다. '='는 들여 쓰기 명령이고 'g'.

가정하다 | Vim에서 커서의 위치를 ​​나타냅니다.들여쓰기할 텍스트가 다음과 같은 코드 블록으로 묶인 경우:

int main() {
line1
line2|
line3
}

넌 할 수있어 >i{ 이는 "들여쓰기(>) 내부에 (i) 차단하다 ({)" 그리고 얻다:

int main() {
    line1
    line2|
    line3
}

이제 다음과 같이 선이 연속되어 있지만 블록 외부에 있다고 가정합니다.

do
line2|
line3
line4
done

2~4행을 들여쓰기하려면 행을 시각적으로 선택하고 입력하면 됩니다. >.아니면 더 빨리 할 수도 있어요 >2j 얻으려면 :

do
    line2|
    line3
    line4
done

참고하세요 >Nj 현재 줄에서 다음 줄로 들여쓰기를 의미합니다. N 아래 줄.들여쓰기할 줄 수가 많은 경우 사용자가 적절한 값을 계산하는 데 몇 초가 걸릴 수 있습니다. N.소중한 시간을 절약하려면 다음 옵션을 활성화하세요. 상대수 ~와 함께 set relativenumber (Vim 버전 7.3부터 사용 가능)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top