마크를 사용하여 최근에 열었지만 변경하지 않은 파일의 위치로 이동하려면 어떻게해야합니까?


11

종종 파일을 편집하고 작업이 완료되었다고 생각하는 경우 파일을 닫고 다음 단계로 넘어갑니다. 그러나 그 코드로 돌아가서 조금 더 조정해야한다는 것을 알고 있습니다.
파일을 다시 열면 .마크를 사용 하여을 사용 하여 마지막 편집 위치로 이동할 수 있습니다 '..
이제 vim의 마크를 사용하여 최근에 방문했지만 변경되지 않은 파일의 위치로 이동하는 방법을 찾으려고합니다.
마크를 수동으로 설정할 수 있다는 것을 알고 있지만 대부분의 경우 다시 올 것으로 예상하지 않으므로 마크를 설정하지 않고 vim이 자동으로 생성하는 마크를 사용해야합니다.
"마크는에서 달성 할 수있는 방법 인 것 같습니다 :h motion.

" 현재 버퍼를 마지막으로 종료 할 때 커서 위치로. 첫 번째 줄의 첫 문자가 기본값입니다. | 마지막-점프 | 열린 각 파일에 이것을 사용하는 방법. 버퍼 당 하나의 위치 만 기억되며 각 창마다 하나의 위치 만 기억되지 않습니다. 버퍼가 창에 표시되는 한 위치는 변경되지 않습니다. {vi에 없음}.

그러나 만약 내가

  • 버퍼를 보여주는 모든 창을 닫습니다 (그러나 버퍼는 여전히 버퍼 목록에 있습니다). 또는:
  • 버퍼의 모든 인스턴스를 종료

마크가 업데이트되지 않는 것 같습니다. 마크를 사용하여 버퍼 / 파일에서 마지막 커서 위치로 이동할 수 있습니까?


2
나는 당신이 찾고있는 생각 Ctrl+oCtrl+i... :h jump-motions추가 정보를 원하시면
Sundeep

@spasic은 나쁜 제안은 아니지만 몇 번 점프하면 한 번의 점프 목록에서 위치가 손실됩니다. 마크를 버퍼에 스코핑함으로써 더 작은 마크 / 위치리스트를 관리 할 수 ​​있습니다
the_velour_fog

아직 읽지 않았다면 이 팁 이 흥미로울 것입니다. 어쩌면 당신은 당신 조정할해야합니다viminfo
statox

@statox 감사합니다. vim의 도움말과 팁을 보았습니다. "파일을 열 때 해당 솔루션이 자동으로 표시로 이동 한다고 생각 합니다. 실제로 수동으로 마지막 커서 위치로만 이동하고 싶었습니다. 또한 "마크가 설정되고 업데이트 되는 시점을 이해하지 못하여 "마크를 사용할 수 없습니다.
the_velour_fog 12

답변:


6

고전적인 해결책은 다음과 같습니다.

`H

마지막 HTML 파일로 이동하는 등

augroup VIMRC
  autocmd!

  autocmd BufLeave *.css  normal! mC
  autocmd BufLeave *.html normal! mH
  autocmd BufLeave *.js   normal! mJ
  autocmd BufLeave *.php  normal! mP
augroup END

2
고마워, 이것은 실제로 유용 할 수있는 것 같습니다. 그것을 시도하기 위해 vimrc에로드했습니다. 나는에 autocmd을 변경했습니다 WinLeave내가 발견 한 것처럼 BufLeave당신이 분할을 닫고 버퍼가 여전히 다른 열린 어딘가에있을 때 불에 보이지 않는다. 나는 약간의 WinLeave
우연한

3

나는이 vimscript 진술을 썼다.

autocmd BufLeave * :normal ml

설명

  • BufLeave 자동 명령 : 이것은 당신이 때 트리거하는 것 같습니다
    • 다른 창으로 이동
    • 버퍼를 표시하는 마지막 창 을 닫을 때
    • 버퍼 자체를 닫을 때 bd
  • :normal-기본적 command으로 autocmd 의 일부는 ex 명령입니다. 따라서 vim에게 일반 모드 명령을 실행하도록하려면 추가해야합니다.:normal
  • ml-마크를 설정합니다 l(니모닉 : last )

용법

버퍼에 마지막으로 갔을 때 커서 위치를 기억하기 위해

'l

또는

`l

0

당신이 알려진 마지막 위치 복원 커서하고 싶은 경우 viminfo를 , 당신은 사용할 수 있습니다

autocmd BufReadPost * call setpos(".", getpos("'\""))

romainl의 대답은 나에게 특히 유용했으며, 나는 이것을 웹 개발자이기 때문에 이것을 많이 사용했습니다.

augroup VIMRC
    autocmd!
    autocmd BufLeave,WinLeave *.html normal! mH
    autocmd BufLeave,WinLeave *.css normal! mC
    autocmd BufLeave,WinLeave *.js normal! mJ
augroup end

nnoremap <space>h `Hzz
nnoremap <space>c `Czz
nnoremap <space>j `Jzz

잠재적으로 유용한 마지막 옵션은 다음과 :help 'nostartofline같습니다.

               *'startofline'* *'sol'* *'nostartofline'* *'nosol'*
'startofline' 'sol' boolean (default on)
            global
            {not in Vi}
    When "on" the commands listed below move the cursor to the first
    non-blank of the line.  When off the cursor is kept in the same column
    (if possible).  This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
    CTRL-F, "G", "H", "M", "L", gg, and to the commands "d", "<<" and ">>"
    with a linewise operator, with "%" with a count and to buffer changing
    commands (CTRL-^, :bnext, :bNext, etc.).  Also for an Ex command that
    only has a line number, e.g., ":25" or ":+".
    In case of buffer changing commands the cursor is placed at the column
    where it was the last time the buffer was edited.
    NOTE: This option is set when 'compatible' is set.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.