Vim에서 커서를 움직이지 않고 화면을 이동하는 방법은 무엇입니까?


598

최근 에 커서를 움직이지 않고 한 줄씩 화면을 위아래로 움직이는 Vim의 Ctrl+ ECtrl+ Y단축키를 발견했습니다 .

커서가있는 곳에 커서를두고 화면을 이동하여 커서가있는 행이 첫 번째 행이되도록하는 명령을 알고 있습니까? (마지막 줄에 명령을 내리는 것은 좋은 보너스 일 것입니다).

적절한 횟수만큼 Ctrl+ E(또는 Ctrl+ Y) 를 수동으로 눌러이 작업을 수행 할 수 있지만 어떻게 든 직접 수행하는 명령이 있으면 좋을 것입니다.

어떤 아이디어?


이 질문이 Vim 섹션에 있지 않아야합니까?
John

답변:


877
  • zz- 화면의 중앙에 현재 행을 이동
    ( 과주의zz 당신이 일어날 경우, Caps Lock실수로 저장하고 종료합니다 vim!)
  • zt -현재 줄을 화면 상단으로 이동
  • zb -현재 줄을 화면 하단으로 이동

9
@HappyGreenKidNaps 최대한 빨리 제어하기 위해 잠금 키를 캡핑하는 맵!
Aaron

나는 특히 많은 C 매크로를 다루는 caps lock에 꽤 붙어 있지만 다른 옵션이 있습니다. 먼저 매핑되지 않은 키를 찾고 (두 경우 모두 문자를 확인하고, 기호 나 기능 키 등을 사용하여 수정 자나 지시선 추가 등을 시도해보십시오) 대소 문자를 구분하는 '위험한'조합에 매핑하십시오. 둘째, 원하는대로 vimundo를 구성하여 oops에서 복구 할 수 있습니다. (휴대용 해킹이 아닌 경우 :) 셋째, 사용자 키보드 설정 (예 : Windows 키 + Z)에서 동일하게 수행하십시오. 시퀀스에 매핑하려면 xdotool또는을 시도하십시오 triggerhappy. 마지막으로, 모자 잠금 상태를 표시하십시오 (Vimscript에서 수행 할 수 없습니다.)
John P

2
Caps Lock 상태를 쿼리하는 것은 환경에 따라 매우 다릅니다. 나는 Vimscript에서 할 수 없다고 들었습니다.이 시점에서 나는 그것을 받아 들였습니다. 당신이 그 길을 가고 싶은 경우에, 거기에 xev -q, cat /proc/bus/input/devices쿼리에 장치를 발견하고, evtest또는 thd ... --dump /dev/input/event<#>당신이 절대적으로 시스템 전체 매핑을해야하는 경우 적어도 스왑 두 개의 잠금 캡처럼, 등의 상태를 확인하기 위해 <-> NUM - 그러나 문제는 문제가 발생했다는 것을 잊어 버렸습니다. 전에 원한다면 어떤 맵 으로든 계속 사용할 수 있기 때문입니다. 파일 / 사용자 / 시스템 이전의 Vim 침입 위험.
John P

다른 Vim 스크립트 옵션 : '확인'을 켜서 종료 / 탈퇴 등을 확인하십시오. 글을 쓰기 위해서는 BufWritePre에 대한 자동 명령이 필요하다고 생각합니다 confirm(). 또한 caps lock을 ctrl에 매핑하는 대신 Vim에 의해 이해되었지만 매핑되지 않은 키 또는 조합에 매핑 한 다음 삽입 / 교체 모드, 손 또는 github.com/tpope/ 와 같은 방식으로 캡 잠금을 독점적으로 에뮬레이션 할 수 있습니다 vim-capslock . 아마도 Vim 외부에서 필요하지 않을 수도 있지만, 필요한 경우 xmodmap 스크립트를 작성하여 변경 사항을 되돌 리거나 프로그램이 자체 매핑을 지원하는지 확인하십시오.
John P

3
ZT / ZZ / ZB -에 고정 된 커서 이동 화면 t의 OP / 센터 (독일어 ' Z의 entrum') / B ottom <---> H / M / L - 고정 화면 및 커서를 이동하는 H IGH / M iddle / L 흐름 위치
엘리

626

또한 :

  • Ctrl- y한 줄 위로 화면 이동
  • Ctrl- e화면을 한 줄 아래로 이동
  • Ctrl- u커서 및 화면을 ½ 페이지 위로 이동
  • Ctrl- d커서 및 화면을 ½ 페이지 아래로 이동
  • Ctrl- b한 페이지 위로 화면을 이동하고 커서를 마지막 줄로 이동
  • Ctrl- f화면을 한 페이지 아래로 이동하고 커서를 첫 줄로 이동

Ctrl- yCtrl- e커서가 화면 밖으로 이동할 경우에만 커서 위치를 변경하십시오.

씨의 http://www.lagmonster.org/docs/vi2.html


91
@ulidtko : efter (스웨덴어 이후), 요어 (과거를 의미), 위, 아래, 뒤로, 앞으로. (앞뒤 단어는 위아래로 더 길기 때문에 자연스럽게 화면을 더 먼 거리로 움직입니다.)
Moberg

12
나는 어제처럼 더 나은 니모닉
Moberg

Ctrl-u 및 Ctrl-d 둘 다 커서를 이동합니다. " 파일에서 커서가 같은 줄 수만큼 위로 이동합니다 (가능한 경우 : 줄 바꿈 및 파일 끝을 칠 때 차이가있을 수 있음) "
Lex R

@LexR에게 감사드립니다. 그 차이점을 반영하여 답변을 업데이트했습니다.
Paul Wheeler 2016

1
:help CTRL-E말한다Mnemonic: Extra lines.
Niko Bellic

39

Vim은 항상 현재 화면에 커서가 있어야하지만 현재 위치를 북마크 한 다음 현재 위치로 돌아갈 수 있습니다.

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g

1
북마크 된 줄로가는 것에 만 관심이 있다면 'g
Matt Briggs

4
"Vim은 항상 현재 화면에 커서가 있어야합니다."Vim 사용자는 모든 것이 vim에서 구성 가능하다는 것을 자랑합니다. 이것은 아닙니다. 파일을 스크롤하는 동안 커서를 움직이고 싶지 않습니다. 나를위한 Dealbreaker
gadelat

8
커서가 보이지 않는 곳에 커서를 두려는 상황은 없었습니다. 물론, 스크롤 할 때 커서가 움직이지만 사소한 곳으로 돌아갈 수 있습니다 (따라서 추측 한 것이 아니라 실제로 어디에 있었는지 볼 수 있습니다). 하나에 Ctrl-O대한 두 개의 백 틱, 또 하나의 정말로 큰 틱 , " 백 틱 , 마침표"는 마지막 편집 위치로 되돌아갑니다.
dash-tom-bang

3
@gedalat, 스크롤 할 때 다른 편집기에서 매우 성가시다. 더 이상 커서가 어디에 있는지 알지 못하고 마우스를 사용하여 커서를 다시 가져올 수있는 곳을 클릭해야합니다. 또는 "여기"라고 생각하고 입력을 시작하면 커서가있는 위치로 갑자기 점프합니다. 이때 커서 위치 만 추적되므로 스크롤 한 위치로 건너 뛸 수 없습니다. 커서가 당신이가는 곳을 따라가는 것은 틀림없이 좋은 일입니다.
Shahbaz

1
@gadelat를 구성 할 수 있습니다. 당신은 바로이 대답 (와 마크 위치를 매핑해야 mg와 주변 고토 표시를 스크롤 'g하면 모든 작업이 완료되어 이제 당신이 주변에 이동합니다 구성 키를 호출 할 수 있습니다 커서는 현재 위치를 잎이 달린 적이처럼 느낄 것 봐라..!
Dr Beco

18

vimrc의 솔루션은 다음과 같습니다.

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

커서가 화면 중앙에 유지되고 화면이 위 또는 아래로 이동합니다.


나는이 솔루션이 OP에 필요한 것 이상이라고 생각합니다. 나는 그것을 적용했고 그것은 매력처럼 작동합니다.
구스타보 핀 사드

9
'scrolloff'를 'lines'값의 절반으로 설정하는 것은 어떻습니까?
rld.

불행히도 "nnoremap o o <ESC> zza"는 자동 들여 쓰기를 잃지 만, 임시 문자 '.'를 추가하고 제거하여이 문제를 해결할 수 있습니다. "nnoremap o o. <ESC> zzxa"
Neil McGill

@rld에게 감사합니다. '스크롤 오프'도 좋은 해결책 일 것입니다. 감사! 여기 참조가 있습니다 : vim.wikia.com/wiki/…
Henry

14

사용할 때 같은 열에 커서를 두려면 Ctrl+ D, Ctrl+ F, Ctrl+ B, Ctrl+ U, G, H, M, L,gg

다음 옵션을 정의해야합니다.

:set nostartofline

2
zt / zz / zb-고정 커서 및 화면을 t op / center (독일어 : ' z entrum') / b ottom <---> H / M / L-고정 화면으로 이동하고 움직일 때마다 잊어 버립니다 . 커서 H IGH / M의 iddle / L 유동 위치
엘리

8

아무도 Scrolloff커서를 페이지 중앙에 유지하는 옵션을 사용하고 있지 않다는 것에 놀랐습니다 . 그것을 사용해보십시오 :

:set so=999

Vim 위키에서 처음으로 권장되는 방법이며 잘 작동합니다.


3
커서가 항상하지 않으려면 그리고 우측 중간에, 당신은 작은 값으로 설정할 수 있습니다. 예를 들어, :set scrolloff=4커서는 항상 창의 맨 위나 맨 아래에서 최소 4 줄 이상 떨어져 있어야하므로 항상 약간의 컨텍스트가 있어야합니다.
Soren Bjornstad '10

6

과거에이 단축키를 사용했습니다 ( 참고 : 별도의 키 스트로크 (예 : z , 가자, 다음 키 누르기)) :

z enter -> 현재 줄을 화면 상단으로 이동

z . -> 현재 줄을 화면 중앙으로 이동

z - -> 현재 줄을 맨 아래로 이동

명확하지 않은 경우 :

enterReturn또는 Enter키를 의미합니다 .

.DOT 또는 "완전 정지"키 ( .)를 의미합니다.

-하이픈 키를 의미합니다 ( -)

가치가있는 경우 뚜껑 잠금이 켜져 있으면 z.실수로 입력하여 Vi를 저장하고 닫을 위험을 피하십시오 ZZ.


5

커서 이동 명령 앞에 숫자를 붙이면 여러 번 해당 명령이 반복됩니다.

10Ctrl+ E는 하나 대신 Ctrl+ E10 회 수행 합니다.


4

zEnter 이 질문이 요구하는 것을 정확하게 수행합니다.

이상하게 작동 zz하지 않는 곳에서 작동합니다 (특별한 .vimrc가없는 Ubuntu 2016.04 LTS의 vim 7.4.1689)



2

때로는 KJ키를 사용 하여 텍스트를 스크롤하는 것이 유용 하므로 내 .vimrc에이 "스크롤 모드"기능이 있습니다 (또한 바인딩 됨 zs).

scroll_mode.vim을 참조하십시오 .


2

스크롤 내 니모닉 ...

다른 답변에 추가하면 ze및에 주의를 기울 zs이십시오. 커서를 왼쪽 / 오른쪽으로 이동하십시오 (커서를 이동하지 않고)

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+

또한 화면의 이동 위치를 기억하기 위해 키보드 의 hand ltand b및 (qwertz 키보드 사용) c-ec-y( "y"도 아래쪽을 가리킴) 위치를 확인하십시오.


1

커서 위치를 움직이지 않고 파일을 탐색 할 수 있는 플러그인 을 작성했습니다 . 그것은 당신의 위치와 목표 위치 사이의 선을 접은 다음 접은 위로 뛰어 넘거나 중단하고 전혀 움직이지 않는 것을 기반으로합니다.

그냥 클릭하여 중간에 첫 번째 줄에 커서, 마지막 줄에 커서 사이에 빠른 스위치에 쉽게이기도합니다 j, k또는 l당신이 플러그인의 모드에있을 때.

여기에 잘 맞을 것 같아요.


1

vim을 입력하고 다음을 입력하십시오.

:help z

z다시 그리기에 대한 vim 명령이므로 커서 위치에 따라 파일을 다시 그립니다. 사용 가능한 옵션은 다음과 같습니다.

z+-커서를 창 상단 과 첫 줄의 공백이 아닌 문자로 파일을 다시 그립니다 .

z-- 창의 아래와 첫 줄의 공백이 아닌 문자로 커서를 사용하여 파일을 다시 그립니다 .

z.-커서를 창의 중앙 과 줄의 비 공백 문자에서 커서로 파일을 다시 그립니다 .

zt-커서를 창 상단 에 놓고 파일을 다시 그립니다 .

zb- 창의 맨 아래 에 커서가있는 파일을 다시 그립니다 .

zz-커서를 창 중앙 에 놓고 파일을 다시 그립니다 .

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