vim에서 줄 중간으로 이동


14

나는 0이 줄의 시작으로 가고 $는 끝으로 간다는 것을 알고 있지만 중간에 뭔가가 있습니까?

답변:


11
:call cursor(0, len(getline('.'))/2)

4
예를 들면 : nnoremap gm : call cursor (0, len (getline ( '.')) / 2) <cr>
Heptite

3
virtcol ( '$') / 2이면 충분합니다.
Luc Hermitte 1

@Luc Hermitte : 딱딱하지만 탭이 관련되어있을 때 가장 좋은 동작은 아닙니다.
ephemient

그래서 col 대신 virtcol을 사용합니다. :). 그러나 실제로 우리는 | 그리고 cursor ()가 아닙니다. BTW, len ()은 더 나은 결과를 제공하지 않습니다. 또한 len은 멀티 바이트 문자로 다른 문제를 일으킬 것입니다.
Luc Hermitte

8

입력 gm하면 가능하지만 화면 라인별로 이동합니다 (참조 :help gm). 텍스트 라인으로 작업하기 위해이 명령을 다시 매핑 할 수 있습니다.

map gm :call cursor(0, virtcol('$')/2)<CR>

gm은 커서를 화면 중간으로 이동하는 것처럼 보이지만 텍스트 줄이 화면 길이보다 짧으면 중간으로 이동하지 않습니다. 명확하지 않아서 죄송합니다.
teggy

@teggy : 알겠습니다. 텍스트 줄 중간으로 gm을 다시 매핑하도록 솔루션을 수정했습니다. 보시다시피, ephemient와 Luc Hermitte의 솔루션을 결합합니다.
JooMing

ephemient가 지적했듯이 cursor ()가 각 문자를 한 문자로 계산하기 때문에 여전히 하드 타브에 문제가 있습니다. 또한 멀티 바이트 문자로는 작동하지 않습니다.
Luc Hermitte

7

다음은 하드 탭과 멀티 바이트 문자를 존중하는 솔루션입니다.

:exe 'normal '.(virtcol('$')/2).'|'

1

내가 찾은 최고의 솔루션은 다음과 같습니다 . 선의 중간으로 정확하게 점프하는 것은 그리 실용적이지 않습니다. 가운데로 이동 한 후에도 커서를 몇 위치 이동해야 할 가능성이 높습니다. 특정 캐릭터로 이동할 수 있다면 어떨까요? 많은 사람들이 캐릭터를 검색 한 다음 도달 할 때까지 "다음"을 누르십시오. 느립니다. Easy-motion 플러그인은 더 나은 솔루션을 제공합니다.

내가 가장 좋아하는 것은 <leader><leader>s점프하려는 캐릭터입니다. Easy Motion은 모든 경기를 다른 글자로 대체하여 선택할 수 있습니다. 튜토리얼을 참조하십시오. 인생을 변화시키는 플러그인 ...

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