커서를 현재 줄의 중앙으로 어떻게 이동합니까?


17

커서를 현재 줄의 중간으로 옮길 수있는 방법이 있습니까? (텍스트 행의 중간-화면 너비의 중간이 아님)

M커서를 화면 중앙으로 이동 시키는 것과 비슷한 단축키가 있는지 궁금합니다 .

편집 : 괄호 안에 설명을 추가했습니다.


2
전체 라인의 중간 중간입니까, 화면 너비의 중간입니까?
muru

@muru 전체 라인의 중간을 생각하고 있었다
thameera

2
질문에도 추가 할 수 있습니까? 그리고 포장으로 어떤 일이 일어날 것으로 예상합니까?
muru

답변:


16

이 작업을 수행하는 기본 방법을 모르지만 쉽게 할 수있는 맵을 가질 수 있습니다.

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@Ingo Karkat은 VISUAL 모드에서도 작동하는 다음 변형을 제안했습니다.

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

불행히도 SELECT 모드에서도 트리거됩니다. 결과적으로 나는 부부를 선호합니다.

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'

3
이 변형은 비주얼 모드에서도 올바르게 작동합니다.noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

내장 gm은 정확하게 이것을 수행합니다.


7
이렇게 하면 줄 길이가 아니라 콘솔 너비 와 관련하여 줄 중간으로 이동합니다 . 따라서 10 줄의 줄과 80 자 너비의 콘솔을 사용하는 경우 커서는 줄의 10 번째 문자로 끝납니다 (40 번째가되기 위해 "시도"하기 때문).
apnorton

3
네. 질문에서 우리는 선의 중간 또는 화면의 중간을 찾고 있는지 명확하지 않습니다. 에 대한 비유를 바탕으로 M화면을 가정했습니다.
tommcdo

1
실제로 방금 80 문자의 텍스트가있는 넓은 (약 180 문자) 화면에서 이것을 시도했습니다. 커서가 줄 의 으로 갔습니다 . 매우 유용한 명령이 아닌 것 같습니다.
Ben

@Ben 줄의 끝으로 가거나 화면 너비의 중앙에 가까워 졌습니까? 화면 너비의 50 % 이상인 선으로 시도하거나로 시도하십시오 :set virtualedit=all.
8bittree

그렇습니다. 그러나 OP는 화면의 중간이 아닌 행 텍스트의 중간으로 이동하라는 명령을 요청했습니다. 따라서 질문에 대답하지 않습니다.
Ben

3

Luc의 답변에 추가하기 위해 Easymotion 플러그인이있어 특정 위치로 빠르게 이동할 수 있습니다. 를 누르면 <Leader><Leader>w특정 단어로 이동하기 위해 누를 수있는 키가 강조 표시됩니다. 이렇게하면 현재 줄 중간에있는 단어로 쉽게 이동할 수 있습니다.


1

줄 중간에 공백을 고려하지 않고 텍스트 중간으로 가려면 다음과 같이하십시오.

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

그러나 이것이 시각적 모드에서는 작동하지 않는다고 생각합니다.


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