내 키 매핑~/.vimrc편집된 소스 코드의 파일을 동적으로 다시 들여쓰기합니다. 다음과 같습니다.
" press F4 to fix indentation in whole file; overwrites marker 'q' position
noremap <F4> mqggVG=`qzz
inoremap <F4> <Esc>mqggVG=`qzza
간단한 설명:
mq place marker 'q' at cursor position
ggVG select all text
= re-indnet text
`q return cursor back to position stored in 'q' marker
zz center the display over the cursor
a return to insert mode if called from it
기본적으로 작동하지만 두 가지 단점이 있습니다.
첫번째는 커버한다는 점이에요큐표시. 이 태그를 사용하여 커서 위치를 저장합니다. 나는 선택한다큐왜냐하면 나는 이 편지를 표시로 사용할 것 같지 않기 때문입니다. 그래도 깨지지 않고 이를 달성할 수 있는 더 현명한 방법이 있습니까?큐표시?
두 번째는 삽입 모드에서 커서가 줄의 시작 부분에 있을 때 발생합니다. 이 경우 F4예상대로 커서가 다시 들여쓰기되지만 커서도 오른쪽으로 한 위치 이동됩니다. <C-o>
대신 을 사용하여 수정 해 보았지만 편집기에서만 작동하는 <Esc>
것 같습니다.<C-o>
:주문하다, 명령을 이동하지 않습니다. 어떻게 해결할 수 있나요?
답변1
m'
마지막 점프 마커( )를 임시 마커로 사용할 수 있습니다 . 삽입 모드( i
vs. ) 를 다시 시작하기 위해 다른 명령을 사용하지 않으려면 마지막으로 종료한 지점에서 삽입 모드를 다시 시작하는 a
다음 명령을 사용할 수 있습니다 .gi
inoremap <F4> <Esc>m'ggVG=``zzgi
답변2
i
대신 다음을 사용하여 a
커서를 이전 위치에 유지할 수 있습니다 .
inoremap <F4> <Esc>mqggVG=`qzzi
q
마커로는 이보다 더 잘할 수 없을 것 같아요 .빔 위키:
플래그를 설정하려면 m 다음에 문자를 입력하세요. 예를 들어, ma는 현재 위치(행과 열)에 마크 a를 설정합니다. 마크 a가 설정되면 현재 파일에서 이전에 a로 식별된 모든 마크가 삭제됩니다. 마크 A가 설정되면 이전 마크 A(모든 파일)가 삭제됩니다.
마크업을 깨지 않고는 사용할 수 없습니다.
답변3
약간 더 짧음:
inoremap <F4> <Esc>m'gg=G''zzgi
들여쓰기 수정을 위해 시각적 모드를 사용할 필요는 없습니다. 시각적 모드를 사용하여 선택하고 다시 들여쓰기(VG=)하는 대신 방향(=G)으로 다시 들여쓰기를 사용할 수 있습니다.